Hadoop高可用集群,基于Zookeeper集群详细搭建流程!

上次给大家讲过搭建hadoop高可用集群的具体思路,今天就开始正式根据思路搭建。

搭建前准备
1.官方地址:http://hadoop.apache.org/

2.HDFS 高可用集群规划,请保证 Hadoop 完全分布式和 ZooKeeper 完全分布式环境已经安装完成,以3台机为例,前面已经给大家详细说过搭建流程,可以自己取看下。
Hadoop分布式集群搭建,以及ssh互通免密登录!
详细Zookeeper分布式集群的搭建

3.先在一台机hadoop2上配置文件信息
进入文件夹下的配置文件目录下
cd /opt/soft/hadoop260/etc/hadoop/

3.在 hadoop2 配置 core-site.xml
vi core-site.xml 在configuration添加以下信息


<!-- 指定namenode的集群hdfs协议文件系统的通信地址变为mycluster -->
   <property>
     <name>fs.defaultFS</name>
     <value>hdfs://mycluster</value>
   </property>
<!-- 指定hadoop集群存储临时文件的目录 -->
   <property>
     <name>hadoop.tmp.dir</name>
     <value>/opt/soft/hadoop260/tmp</value>
   </property>
 <!-- ZooKeeper集群的地址 -->
   <property>
     <name>ha.zookeeper.quorum</name>
     <value>hadoop2:2181,hadoop3:2181,hadoop4:2181</value>
   </property>
<!-- 任意地址都可以访问  必须是root用户  -->
   <property>
     <name>hadoop.proxyuser.root.hosts</name>
     <value>*</value>
   </property>
<!-- 任意路径任一组都可以访问 必须是root用户  -->
   <property>
     <name>hadoop.proxyuser.root.groups</name>
     <value>*</value>
   </property>
   <!-- ZKFC连接到ZooKeeper超时时长 -->
   <property>
     <name>ha.zookeeper.session-timeout.ms</name>
     <value>10000</value>
   </property>

4.配置hdfs-site.xml
vi hdfs-site.xml 在configuration添加以下信息

<!-- 集群服务的逻辑名称是mycluster -->
<property>
  <name>dfs.nameservices</name>
  <value>mycluster</value>
</property>

 <!-- NameNode ID列表为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>hadoop2:9000</value>
</property>
 
 <!-- nn2的RPC通信地址 -->
<property>
  <name>dfs.namenode.rpc-address.mycluster.nn2</name>
  <value>hadoop3:9000</value>
</property>

<!-- nn1的http通信地址 -->
<property>
  <name>dfs.namenode.http-address.mycluster.nn1</name>
  <value>hadoop2:50070</value>
</property>

<!-- nn2的http通信地址 -->
<property>
  <name>dfs.namenode.http-address.mycluster.nn2</name>
  <value>hadoop3:50070</value>
</property>

 <!-- NameNode元数据在JournalNode上的共享存储目录 -->
<property>
  <name>dfs.namenode.shared.edits.dir</name>
  <value>qjournal://hadoop2:8485;hadoop3:8485;hadoop4:8485/mycluster</value>
</property>

<!-- 配置隔离机制,确保在任何给定时间只有一个NameNode处于活动状态 -->
<property>
  <name>dfs.ha.fencing.methods</name>
  <value>shell</value>
</property>  

 <!-- 使用sshfence机制时需要ssh免密登录,私钥路径 -->   
<property>
  <name>dfs.ha.fencing.ssh.private-key-files</name>
  <value>/root/.ssh/id_rsa</value>
</property>

 <!-- Journal Edit Files的存储目录 -->
<property>
  <name>dfs.journalnode.edits.dir</name>
  <value>/opt/soft/hadoop260/data/jn</value>
</property>

<!-- 关闭权限检查 -->
<property>
  <name>dfs.permissions.enable</name>
  <value>false</value>
</property>

<!-- 访问代理类,用于确定当前处于Active状态的NameNode -->
<property>
  <name>dfs.client.failover.proxy.provider.mycluster</name>
  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

<!-- 指定HDFS副本的数量 -->
<property>
  <name>dfs.replication</name>
  <value>3</value>
</property>

<!-- 指定secondaryname地址 -->
<property>
  <name>dfs.namenode.secondary.http-address</name>
  <value>hadoop4:50090</value>
</property>

 <!-- 开启故障自动转移 -->
<property>
  <name>dfs.ha.automatic-failover.enabled</name>
  <value>true</value>
</property>

5.配置yarn-site.xml
vi yarn-site.xml 在configuration添加以下信息

<!--配置NodeManager上运行的附属服务。需要配置成mapreduce_shuffle后才可以在Yarn上运行MapReduce程序。-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

<!-- 启用RM HA -->
<property>
 <name>yarn.resourcemanager.ha.enabled</name>
 <value>true</value>
</property>

 <!-- RM集群标识 -->
<property>
 <name>yarn.resourcemanager.cluster-id</name>
 <value>cluster-yarn1</value>
</property>

 <!-- RM的逻辑ID列表rm1,rm2 -->
<property>
 <name>yarn.resourcemanager.ha.rm-ids</name>
 <value>rm1,rm2</value>
</property>

<!-- RM1的服务地址 -->
<property>
 <name>yarn.resourcemanager.hostname.rm1</name>
 <value>hadoop2</value> 
</property>

<!-- RM2的服务地址 -->
<property>
 <name>yarn.resourcemanager.hostname.rm2</name>
 <value>hadoop3</value>
</property>

 <!-- RM1 Web应用程序的地址 -->
 <property>
 <name>yarn.resourcemanager.webapp.address.rm1</name>
 <value>hadoop2:8088</value>
 </property>

<!-- RM2 Web应用程序的地址 -->
 <property>
 <name>yarn.resourcemanager.webapp.address.rm2</name>
 <value>hadoop3:8088</value>
 </property>
 
 <!-- ZooKeeper集群的地址 -->
<property>
 <name>yarn.resourcemanager.zk-address</name>
 <value>hadoop2:2181,hadoop3:2181,hadoop4:2181</value>
</property>

<!-- 启用自动恢复 -->
<property>
 <name>yarn.resourcemanager.recovery.enabled</name>
 <value>true</value>
</property>

<!-- 用于进行持久化存储的类 -->
<property>
 <name>yarn.resourcemanager.store.class</name>
 <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>

6.配置mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
mapred-site.xml 在configuration添加以下信息

<!--指定mapreduce作业运行在yarn上-->
 <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
 </property>

7.把配置好的文件拷贝给另外2台机

scp -r /opt/soft/hadoop260/etc/hadoop/ root@hadoop3:$PWD 
scp -r /opt/soft/hadoop260/etc/hadoop/ root@hadoop4:$PWD 

或者按照上面的配置方法同步配置3台虚拟机,同步的方法我在前面也说过,就不再重复了。

分别启动集群,实现高可用

1.启动HDFS-HA集群

启动JournalNode

1)在3台机的 JournalNode 节点上,分别输入以下命令启动 journalnode 服务:
cd /opt/soft/hadoop260/ 进入启动命令目录

sbin/hadoop-daemon.sh start journalnode

启动namenode

2)在[nn1]上,就是hadoop2,对其进行格式化,并启动namenode
bin/hdfs namenode -format
会出现询问是否要重新格式化存储目录中的文件系统,输入y

3)启动[nn1]namenode
sbin/hadoop-daemon.sh start namenode

4)在[nn2]上,就是hadoop3,同步 nn1 的元数据信息
cd /opt/soft/hadoop260/ 进入启动命令目录
bin/hdfs namenode -bootstrapStandby
也会询问,同样输入y

5)启动[nn2]namenode:
sbin/hadoop-daemon.sh start namenode

6)查看 web 页面显示
hadoop2:50070
hadoop3:50070
因为zookeeper集群没有开启,所以状态都是standby

注意
当用jps去查看进程的时候,发现namenode没有启动成功时,不用着急,有时是很恶心,没关系,把存放journalnode.edits的目录data删掉,重新操作去启动journalnode和namenode,多试几次就好了。

这时新问题又来了,当2台机能正常启动namenode时,去启动datenode发现报错,启动datenode失败了,因为nanenode初始化次数过多导致data的clusterID和name的clusterID不一致,所以要去改成一致,是2台有namenode的虚拟机要改,分别把data的clusterID改成和name的clusterID一致。

改clusterID

分别查看2台机的name里面clusterID
cat /opt/soft/hadoop260/tmp/dfs/name/current/VERSION

复制clusterID到data里面的clusterID
vi /opt/soft/hadoop260/tmp/dfs/data/current/VERSION

启动datanode

6)在[nn1]上,启动3台机所有的 datanode
sbin/hadoop-daemons.sh start datanode

7)将[nn1]切换为 Active
bin/hdfs haadmin -transitionToActive nn1

8)查看[nn1]是否变成 Active
bin/hdfs haadmin -getServiceState nn1

如图所示,显示的是active,说明在hadoop2中namenode是主

2.启动zookeeper集群,并初始化 HA 在 Zookeeper 中状态

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

2)3台机分别启动zookeeper
zkServer.sh start

3)初始化 HA 在 Zookeeper 中状态: 只能在主hadoop2中初始化一次
cd /opt/soft/hadoop260/ 进入启动命令目录

bin/hdfs zkfc -formatZK 选择y

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

hadoop2和hadoop3上的NameNode服务,和三台服务器上的DataNode服务都会被启动

5)在各个 NameNode 节点上启动 DFSZK Failover Controller,
先在哪台机器启动,哪个机器的 NameNode 就是 Active NameNode,由于需要hadoop2的namenode是active,所以先启动hadoop2的DFSZK

先启动hadoop2的DFSZK
sbin/hadoop-daemon.sh start zkfc

再启动hadoop3的DFSZK
sbin/hadoop-daemon.sh start zkfc

这样就主namenode和备namenode就分配好了。

启动yarn集群

1)在 hadoop2 中执行启动命令:
cd /opt/soft/hadoop260/ 进入启动命令目录
sbin/start-yarn.sh
此时hadoop2上的ResourceManager服务,和三台服务器上的NodeManager服务都会被启动

2)在 hadoop3 中执行启动命令:
sbin/yarn-daemon.sh start resourcemanager
hadoop3上的ResourceManager服务通常是没有启动的,手动启动

3)hadoop2 中查看rm1服务状态
bin/yarn rmadmin -getServiceState rm1

如图所示,显示的是active,说明再hadoop2中resourcemanager是主

查看集群启动情况

成功启动后,每台服务器上的进程应该如下:
hadoop2进程如图所示:

hadoop3进程如图所示:

hadoop4进程如图所示:

查看web页面
HDFS和YARN的端口号分别为50070和8088,界面应该如下:
此时hadoop2上的NameNode处于可用状态

而hadoop3上的NameNode处于备用状态

hadoop2上的ResourceManager处于可用状态

而hadoop3上的ResourceManager处于备用状态

集群的二次启动

上面的集群初次启动涉及到一些必要初始化操作,所以很麻烦,会有很多启动失败的问题。
但是集群一旦搭建好后,想要再次启用它是比较方便的,步骤如下(首选需要确保ZooKeeper集群已经启动):

1.在hadoop2启动 HDFS,此时会启动所有与 HDFS 高可用相关的服务,包括 NameNode,DataNode 和 JournalNode:
sbin/start-dfs.sh

2.在hadoop2启动YARN:
sbin/start-yarn.sh

3.在hadoop3上手动启动YARN
sbin/yarn-daemon.sh start resourcemanager

另一种方法:
先在Hadoop2上启动所有HDFS和YARN服务
start-all.sh

然后去hadoop3上去启动所有HDFS和YARN服务
start-all.sh

总结
以上所述是专门给大家介绍的基于 ZooKeeper 搭建 Hadoop 高可用集群 的详细搭建流程,希望对大家有所帮助,如果大家有任何疑问请给我留言,我会及时回复大家的。谢谢大家的支持!

猜你喜欢

转载自blog.csdn.net/zp17834994071/article/details/107189431