部署HDFS HA的环境
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了部署HDFS HA的环境相关的知识,希望对你有一定的参考价值。
===> 环境架构部署规划:
bigdata1 NameNode ResourceManager Zookeeper JournalNode failOverController
bigdata2 NameNode ResourceManager Zookeeper JournalNode failOverController
bigdata3 DataNode NodeManager Zookeeper
bigdata4 DataNode NodeManager
===> 准备环境:
(*)清除之前的配置
(*)安装JDK、修改/etc/hosts文件、关闭防火墙、免密码登录
###############################################################################
hdfs-site.xml
<!--nameservice 名子
此处必须与core-site文件中fs.defaultFS的值一致-->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<!--ns1 下面有两个 namenode, nn1,nn2-->
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<!-- nn1,nn2 的rpc 通信地址-->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>bigdata1:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>bigdata2:8020</value>
</property>
<!-- nn1, nn2 的 http 通信地址-->
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>bigdata1:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>bigdata2:50070</value>
</property>
<!--指定 JournalNode 的日志在 JournalNode 上的存放位置,ns1 表示保存ns1的日志-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://bigdata1:8485;bigdata2:8485/mycluster</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.mycluster</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>
<!-- 配置隔离机制需要ssh免密码登陆 -->
<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>dfs.journalnode.edits.dir</name>
<value>/data/journal</value>
</property>
<!--开启 NameNode 失败自动切换
这指定应将群集设置为自动故障转移。在你的core-site.xml文件中,添加:
<property>
<name> ha.zookeeper.quorum </name>
<value> bigdata1:2181,bigdata2:2181,bigdata3:2181 </value>
</property>-->
<property>
<name> dfs.ha.automatic-failover.enabled </name>
<value>true</value>
</property>
###############################################################################
core-site.xml
<!--HDFS数据保存的目录,默认是Linux的tmp目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/data/app/hadoop-2.7.1/tmp/</value>
</property>
<!--指定hdfs 的nameservice 为 ns1-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<!--指定zookeeper的地址-->
<property>
<name>ha.zookeeper.quorum</name>
<value>bigdata1,bigdata2,bigdata3</value>
</property>
###############################################################################
mapred-site.xml
<!--MR程序运行的容器是Yarn-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
###############################################################################
yarn-site.xml
<!--开启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>bigdata1</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>bigdata2</value>
</property>
<!-- 指定 zk 集群地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>bigdata1:2181,bigdata2:2181,bigdata3:2181</value>
</property>
<!--NodeManager运行MR任务的方式-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
###############################################################################
slaves
bigdata3
bigdata4
###############################################################################
===> 将配置好的安装文件拷贝到其它几台主机上
scp -r hadoop-2.7.1 bigdata2:/data/app
scp -r hadoop-2.7.1 bigdata3:/data/app
scp -r hadoop-2.7.1 bigdata4:/data/app
===> 启动journalnode:
hadoop-daemon.sh start journalnode
===> 格式化NameNode
注意,这里需要创建core-site.xml 文件中 hadoop.tmp.dir 所指定的目录,否则会报错,
此配置文件指定的目录为/data/app/hadoop-2.7.1/tmp/,因此需要先创建目录
mkdir /data/app/hadoop-2.7.1/tmp/
格式化NameNode
hdfs namenode -format
===> 将 tmp 目录下的 dfs 目录拷贝到 bigdata2 中相同的目录下
scp -r /data/app/hadoop-2.7.1/tmp/dfs bigdata2:/data/app/hadoop-2.7.1/tmp
===> 格式化 zookeeper(bigdata1):
需启动 zookeeper 才能执行成功,否则会提示:WARN zookeeper.ClientCnxn: Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect
java.net.ConnectException: 拒绝连接
zkServer.sh start (在 bigdata1,bigdata2,bigdata3上启动,即,zookeeper 集群所在的机器)
hdfs zkfc -formatZK
===> 至此,环境部署完毕,启动整个集群环境:
1. 启动 zookeeper(bigdata1,bigdata2,bigdata3):
(若不先启动zookeeper,namenode会全部为standby 状态)
zkServer.sh start
2. 启动 hdfs 集群:
start-all.sh (在bigdata1上启动)
yarn-daemon.sh start resourcemanager (在 bigdata2 上启动)
===> 各主机执行 jps 状态:
##############################################################
[[email protected] app]# jps
22224 JournalNode
22400 DFSZKFailoverController
22786 Jps
22019 NameNode
21405 QuorumPeerMain
22493 ResourceManager
##############################################################
[[email protected] app]# jps
9408 QuorumPeerMain
9747 DFSZKFailoverController
9637 JournalNode
9929 Jps
9850 ResourceManager
9565 NameNode
##############################################################
[[email protected] app]# jps
7664 DataNode
7531 QuorumPeerMain
7900 Jps
7775 NodeManager
##############################################################
[[email protected] ~]# jps
7698 NodeManager
7587 DataNode
7823 Jps
##############################################################
测试:访问 50070 端口网页,其中有显示namenode 的状态信息(active/ standby)
可以kill 掉 activ 机器的 NameNode 进程,然后查看另一台 NameNode 的状态信息
以上是关于部署HDFS HA的环境的主要内容,如果未能解决你的问题,请参考以下文章