Hadoop中HA模式配置(HDFS HA&YARN HA)

15 篇文章 0 订阅
7 篇文章 0 订阅

1.前言

  • 操作系统:CentOS 7
  • Hadoop版本:2.7.7
  • Zookeeper版本:3.4.14
  • Java版本:1.8.0_221
  • Hadoop HA模式分为HDFS HA(NameNode HA)和YARN HA(ResourceManager HA)两个部分
  • 在本次配置中同时配置了HDFS HA和YARN HA下的自动故障转移Automatic Failover,以及历史服务器JobHistoryServer
  • 所有配置均在同一用户下操作

2.集群规划

hadoop101hadoop102hadoop103
NameNode
DataNode
ResourceManager
NodeManager
JobHistoryServer
JournalNode
DFSZKFailoverController
Zookeeper

3.具体配置

a) core-site.xml

<configuration>

    <!--指定HDFS文件系统访问地址,将其设置为NameNode的地址-->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://dfsHAcluster</value>
    </property>

    <!--指定Hadoop运行时产生文件的存储目录-->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/HA/hadoop-2.7.7/tmp</value>
    </property>

    <!--指定JournalNode在本地存储edits文件的绝对路径-->
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>${hadoop.tmp.dir}/dfs/journalnode/localdata</value>
    </property>

    <!--HDFS(NameNode) HA模式实现自动故障转移,设置Zookeeper服务器-->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>zkServer1:2181,zkServer2:2181,zkServer3:2181</value>
    </property>    

</configuration>

b) hdfs-site.xml

<configuration>

    <!--指定HDFS副本因子数-->
    <!--由于实验主机磁盘空间不足,本次实验中设置为1,一般需要设置为3-->
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>

    <!--以下是关于HDFS(NameNode) HA模式的配置-->
    <!--设置集群的nameservice name-->
    <property>
        <name>dfs.nameservices</name>
        <value>dfsHAcluster</value>
    </property>

    <!--设置HDFS HA Cluster的节点-->
    <property>
        <name>dfs.ha.namenodes.dfsHAcluster</name>
        <value>nn1,nn2</value>
    </property>

    <!--关于HDFS HA集群nn1节点的配置-->
    <!--设置HDFS HA集群nn1节点的RPC地址-->
    <property>
        <name>dfs.namenode.rpc-address.dfsHAcluster.nn1</name>
        <value>hadoop101:8020</value>
    </property>

    <!--设置HDFS HA集群nn1节点的Web UI地址-->
    <property>
        <name>dfs.namenode.http-address.dfsHAcluster.nn1</name>
        <value>hadoop101:50070</value>
    </property>

        <!--指定HDFS HA集群dfsHAcluster中nn1节点上存储name table(fsimage)文件的本地路径-->
    <property>
        <name>dfs.namenode.name.dir.dfsHAcluster.nn1</name>
        <value>${hadoop.tmp.dir}/dfs/dfsHAcluster/nn1/fsimage</value>
    </property>

    <!--指定HDFS HA集群dfsHAcluster中nn1节点上存储transaction(edits)文件的本地路径-->
    <property>
        <name>dfs.namenode.edits.dir.dfsHAcluster.nn1</name>
        <value>${hadoop.tmp.dir}/dfs/dfsHAcluster/nn1/edits</value>
    </property>

    <!--指定HDFS HA集群dfsHAcluster中nn2节点上存储Blocks文件的本地路径-->
    <property>
        <name>dfs.datanode.data.dir.dfsHAcluster.nn1</name>
        <value>${hadoop.tmp.dir}/dfs/dfsHAcluster/nn1/data</value>
    </property>

    <!--关于HDFS HA集群nn2节点的配置-->
    <!--设置HDFS HA集群nn2节点的RPC地址-->
    <property>
        <name>dfs.namenode.rpc-address.dfsHAcluster.nn2</name>
        <value>hadoop102:8020</value>
    </property>

    <!--设置HDFS HA集群nn2节点的Web UI地址-->
    <property>
        <name>dfs.namenode.http-address.dfsHAcluster.nn2</name>
        <value>hadoop102:50070</value>
    </property>

    <!--指定HDFS HA集群dfsHAcluster中nn2节点上存储name table(fsimage)文件的本地路径-->
    <property>
        <name>dfs.namenode.name.dir.dfsHAcluster.nn2</name>
        <value>${hadoop.tmp.dir}/dfs/dfsHAcluster/nn2/fsimage</value>
    </property>

    <!--指定HDFS HA集群dfsHAcluster中nn2节点上存储transaction(edits)文件的本地路径-->
    <property>
        <name>dfs.namenode.edits.dir.dfsHAcluster.nn2</name>
        <value>${hadoop.tmp.dir}/dfs/dfsHAcluster/nn2/edits</value>
    </property>

    <!--指定HDFS HA集群dfsHAcluster中nn2节点上存储Blocks文件的本地路径-->
    <property>
        <name>dfs.datanode.data.dir.dfsHAcluster.nn2</name>
        <value>${hadoop.tmp.dir}/dfs/dfsHAcluster/nn2/data</value>
    </property>


    <!--设置Active NameNode向StandBy NameNode共享edits文件的URI-->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://zkServer1:8485;zkServer2:8485;zkServer3:8485/dfsHAcluster</value>
    </property>

    <!--设置HDFS用于联络Active NameNode的Java class-->
    <property>
        <name>dfs.client.failover.proxy.provider.dfsHAcluster</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>

    <!--设置当进行故障转移failover时通过何种方式隔离Active NameNode-->
    <!--本次设置成使用ssh隔离-->
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
    </property>

    <!--设置ssh隔离就必须设置成当前用户ssh对其他NameNode免密登录,
    同时需要在此提供私钥路径-->
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/home/TomAndersen/.ssh/id_rsa</value>
    </property>

    <!--设置ssh连接超时时间-->
    <property>
        <name>dfs.ha.fencing.ssh.connect-timeout</name>
        <value>30000</value>
    </property>

    <!--以下通过Zookeeper设置自动故障转移automatic failover-->
    <!--设置开启故障自动转移-->
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>

</configuration>

c) mapred-site.xml

<configuration>

    <!--指定MR程序运行框架,设置为YARN上运行,默认是在本地运行-->
    <!--默认值:local-->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>

    <!--指定历史服务器JobHistoryServer进程间通信IPC地址-->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>hadoop103:10020</value>
    </property>

    <!--指定历史服务器JobHistoryServer的Web UI地址-->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hadoop103:19888</value>
    </property>
    
</configuration>

d) yarn-site.xml

<configuration>

    <!--Site specific YARN configuration properties-->

    <!--设置Reducer获取数据的方式-->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

    <!--此参数指的是nodemanager的可用内存大小,单位为Mb,设置为主机内存大小-->
    <!--本次实验主机内存大小为2GB,此参数根据各机器分配的物理内存大小设置,若大于物理内存值会影响程序运行效率-->
    <!--默认值:8192-->
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>2048</value>
    </property>

    <!--开启日志聚集功能-->
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>

    <!--日志聚集位置,默认为HDFS文件系统的/tmp/logs路径下,默认格式为/tmp/logs/${user}/logs-->
    <!--默认值:/tmp/logs-->
    <property>
        <name>yarn.nodemanager.remote-app-log-dir</name>
        <value>/tmp/logs</value>
    </property>

    <!--聚集日志保留时间设置7-->
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
    </property>

    <!--以下是关于ResourceMangaer HA模式的配置-->
    <!--设置开启YARN HA模式-->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>

    <!--设置ResourceManager Cluster IDRM集群名-->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>RMcluster</value>
    </property>

    <!--设置RM集群中的RM节点ID-->
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>

    <!--以下是关于RM集群中rm1节点的配置-->
    <!--指定RM集群中rm1节点的ip地址-->
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>hadoop102</value>
    </property>

    <!--指定RM集群中rm1节点的Web UI地址-->
    <property>
        <name>yarn.resourcemanager.webapp.address.rm1</name>
        <value>hadoop102:8088</value>
    </property>

    <!--以下是关于RM集群中rm2节点的配置-->
    <!--指定RM集群中rm2节点的ip地址-->
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>hadoop101</value>
    </property>

    <!--指定RM集群中rm2节点的Web UI地址-->
    <property>
        <name>yarn.resourcemanager.webapp.address.rm2</name>
        <value>hadoop101:8088</value>
    </property>

    <!--指定RM集群使用的Zookeeper集群所提供的Client端口-->
    <!--注意与Zookeeper集群中设置的客户端端口一致-->
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>zkServer1:2181,zkServer2:2181,zkServer3:2181</value>
    </property>

    <!--启用RM自动恢复-->
    <!--需同时设置yarn.resourcemanager.store.class-->
    <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>

</configuration>

4.启动HA集群

a) 首次启动集群

注意:
  • 首次启动一个新的Hadoop HA集群时需要对NameNodes进行格式化,若已经格式化则直接正常启动即可

  • 若想重新格式化NameNodes,需要将所有NameNodes节点上hadoop中的tmplogs文件夹都删除,同时最好也删除Zookeeper集群上的所有hadoop-ha相关节点

格式化NameNodes步骤:
(1) 启动Zookeeper集群
./bin/zkServer.sh
(2) 在HDFS集群中所有节点上启动JournalNode
./sbin/hadoop-daemon.sh start journalnode
(3) 在首个NameNode节点上格式化NameNode(dfsHAcluster.nn1)
./bin/hdfs namenode -format
(4) 在此节点上格式化zkNode即创建zkNode节点(dfsHAcluster.nn1)
./bin/hdfs zkfc -formatZK
(5) 在此节点上启动首个NameNode进程(dfsHAcluster.nn1)
./sbin/hadoop-daemon.sh start namenode
(6) 同时启动DFSZKFailoverController、DataNode进程(dfsHAcluster.nn1)
./sbin/hadoop-daemon.sh start zkfc
./sbin/hadoop-daemon.sh start datanode
(7) 在其他所有NameNode节点上进行同步格式化
./bin/hdfs namenode -bootstrapStandby
(8) 同时在其他所有NameNode节点上启动NameNode、DFSZKFailoverController、DataNode进程
./sbin/hadoop-daemon.sh start namenode
./sbin/hadoop-daemon.sh start zkfc
./sbin/hadoop-daemon.sh start datanode
(9) 启动RM集群:在YARN集群中所有RM节点上启动RM进程,第二个启动的RM为Active(可以不启动)
./sbin/yarn-daemon.sh start resourcemanager
(10) 启动NM集群:在YARN集群中所有节点上启动NM进程(可以不启动)
./sbin/yarn-daemon.sh start nodemanager
(11) 在历史服务器节点上,启动JobHistoryServer进程(可以不启动)
./sbin/mr-jobhistory-daemon.sh
正常情况下此时集群已经正常运行,各节点具体进程情况如下所示:
[tomandersen@hadoop101 hadoop-2.7.7]$ call-cluster.sh jps
----------hadoop103----------
32688 Jps
23553 QuorumPeerMain
32418 JobHistoryServer
32291 JournalNode
32520 NodeManager
32186 DataNode
----------hadoop102----------
36963 JournalNode
37669 Jps
36775 NameNode
37209 ResourceManager
36858 DataNode
25612 QuorumPeerMain
37308 NodeManager
37102 DFSZKFailoverController
----------hadoop101----------
40129 NameNode
40451 JournalNode
41075 Jps
40788 ResourceManager
40246 DataNode
40891 NodeManager
40653 DFSZKFailoverController
28798 QuorumPeerMain

----------execute "jps" in cluster takes 4 seconds----------

[tomandersen@hadoop101 hadoop-2.7.7]$ 
[tomandersen@hadoop101 hadoop-2.7.7]$ 
可以通过haadminrmadmin命令查看和更改HA节点状态,集群中只有一个NN和RM处于Active,其余皆为StandBy:
(1) haadmin 获取HDFS HA模式中指定NN节点的状态,如:
bin/hdfs haadmin -getServiceState nn1
(2) haadmin 强制修改HDFS HA模式中指定NN节点的状态,如:
bin/hdfs haadmin -transitionToActive --forcemanual nn1
(3) rmadmin 获取YARN HA模式中指定节点的状态,如:
bin/yarn rmadmin -getServiceState rm1
(4) rmadmin 强制修改YARN HA模式中指定节点的状态,如:
bin/yarn rmadmin -transitionToStandby --forcemanual rm2
若要关闭HDFS集群,直接使用对应命令关闭即可:
./sbin/stop-dfs.sh
若要关闭YARN集群,除了在其中的一个RM节点上执行关闭YARN命令之外还需要在其他节点上手动关闭RM进程:
关闭YARN集群:
./sbin/stop-yarn.sh
在其他节点上关闭RM:
./sbin/yarn-daemon.sh stop resourcemanager

b) 正常启动集群

启动HDFS HA集群:
./sbin/start-dfs.sh
启动YARN HA集群:
./sbin/start-yarn.sh
同时并在其他RM节点上手动启动RM进程进而开启RM HA,第二个启动的RM为Active:
./sbin/yarn-daemon.sh start resourcemanager

End~

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值