2021-04-21

HA自动故障转移
主要是学习ha之前,肯定学过普通的hadoop,所以配置可以先在hadoop上复制一份
准备三台机器,hadoop102,hadoop103,hadoop104,首先先配好hadoop102上面的配置
再然后将环境变量中的HADOOP_HOME改成当前的的ha的路径,要不然就一直初始化的是之前的Hadoop 如:
在这里插入图片描述
改完之后,要source 一下环境变量的路径,也可以重启一下虚拟机,两者都可以

主要配hdfs-site.xml和core-site.xml,最后所有的配好之后,再配resourcemanager的高可用
首先配hdfs-site.xml,配置如下


<configuration>
<property>
	  <name>dfs.replication</name>
	    <value>1</value>
    </property>
<property>
	<name>dfs.nameservices</name>
	<value>mycluster</value>
</property>
<property>
	<name>dfs.ha.namenodes.mycluster</name>
	<value>nn1,nn2</value>
</property>
<property>
	<name>dfs.namenode.rpc-address.mycluster.nn1</name>
	<value>hadoop102:9000</value>
</property>
<property>
	<name>dfs.namenode.rpc-address.mycluster.nn2</name>
	<value>hadoop103:9000</value>
</property>
<property>
	<name>dfs.namenode.http-address.mycluster.nn1</name>
	<value>hadoop102:9870</value>
</property>
<property>
	<name>dfs.namenode.http-address.mycluster.nn2</name>
	<value>hadoop103:9870</value>
</property>
<property>
	<name>dfs.namenode.shared.edits.dir</name>
	<value>qjournal://hadoop102:8485;hadoop103:8485;hadoop104:8485/mycluster</value>
</property>
<property>
	<name>dfs.client.failover.proxy.provider.mycluster</name>
	<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 如果使用sshfence,需要确保安装了psmisc -->
<!-- 这里配置了两个隔离方法,最后一个是确保隔离成功的临时写法 -->
<!-- 如果只写了sshfence,那么如果active的服务器挂掉之后,是没办法故障转移的,因为sshfence连不上active的服务器,隔离方法通不过,故障转移就执行不了 -->
<property>
	<name>dfs.ha.fencing.methods</name>
	<value>sshfence</value>
</property>

<property>
	<name>dfs.ha.fencing.ssh.private-key-files</name>
	<value>/home/tg/.ssh/id_rsa</value>
</property>

<!--改成false就是可以手动配置ha,默认是false-->

<property>
	<name>dfs.ha.automatic-failover.enabled</name>
	<value>true</value>

</property>

<property>
	<name>dfs.ha.fencing.ssh.connect-timeout</name>
	<value>30000</value>
</property>
然后配置core-site.xml

<configuration>
<!-- 指定 NameNode 的地址 -->
<property>
        <name>fs.defaultFS</name>
        <value>hdfs://mycluster</value>
</property>
<!-- 指定 hadoop 数据的存储目录 -->
<property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/ha/hadoop-3.1.3/data</value>
</property>
<!-- 配置 HDFS 网页登录使用的静态用户为 "自定义的姓名"-->
<property>
        <name>hadoop.http.staticuser.user</name>
        <value>hadoop</value>
</property>
<property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/opt/module/ha/hadoop-3.1.3/data/journalnode</value>
</property>
<property>
	<name>ha.zookeeper.quorum</name>
	<value>hadoop102:2181,hadoop103:2181,hadoop104:2181</value>
	<description>指定zookeeper地址</description>
</property>
            
</configuration>

配置完之后就可以将ha中的配置同步到另外的两台机器上,然后就可以对集群进行操作
1.hdfs --daemon start journalnode 在每台机器上启动journalnode
2.hdfs zkfc -formatZK 使用该命令前,需要在core-site.xml配置zookeeper集群,初始化zookeeper集群
3.hdfs namenode -format 进行集群的格式化,第一次执行这句命令应该不会报错,第二次执行该命令需要将每台机器上的 /tmp/hadoop/dfs/清空
成功初始化
成功初始化
执行该命令第二次会报的错
执行第二次的错误

4.启动hadoop102上面的namenode hdfs --daemon start namenode
5.在hadoop103配置第二个namenode hdfs namenode -bootstrapStandby 同步nn1上面的数据
6.先关闭所有hadoop和zookeeper的进程
7.开启zookeeper进程
8.hdfs --daemon start zkfc 分别在两台机器上执行该命令启动nn1和nn2上面的zkfc
9.然后就可以使用hadoop102上的sbin/start-all.sh,就可以启动集群了
整个集群启动完以后,大致就是这样的进程
这是启动完集群后的所有进程,如果没有配置resourcemanager的高可用hadoop103就会少一个resourcemanager的进程

最后一步就是配置resourcemanager,只要改yarn-site.xml就可以了 配置如下:

<configuration>  
   <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>   
   <!--声明HA resourcemanager的地址-->
   <property>
       <name>yarn.resourcemanager.cluster-id</name>
       <value>cluster-yarn1</value>
   </property>
   <!-- 指定RM的逻辑列表  -->
   <property>
       <name>yarn.resourcemanager.ha.rm-ids</name>
       <value>rm1,rm2</value>
   </property>
 <!-- 指定rm1 的主机名  -->
  <property>
       <name>yarn.resourcemanager.hostname.rm1</name>
      <value>hadoop102</value>
  </property>
  <!-- 指定rm1的web端地址  -->
  <property>
       <name>yarn.resourcemanager.webapp.address.rm1</name>
      <value>hadoop102:8088</value>
  </property>
  <!--  =========== rm1 配置============  --> 
  <!-- 指定rm1的内部通信地址  -->
  <property>
       <name>yarn.resourcemanager.address.rm1</name>
      <value>hadoop102:8032</value>
  </property>
<!-- 指定AM向rm1申请资源的地址  -->
  <property>
       <name>yarn.resourcemanager.scheduler.address.rm1</name>  
      <value>hadoop102:8030</value>
  </property>
<!-- 指定供NM连接的地址  -->  
  <property>
       <name>yarn.resourcemanager.resource-tracker.address.rm1</name>
       <value>hadoop102:8031</value>
  </property>
 <!--  =========== rm2 配置============  -->   
  <property>
      <name>yarn.resourcemanager.hostname.rm2</name>
      <value>hadoop103</value>
  </property>
  <property>
       <name>yarn.resourcemanager.webapp.address.rm2</name>
       <value>hadoop103:8088</value>
  </property>
  <property>
       <name>yarn.resourcemanager.address.rm2</name>
       <value>hadoop103:8032</value>
  </property>
  <property>
       <name>yarn.resourcemanager.scheduler.address.rm2</name>
       <value>hadoop103:8030</value>
  </property>
  <property>
      <name>yarn.resourcemanager.resource-tracker.address.rm2</name>
      <value>hadoop103:8031</value>  
  </property>
 
  <!--指定zookeeper集群的地址-->  
  <property>
       <name>yarn.resourcemanager.zk-address</name>
       <value>hadoop102:2181,hadoop103:2181,hadoop104: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.nodemanager.env-whitelist</name>     
       <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
   </property>
 </configuration>

最后重启一下ha的集群,就可以看见hadoop102和hadoop103上面分别有一个resourcemanager

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值