文章目录

  • 一.HDFS-HA集群配置
  • 1.配置HDFS-HA集群
  • 2.启动 HDFS-HA 集群
  • 3.配置 HDFS-HA 自动故障转移
  • 二.YARN-HA配置
  • 配置 YARN-HA 集群


一.HDFS-HA集群配置

1.配置HDFS-HA集群

  • ①HDFS 高可用集群规划:
    请保证 Hadoop 完全分布式和 ZooKeeper 完全分布式环境已经安装完成。方法步骤在上一篇文章中:hadoop的安装配置和集群搭建
    为了方便理解,说明一下我的三台机器名和ip地址
    hadopp1 192.168.184.111
    hadopp2 192.168.184.112
    hadopp3 192.168.184.113
  • ②在 hadoop1 配置 core-site.xml :
<!-- 默认节点为namenode集群 -->
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://mycluster</value>
</property>
<!-- hdfs的临时文件的目录  -->
<property>
   <name>hadoop.tmp.dir</name>
   <value>/opt/hadoop/hdfsTmp</value>
</property>
<!-- 其他机器的root用户可访问 -->
<property>
   <name>hadoop.proxyuser.root.hosts</name>
   <value>*</value>
</property>
<!-- 其他root组下的用户都可以访问 -->
<property>
        <name>hadoop.proxyuser.root.groups</name>
        <value>*</value>
</property>
  • ③在 hadoop1 配置 hdfs-site.xml:
<!-- 设置数据块应该被复制的份数 -->
<property>
  		<name>dfs.replication</name>
  		<value>3</value>
</property>
<property>
  		<name>dfs.namenode.secondary.http-address</name>
  		<value>hadoop2:50090</value>
</property>
<!-- 完全分布式集群名称 -->
<property>
        <name>dfs.nameservices</name>
        <value>mycluster</value>
</property>
<!-- 集群中 NameNode 节点都有哪些,这里是 nn1和nn2可自定义-->
<property>
        <name>dfs.ha.namenodes.mycluster</name>
        <value>nn1,nn2</value>
 </property>
 <!-- nn1 的 RPC 通信地址 -->
 <property>
        <name>dfs.namenode.rpc-address.mycluster.nn1</name>
        <value>hadoop1:9000</value>
</property>
 <!-- nn2 的 RPC 通信地址 -->
 <property>
        <name>dfs.namenode.rpc-address.mycluster.nn2</name>
        <value>hadoop2:9000</value>
</property>
 <!-- nn1 的 http 通信地址 -->
 <property>
        <name>dfs.namenode.http-address.mycluster.nn1</name>
        <value>hadoop1:50070</value>
</property>
<!-- nn2 的 http 通信地址 -->
 <property>
        <name>dfs.namenode.http-address.mycluster.nn2</name>
        <value>hadoop2:50070</value>
</property>
 <!-- 指定 NameNode 元数据在 JournalNode 上的存放位置要把所有机器加进去 -->
 <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485/mycluster</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/hadoop/data/jn</value>
</property>
 <!-- 关闭权限检查-->
 <property>
        <name>dfs.permissions.enable</name>
        <value>false</value>
</property>
 <!-- 访问代理类:client,mycluster,active 配置失败自动切换实现方 式-->
 <property>
        <name>dfs.client.failover.proxy.provider.mycluster</name>
		<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

注意修改完配置文件将这俩文件用scp命令全部发送到其他机器上

2.启动 HDFS-HA 集群

  • ①在各个 JournalNode 节点上,输入以下命令启动 journalnode 服务: hadoop-daemon.sh start journalnode
  • ②在[nn1]上,对其进行格式化,并启动,格式化只在第一次启动时需要以后不需要: hdfs namenode -format , hadoop-daemon.sh start namenode
  • ③在[nn2]上,同步 nn1 的元数据信息,只在第一次启动时需要,以后不需要: hdfs namenode -bootstrapStandby
  • ④启动[nn2]: hadoop-daemon.sh start namenode
  • ⑤在[nn1]上,启动所有 datanode : hadoop-daemons.sh start datanode

3.配置 HDFS-HA 自动故障转移

  • ①.在 hdfs-site.xml 中增加:
<property>  
	<name>dfs.ha.automatic-failover.enabled</name>  
	<value>true</value> 
</property>
  • ②在 core-site.xml 文件中增加:
<property>  
	<name>ha.zookeeper.quorum</name>  
	<value>hadoop110:2181,hadoop111:2181,hadoop112:2181</value> 
</property>
  • ③启动:
    1)关闭所有 HDFS 服务: stop-dfs.sh2)启动 Zookeeper 集群,即在所有机器输入如下命令: zkServer.sh start3)初始化 HA 在 Zookeeper 中状态: hdfs zkfc -formatZK
    4)启动 HDFS 服务: start-dfs.sh5)在各个 NameNode 节点上启动 DFSZK Failover Controller,先在哪台机器启动,哪个机器的NameNode就是Active NameNode : hadoop-daemon.sh start zkfc

二.YARN-HA配置

配置 YARN-HA 集群

  • ①yarn-site.xml 修改:
<!-- reducer获取数据方式 -->
<property>
    	<name>yarn.nodemanager.aux-services</name>
    	<value>mapreduce_shuffle</value>
</property>
<!--启用 resourcemanager ha-->
 <property>
   		<name>yarn.resourcemanager.ha.enabled</name>
    	<value>true</value>
 </property>
 <!--声明两台 resourcemanager 的地址-->
 <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>cluster-yarn1</value>
 </property>
 <property>
   		 <name>yarn.resourcemanager.ha.rm-ids</name>
   		 <value>rm1,rm2</value>
 </property>
 <property>
         <name>yarn.resourcemanager.hostname.rm1</name>
         <value>hadoop110</value>
 </property>
 <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>hadoop111</value>
 </property>
<!--指定 zookeeper 集群的地址-->
<property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>hadoop110:2181,hadoop111:2181,hadoop112:2181</value>
</property>
<!--启用自动恢复-->
<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>
<!-- 日志保留时间设置7天 -->
<property>
    	<name>yarn.log-aggregation.retain-seconds</name>
    	<value>604800</value>
</property>

配置完用scp命令将文件发送到其他机器

  • ②启动YARN:
  • 1)在 hadoop110 中执行: start-yarn.sh
  • 2)在 hadoop111 中执行: yarn-daemon.sh start resourcemanager
  • 3)查看服务状态: yarn rmadmin -getServiceState rm1
  • 4)需要下载psmisc依赖包,否则无法完成自动切换节点 yum install -y psmisc