目录
1.集群规划
2.文件配置
3.启动集群
4.查看集群
在开始Hadoop集群的HDFS高可用环境搭建之前,需要完成zookeeper搭建工作。
1.集群规划
节点 | NameNode | DataNode | ResourceManager | NodeManager | JournalNode | ZKFC | QuorumPeerMain |
master | √ | √ | √ | √ | √ | √ | √ |
slave1 | √ | √ | √ | √ | √ | √ | |
slave2 | √ | √ | √ | √ |
集群规划完成后,既可以开始搭建HDFS HA集群环境。
2.文件配置
Hadoop的相关配置文件主要包括core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml和workers这5个文件,下面依次介绍每个文件的配置内容。
(1) 配置core-site.xml。
注意:如果打开的文件是一个空白文件,说明是新建了该文件,不保存退出,检查路径或文件名是否有错
[root@master ~]# cd /opt/module/hadoop-3.1.3/etc/hadoop/
[root@master hadoop]# vi core-site.xml
<configuration>
<!-- 指定HDFS的nameservice为ns -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/tmp</value>
</property> <!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>master:2181,slave1:2181,slave2:2181</value>
</property>
</configuration> (2) 配置hdfs-site.xml。
[root@master hadoop]# vi hdfs-site.xml<configuration>
<!-- 指定HDFS副本的数量 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property><!-- 指定HDFS的nameservice为ns,要与core-site.xml文件配置内容一致-->
<property>
<name>dfs.nameservices</name>
<value>ns</value>
</property>
<!-- 集群中NameNode节点名称 -->
<property>
<name>dfs.ha.namenodes.ns</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 --><property>
<name>dfs.namenode.rpc-address.ns.nn1</name>
<value>master:9000</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns.nn2</name>
<value>slave1:9000</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns.nn1</name>
<value>master:50070</value>
</property><!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns.nn2</name>
<value>slave1:50070</value>
</property>
<!-- 指定NameNode元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://master:8485;slave1:8485;slave2:8485/ns</value>
</property> <!-- 开启NameNode故障时自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property> <!-- 访问代理类:client,mycluster,active配置失败自动切换实现方式-->
<property>
<name>dfs.client.failover.proxy.provider.ns</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制,即同一时刻只能有一台服务器对外响应 -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!-- 使用隔离机制时需要ssh无秘钥登录-->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!-- 声明journalnode服务器存储目录-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/module/hadoop-3.1.3/ha/journal</value>
</property>
<!-- 关闭权限检查-->
<property>
<name>dfs.permissinos.enabled</name>
<value>false</value>
</property> </configuration>
(3)配置yarn-site.xml。
[root@master hadoop]# vi yarn-site.xml
<configuration>
<!-- Reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property> <property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
</configuration>
(4) 配置mapred-site.xml。
[root@master hadoop]# vi mapred-site.xml
<configuration>
<!-- 指定MR运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property> <property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>[root@master hadoop]# vi workers
[root@master hadoop]# vi workers
(5)配置workers文件。打开该配置文件,然后配置以下内容:
master
slave1
slave2
该文件中写入哪个主机名,哪个主机就会存在datanode节点。
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
(6)定义root用户操作hdfs namenode等,将以下内容写入配置文件profile末尾,并让修改后的文件生效。
[root@master ~]# vi /etc/profile
[root@master ~]# source /etc/profile
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root export HDFS_ZKFC_USER=root
export HDFS_JOURNALNODE_USER=root
(7)使用scp命令将配置好的hadoop和/etc/profile文件分发到slave1和slave2节点。
[root@master hadoop]# cd ..
[root@master etc]# scp -r hadoop slave1:/opt/module/hadoop-3.1.3/etc/
[root@master etc]# scp -r hadoop slave2:/opt/module/hadoop-3.1.3/etc/
[root@master etc]# scp /etc/profile slave1:/etc/
[root@master etc]# scp /etc/profile slave2:/etc/
[root@master etc]# source /etc/profile
[root@slave1 etc]# source /etc/profile
[root@slave2 etc]# source /etc/profile
3.启动集群
(1) 启动ZooKeeper
分别在master、slave1和slave2节点输入以下命令。
[root@master ~]# zkServer.sh start
如果显示一个leader和两个follower,则表示zookeeper启动成功。
(2) 启动JournalNode
分别在master、slave1和slave2节点输入以下命令。
[root@master ~]# hadoop-daemons.sh start journalnode
输入jps.sh脚本命令,查看节点启动情况。
(3)格式化HDFS
删除mater、slave1和slave2安装目录下tmp、log和ha文件夹。
[root@master ~]# cd /opt/module/hadoop-3.1.3/
[root@master hadoop-3.1.3]# ls
append.txt include logs share
bin lib NOTICE.txt tmp
etc libexec README.txt sbin
ha LICENSE.txt
[root@master hadoop-3.1.3]# rm -rf tmp
[root@master hadoop-3.1.3]# rm -rf logs
[root@master hadoop-3.1.3]# rm -rf ha
[root@slave1 ~]# cd /opt/module/hadoop-3.1.3/
[root@slave1 hadoop-3.1.3]# ls
append.txt include logs share
bin lib NOTICE.txt tmp
etc libexec README.txt sbin
ha LICENSE.txt
[root@slave1 hadoop-3.1.3]# rm -rf tmp
[root@slave1 hadoop-3.1.3]# rm -rf logs
[root@slave1 hadoop-3.1.3]# rm -rf ha
[root@slave2 ~]# cd /opt/module/hadoop-3.1.3/
[root@slave2 hadoop-3.1.3]# ls
append.txt include logs share
bin lib NOTICE.txt tmp
etc libexec README.txt sbin
ha LICENSE.txt
[root@slave2 hadoop-3.1.3]# rm -rf tmp
[root@slave2 hadoop-3.1.3]# rm -rf logs
[root@slave2 hadoop-3.1.3]# rm -rf ha
[root@master hadoop-3.1.3]# hdfs namenode -format
输入对应命令后,若出现图4-1所示标志,说明NameNode格式化成功。
图3-1 格式化NameNode成功界面
为了slave1和master主机NameNode保持一致,需要将master主机上hadoop-3.1.3目录下的tmp文件夹分发给slave1
[root@master hadoop-3.1.3]# scp -r tmp slave1:/opt/module/hadoop-3.1.3/
(4) 格式化ZKFC
[root@master hadoop-3.1.3]# hdfs zkfc -formatZK
(5) 整体启动hdfs和yarn。
[root@master hadoop-3.1.3]# start-dfs.sh
[root@master hadoop-3.1.3]# start-yarn.sh
输入jps命令,查看主机节点启动情况。
[root@master hadoop-3.1.3]# jps.sh
**********master**********
14192 NameNode
14357 DataNode
14806 DFSZKFailoverController
13752 JournalNode
15144 NodeManager
13450 QuorumPeerMain
14989 ResourceManager
15503 Jps
**********slave1**********
7971 JournalNode
7829 QuorumPeerMain
8696 DFSZKFailoverController
8936 Jps
8793 NodeManager
8395 NameNode
8491 DataNode
**********slave2**********
13424 QuorumPeerMain
14259 NodeManager
14391 Jps
14072 DataNode
13657 JournalNode
[root@master hadoop-3.1.3]#
若需关闭集群,在主机上输入相应关闭的命令。启动集群是先hdfs后yarn,关闭集群是先yarn后hdfs。
4.查看集群
若要配置yarn ha 环境,只需要在hdfs ha基础上,更改yarn-site.xml文件。
<configuration>
<!-- Reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 开启YARN HA -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 指定YARN HA的名称 -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>RM_CLUSTER</value>
</property>
<!-- 指定两个resourcemanager的名称 -->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property> <!-- 配置rm1,rm2的主机 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>master</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>slave1</value>
</property> <!-- 配置YARN的http端口 -->
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>master:8088</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>slave1:8088</value>
</property><!-- 配置zookeeper的地址 -->
<property> <name>yarn.resourcemanager.zk-address</name>
<value>master:2181,slave1:2181,slave2:2181</value>
</property> <!-- 开启yarn resourcemanager restart -->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property><!-- 配置resourcemanager的状态存储到zookeeper中 -->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
</configuration>再将更改后的yarn-site.xml文件分发给slave1和slave2。