一.HDFS-HA 集群配置

1.1 配置 HDFS-HA 集群

  • 1.HDFS 高可用集群规划,请保证 Hadoop 完全分布式和 ZooKeeper 完全分布式环境已经安装完成。
    hadoop集群搭建
hadoop110hadoop111
NameNodeNameNode
  • 2.在 hadoop110 配置 core-site.xml :
<!-- 默认节点为namenode集群 -->
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://mycluster</value>
</property>
<!-- hdfs的临时文件的目录  -->
<property>
   <name>hadoop.tmp.dir</name>
   <value>/opt/install/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>
  • 3.在 hadoop110 配置 hdfs-site.xml
<!-- 设置数据块应该被复制的份数 -->
<property>
  <name>dfs.replication</name>
  <value>3</value>
</property>
<property>
  <name>dfs.namenode.secondary.http-address</name>
  <value>hadoop111: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>hadoop110:9000</value>
</property>
 <!-- nn2 的 RPC 通信地址 -->
 <property>
        <name>dfs.namenode.rpc-address.mycluster.nn2</name>
        <value>hadoop111:9000</value>
</property>
 <!-- nn1 的 http 通信地址 -->
 <property>
        <name>dfs.namenode.http-address.mycluster.nn1</name>
        <value>hadoop110:50070</value>
</property>
<!-- nn2 的 http 通信地址 -->
 <property>
        <name>dfs.namenode.http-address.mycluster.nn2</name>
        <value>hadoop111:50070</value>
</property>
 <!-- 指定 NameNode 元数据在 JournalNode 上的存放位置要把所有机器加进去 -->
 <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://hadoop110:8485;hadoop111:8485;hadoop112: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/install/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命令全部发送到其他机器上

1.2 启动 HDFS-HA 集群

  • 1.在各个 JournalNode 节点上,输入以下命令启动 journalnode 服务: hadoop-daemon.sh start journalnode
  • 2.在[nn1]上,对其进行格式化,并启动,格式化只在第一次启动时需要以后不需要: hdfs namenode -format , hadoop-daemon.sh start namenode
  • 3.在[nn2]上,同步 nn1 的元数据信息,只在第一次启动时需要,以后不需要: hdfs namenode -bootstrapStandby
  • 4.启动[nn2]: hadoop-daemon.sh start namenode
  • 5.查看 web 页面显示,如下:
    在这里插入图片描述
    在这里插入图片描述
  • 6.在[nn1]上,启动所有 datanode : hadoop-daemons.sh start datanode
  • 7.将[nn1]切换为 Active : hdfs haadmin -transitionToActive nn1
  • 8.查看是否 Active :hdfs haadmin -getServiceState nn1,效果如下:
    在这里插入图片描述
  • 9.刷新hadoop110网页,效果如下:
    在这里插入图片描述

1.3 配置 HDFS-HA 自动故障转移

  • 1.在 hdfs-site.xml 中增加
<property>  
	<name>dfs.ha.automatic-failover.enabled</name>  
	<value>true</value> 
</property> 
  • 2.在 core-site.xml 文件中增加
<property>  
	<name>ha.zookeeper.quorum</name>  
	<value>hadoop110:2181,hadoop111:2181,hadoop112:2181</value> 
</property> 
  • 3.启动

  • 1)关闭所有 HDFS 服务: stop-dfs.sh

  • 2)启动 Zookeeper 集群,即在所有机器输入如下命令: zkServer.sh start

  • 3)初始化 HA 在 Zookeeper 中状态: hdfs zkfc -formatZK

  • 4)启动 HDFS 服务: start-dfs.sh

  • 5)在各个 NameNode 节点上启动 DFSZK Failover Controller,先在哪台机器启动,哪个机器的NameNode就是Active NameNode :
    hadoop-daemon.sh start zkfc,启动后如下:
    在这里插入图片描述
    在这里插入图片描述

  • 4.验证

  • 1)将 Active NameNode 进程 kill: kill -9 namenode 的进程 id

  • 2)将 Active NameNode 机器断开网络: service network stop

二、YARN-HA 配置

2.1 配置 YARN-HA 集群

  • 1.规划集群
hadoop110hadoop111
ResourceManagerResourceManager
  • 2.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命令将文件发送到其他机器

  • 3.启动 yarn
  • 1)在 hadoop110 中执行:start-yarn.sh
  • 2)在 hadoop111 中执行:yarn-daemon.sh start resourcemanager
  • 3)查看服务状态: yarn rmadmin -getServiceState rm1,如下:
    在这里插入图片描述

注:需要下载psmisc依赖包,否则无法完成自动切换节点

yum install -y psmisc

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐