Hadoop的HA高可用环境搭建
Posted 甜_tian
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop的HA高可用环境搭建相关的知识,希望对你有一定的参考价值。
目录
准备工作
1)修改主机名(建议把主机名改成hdp-1,hdp-2的形式,方便后续配置环境)
//查看主机名
hostname
//修改主机名
vim /etc/sysconfig/network
2)修改ip对应主机名
vim /etc/hosts
//这里配置上所有节点的IP和对应的主机名,如下
192.168.11 hdp-1
192.168.12 hdp-2
192.168.13 hdp-3
3)关闭防火墙
//centos 6
service iptables status //查看防火墙的状态
service iptables stop //关闭防火墙
//centos 7
firewall-cmd --state //查看防火墙的状态
systemctl stop firewalld.service //关闭防火墙
4)配置ssh免密登录
//在三台机器上分别运行
ssh-keygen -t rsa
会在/root/.ssh目录下生成如下密钥
先在第一台机器上运行
cat id_rsa.pub >> authorized_keys
此时生成一个authorized_keys文件,将另外两台服务器的id_rsa.pub复制进这个文件中
使用scp命令,将authorized_keys文件复制到另外两台服务器同样的目录下
scp authorized_keys hdp-2:/root/.ssh/
scp authorized_keys hdp-3:/root/.ssh/
三台机器上都运行以下命令,设置权限
chmod 600 authorized_keys
最后用ssh + 主机名,进行ssh免密登录
5)同步三台主机时间
date //查看时间是否一致
yum install ntpdate
ntpdate cn.pool.ntp.org
jdk
1)官网https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html下载 jdk-8u181-linux-x64.tar.gz
2)解压 tar -zxvf jdk-8u181-linux-x64.tar.gz
3)创建Java目录
mkdir /usr/local/java
4)把解压后的文件放入Java文件下
5)配置环境变量
vim /etc/profile
//修改如下
export JAVA_HOME= /usr/local/jdk1.8.0_181
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
source /etc/profile
6)java -version 检测
zookeeper
1)https://downloads.apache.org/zookeeper/stable/ 官网下载安装包,解压,放入相应目录,步骤如上
2)修改 /zookeeper/conf下的配置文件
//复制一个配置文件出来
cp zoo_sample.cfg zoo.cfg
//修改复制出来的配置
vim zoo.cfg
//配置如下
dataDir=/home/hadoop/app/zookeeper-3.4.5/tmp
server.1=hdp-1:2888:3888
server.2=hdp-2:2888:3888
server.3=hdp-3:2888:3888
mkdir tmp
//设置本台机器的myid,另外两台分别是2和3
echo 1 > /usr/local/zookeeper-3.4.5/tmp/myid
3)将配置好的zookeeper拷贝到其他节点,修改 myid
4)在三台机器上分别启动zk
cd /zookeeper-3.4.5/bin/
./zkServer.sh start //启动
./zkServer.sh status //查看状态
或者可以使用shell脚本在一台机器上启动所有zk
vim /etc/init.d/zookeeper //编写zookeeper脚本
脚本如下:
#zk路径
ZK_PATH=/opt/zookeeper/zookeeper-3.4.11/
#java路径
export JAVA_HOME=/opt/java/jdk1.8.0_221/
case $1 in
start) sh $ZK_PATH/bin/zkServer.sh start;;
stop) sh $ZK_PATH/bin/zkServer.sh stop;;
status) sh $ZK_PATH/bin/zkServer.sh status;;
restart) sh $ZK_PATH/bin/zkServer.sh restart;;
*) echo "require start|stop|status|restart" ;;
esac
把脚本注册为Service
chkconfig --add zookeeper
增加权限
chmod +x /etc/init.d/zookeeper
就可以用 service zookeeper在一台机器上启动服务了
Hadoop
1)官网https://hadoop.apache.org/releases.html下载安装包,步骤如上
2)配置环境变量
vim /etc/profile
export HADOOP_HOME=/root/apps/hadoop-2.9.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /etc/profile
hadoop version //检测是否配置成功
3)修改Hadoop路径下/etc/hadoop下的配置文件
修改core-site.xml
<configuration>
<!-- 指定hdfs的namenode -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hdp-1</value>
</property>
<!-- 指定hadoop运行时产生文件的存储路径 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp/</value>
</property>
<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>hdp-1:2181,hdp-2:2181,hdp-3:2181</value>
</property>
</configuration>
修改hdfs-site.xml
<configuration>
<!--指定hdfs的nameservice为hdp-1,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>hdp-1</value>
</property>
<!-- hdp-1下面有两个NameNode,分别是nn1,nn2,注意这里的名字不可以和nameserivice的一样-->
<property>
<name>dfs.ha.namenodes.hdp-1</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.hdp-1.nn1</name>
<value>hdp-1:9000</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.hdp-1.nn1</name>
<value>hdp-1:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.hdp-1.nn2</name>
<value>hdp-2:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.hdp-1.nn2</name>
<value>hdp-2:50070</value>
</property>
<!-- 指定NameNode的共享edits元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hdp-1:8485;hdp-2:8485;hdp-3:8485/hdp-1</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/local/hadoop/journaldata</value>
</property>
<!-- 开启NameNode失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.hdp-1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxy Provider</value>
</property>
<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<!-- 使用sshfence隔离机制时需要ssh免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!-- 配置sshfence隔离机制超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
<!-- 设置namenode存放的路径 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/local/hadoop/name</value>
</property>
<!-- 设置hdfs副本数量 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- 设置datanode存放的路径 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/hadoop/data</value>
</property>
<!-- 在NN和DN上开启WebHDFS (REST API)功能,不是必须 -->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
修改mapred-site.xml
<configuration>
<!-- 指定mr框架为yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
修改yarn-site.xml
<configuration>
<!-- 开启RM高可用 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 指定RM的cluster id -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property>
<!-- 指定RM的逻辑名字 -->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- 分别指定RM的地址 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hdp-1</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hdp-2</value>
</property>
<!-- 指定zk集群地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hdp-1:2181,hdp-2:2181,hdp-3:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
修改hadoop下的workers(3.0以前为slaves)
hdp-1
hdp-2
hdp-3
配置好后均同步到其他服务器
4)启动
有两种方式,一种全部启动,另一种单独启动所需进程
第一种:
//第一次启动需要格式化namenode,后续不用格式化
hdfs namenode -format
start-all.sh //全部启动
第二种:
//严格按照顺序
//手动启动journalnode
cd /usr/local/hadoop
sbin/hadoop-daemon.sh start journalnode
//格式化namenode:
hdfs namenode -format
//格式化ZKFC:
hdfs zkfc -formatZK
//启动HDFS:
sbin/start-dfs.sh
//启动YARN:
sbin/start-yarn.sh
至此,Hadoop的HA配置完毕!
搭建过程中遇到的问题:
Hadoop启动时的权限问题:
在hadoop/sbin目录下,start-dfs.sh和stop-dfs.sh文件,添加下列参数
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
HDFS_JOURNALNODE_USER=root HDFS_ZKFC_USER=root
start-yarn.sh和stop-yarn.sh文件,添加下列参数:
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
JAVA_HOME配置好后,Hadoop启动仍报错,找不到java的问题:
在hadoop/etc/hadoop目录下,hadoop-env.sh添加
export JAVA_HOME = /usr/local/jdk1.8.0_181
以上操作完成后,均同步到其他服务器内!
以上是关于Hadoop的HA高可用环境搭建的主要内容,如果未能解决你的问题,请参考以下文章