Hadoop HA高可用+Zookeeper搭建
简介
- 本篇介绍在VMware+CentOS 7.4环境上搭建Hadoop HA+Zookeeper。
- Hadoop集群分布如下:
编号 | 主机名 | namenode节点 | zookeeper节点 | journalnode节点 | datanode节点 | resourcemanager节点 |
---|---|---|---|---|---|---|
1 | master1 | √ | √ | √ | √ | |
2 | master2 | √ | √ | √ | √ | |
3 | slave1 | √ | √ | √ | ||
4 | slave2 | √ |
- 使用软件版本:
jdk-8u144-linux-x64
hadoop-2.6.0
zookeeper-3.4.14
JDK安装
1. 解压jdk安装包至目标文件夹
tar -zxvf /opt/software/jdk-8u144-linux-x64.tar.gz -C /usr/local/src/
2. 修改环境变量
vi /etc/profile
在最后添加如下内容:
export JAVA_HOME=/usr/local/src/jdk
export PATH=$JAVA_HOME/bin:$PATH
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib
3. 使环境变量生效、检查jdk版本验证jdk安装是否成功
source /etc/profile
java -version
出现下图则jdk安装成功:
Zookeeper配置
1. 解压zookeeper安装包至目标文件夹
tar -zxvf /opt/software/zookeeper-3.4.14.tar.gz -C /usr/local/scr/
2. 添加环境变量、环境变量生效
vi /etc/profile
在最后添加如下内容:
#.....zookeeper.....
export ZOOKEEPER_HOME=/usr/local/scr/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
使环境变量生效:
source /etc/profile
3. 在zookeeper目录下创建data目录并在其中新建myid文件
[root@master1 zookeeper]# mkdir data
[root@master1 data]# touch myid
[root@master1 data]# echo 1 >> myid
4. 配置zookeeper目录下的conf文件夹中的zoo.cfg文件
复制zoo_sample.cfg文件并改名为zoo.cfg
[root@master1 conf]# cp zoo_sample.cfg zoo.cfg
修改zoo.cfg文件中dataDir数据存放位置,指向为第三步中的data目录,并在最后添加zookeeper集群节点分布
[root@master1 conf]# vi zoo.cfg
5. 拷贝分发zookeeper给master2、slave1节点
拷贝zookeeper软件
[root@master1 ~]# scp -r /usr/local/scr/zookeeper/ master2:/usr/local/scr/
拷贝环境变量文件
[root@master1 ~]# scp -r /etc/profile master2:/etc/profile
使环境变量生效
source /etc/profile
注意:master2、slave1节点中zookeeper目录下data目录下的myid文件中需分别修改为2和3
6. 三个zookeeper节点分别启动Zookeeper集群,并验证安装是否成功
[root@master1 ~]# zkServer.sh start
[root@master1 ~]# zkServer.sh status
zookeeper成功搭建则显示为如下:
Hadoop HA配置
1. 解压Hadoop安装包到目标目录下,并配置环境变量
tar -zxvf /opt/software/hadoop-2.6.0.tar.gz -C /usr/local/scr/
修改环境变量:
[root@master1 ~]# vi /etc/profile
添加环境变量:
#.....hadoop......
export HADOOP_HOME=/usr/local/scr/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
刷新环境变量:
[root@master1 ~]# source /etc/profile
2. 配置hadoop-env.sh文件:(配置文件都在…/hadoop/etc/hadoop/…路径下)
修改文件中jdk路径
3. 配置core-site.xml文件:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://myha</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/scr/hadoop/tmp</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>master1:2181,master2:2181,slave1:2181</value>
</property>
<property>
<name>ha.zookeeper.session-timeout.ms</name>
<value>1000</value>
</property>
</configuration>
4. 配置hdfs-site.xml文件:
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/local/scr/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/scr/hadoop/tmp/dfs/data</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>myha</value>
</property>
<property>
<name>dfs.ha.namenodes.myha</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.myha.nn1</name>
<value>master1:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.myha.nn1</name>
<value>master1:50070</value>
</property>
<property>
<name>dfs.namenode.rpc-address.myha.nn2</name>
<value>master2:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.myha.nn2</name>
<value>master2:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://master1:8485;master2:8485;slave1:8485/myha</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/local/scr/hadoop/data/journaldata</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.myha</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
<property>
<name>ha.failover-controller.cli-check.rpc-timeout.ms</name>
<value>60000</value>
</property>
</configuration>
5. 配置mapred-site.xml文件:
cp mapred-site.xml.template mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master1:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master1:19888</value>
</property>
</Configuration>
6. 配置yarn-site.xml文件:
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>master1</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>master2</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>master1:2181,master2:2181,slave1:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.log-aggregation-enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value>
</property>
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
</configuration>
7. 修改slaves文件:
slave1
slave2
8. 进入hadoop目录下创建tmp临时目录以及journaldata目录
[root@master1 hadoop]# mkdir -p tmp/dfs/name
[root@master1 hadoop]# mkdir -p tmp/dfs/data
[root@master1 hadoop]# mkdir -p data/journaldata
9. 拷贝分发至子节点master2、slave1、slave
拷贝hadoop软件
scp -r /usr/local/scr/hadoop/ master2:/usr/local/scr/
拷贝环境变量文件
scp -r /etc/profile master2:/etc/profile
使环境变量生效
source /etc/profile
Hadoop初始化、启动(按顺序!按顺序!按顺序!)
1. 启动Zookeeper
zkServer.sh start
2. 在你配置的各个journalnode节点启动该进程
hadoop-daemon.sh start journalnode
3. 格式化namenode(先选取一个namenode(master1)节点进行格式化)
hadoop namenode -format
4. 要把在master1节点上生成的元数据复制到另一个namenode(master2)节点上
scp -r /usr/local/scr/hadoop/tmp master2:$PWD
5. 格式化zkfc(如果出现两个节点都为standby,请注意有没有格式化zkfc哦!!!)
hdfs zkfc -formatZK
6. 启动HDFS
start-dfs.sh
7. 启动YARN
start-yarn.sh
#若resourcemanager备用节点(master2)没有成功启动起来,则手动启动
yarn-daemon.sh start resourcemanager
8. 启动mapreduce任务历史服务器
mr-jobhistory-daemon.sh start historyserver
9. 查看各主节点的状态
#HDFS
hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2
#YARN
yarn rmadmin -getServiceState rm1
yarn rmadmin -getServiceState rm2
10. web验证
- Web方式验证hdfs(ip地址:50070)
- Web方式验证Yarn(ip地址:8088)
最后,记得点赞哦!!!ღ( ´・ᴗ・` )比心!!!
系列文章:
Hadoop HA高可用+Zookeeper搭建 一站式解決方案!!!
【Hadoop大数据平台组件搭建系列】——Hadoop完全分布式搭建(基于CentOS7.4) 一站式解决!!!
【Hadoop大数据平台组件搭建系列(一)】——Zookeeper组件配置
【Hadoop大数据平台组件搭建系列(二)】——Sqoop组件配置
【Hadoop大数据平台组件搭建系列(三)】——Hive组件配置
【Hadoop大数据平台组件搭建系列(四)】——Kafka组件配置
【Hadoop大数据平台组件搭建系列(五)】——MySQL组件配置(tar源码安装)
【Hadoop大数据平台组件搭建系列(六)】——Spark完全分布式组件配置
【Hadoop大数据平台组件搭建系列(七)】——HBase完全分布式组件配置