hadoop高可用架构搭建

hadoop高可用架构搭建

准备环境

准备三台虚拟机,安装jdk、hadoop、zookeeper。并配置免密访问,保证 Hadoop 完全分布式和 ZooKeeper 完全分布式环境已经安装完成。

HDFS-HA 集群配置

可以先配置一台虚拟机,然后把文件传给其他虚拟机,也可以用工具,同时修改三个虚拟机,以下配置文件的内容均为新增内容,不影响之前hadoop 完全分布式和 ZooKeeper 完全分布式的配置

配置 core-site.xml 文件

hadoop.tmp.dir 的value填写实际对应的hadoop文件的安装路径

<configuration>
<!-- 把两个 NameNode)的地址组装成一个集群 mycluster -->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoopHA</value>
</property>
<!-- 指定 hadoop 运行时产生文件的存储目录 -->
<property>
    <name>hadoop.tmp.dir</name>
    <value>/root/software/hadoop/data/tmp</value>   
</property>
</configuration>

配置 hdfs-site.xml

<configuration>
<!-- 完全分布式集群名称 -->
<property>
    <name>dfs.nameservices</name>
    <value>hadoopHA</value>
</property>
<!-- 集群中 NameNode 节点都有哪些,这里是 nn1 和 nn2 -->
<property>
    <name>dfs.ha.namenodes.hadoopHA</name>
    <value>nn1,nn2</value>
</property>
<!-- nn1 的 RPC 通信地址 -->
<property>
    <name>dfs.namenode.rpc-address.hadoopHA.nn1</name>
    <value>hadoop100:9000</value>
</property>
<!-- nn2 的 RPC 通信地址 -->
<property>
    <name>dfs.namenode.rpc-address.hadoopHA.nn2</name>
    <value>hadoop102:9000</value>
</property>
<!-- nn1 的 http 通信地址 -->
<property>
    <name>dfs.namenode.http-address.hadoopHA.nn1</name>
    <value>hadoop100:50070</value>
</property>
<!-- nn2 的 http 通信地址 -->
<property>
    <name>dfs.namenode.http-address.hadoopHA.nn2</name>
    <value>hadoop102:50070</value>
</property>
<!-- 指定 NameNode 元数据在 JournalNode 上的存放位置 -->
<property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://hadoop100:8485;hadoop101:8485;hadoop102:8485/hadoopHA</value>
</property>
<!-- 配置隔离机制,即同一时刻只能有一台服务器对外响应 -->
<property>
    <name>dfs.ha.fencing.methods</name>
    <value>
    sshfence
    shell(/bin/true)
    </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>/root/software/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.hadoopHA</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
</configuration>

配置 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>
</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>hadoop100</value>
</property>
<property>
    <name>yarn.resourcemanager.hostname.rm2</name>
    <value>hadoop102</value>
</property>
<!--指定 zookeeper 集群的地址-->
<property>
    <name>yarn.resourcemanager.zk-address</name>
    <value>hadoop100:2181,hadoop101:2181,hadoop102: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>
</configuration>

启动 HDFS-HA 集群

1、启动zookeeper集群

三台虚拟机全部需要启动

zkServer.sh start

2、启动journalnode

三台虚拟机需要全部启动

注: journalnode为qjournal分布式应用(可用来管理)的管理edit.log文件,依赖于zk管理,所以将三个node节点放到zk上启动。hadoop2.x使用qjournal管理edit.log文件。

hadoop-daemon.sh start journalnode

3、格式化HDFS(仅第一次启动执行)

hadoop100主节点上运行

注:如果之前运行过hdfs,需要把hadoophadoop.tmp.dir对应的目录删除,格式化完成后,需要将新的tmp文件夹分发给另外两台虚拟机

hdfs namenode -format

4、格式化ZKFC(仅第一次启动执行)

注:zkfc是用来管理两台namenode切换状态的进程。同样是依赖zk实现。当active namenode状态不正常了,该namenode上的zkfc会制一个状态发动到 zk上,standby namenode上的zkfc会查看到该不正常状态,并向active namenode通过ssh发送一条指令,kill -9 进程号,杀死该进程,并将自己重置成active,放置active假死发生脑裂事件,万一ssh发送失败,也可以启动自定义的.sh脚本文件,强制杀死active namenode进程。

在hadoop100 主节点上运行下面命令

hdfs zkfc -formatZK

5、启动HDFS

在hadoop100 主节点上运行下面命令

start-dfs.sh

6、测试HDFS

在系统里面通过jps命令查看各个虚拟机的服务情况:
在这里插入图片描述

也可以在网页查看各个服务运行状态 :
HDFS : http://hadoop100:50070 主节点
http://hadoop102:50070 分节点
在这里插入图片描述
在这里插入图片描述
手动kill hadoop100 上面的namenode节点之后:
在这里插入图片描述
在这里插入图片描述
当主节点发生异常后,可以自动切换到分节点,配置完成!

7、启动YARN

在hadoop100 主节点上运行下面命令

start-yarn.sh

在hadoop102 分节点上执行

yarn-daemon.sh start resourcemanager

8、测试yarn-HA

在浏览器上输入备机hadoop102:8088会自动跳转到主节点hadoop100:8088上,证明yarn-HA启用了,实际测试中发现无法跳转,怀疑是本地电脑上面的域名无法识别导致,在本地电脑的C盘中
在这里插入图片描述
注意有可能会有多个hosts文件,查找是注意区分路径。
打开后在里面添加对应的IP地址以及主机名之后,就可以正常跳转页面了。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

高可用的配置就到这里结束,谢谢!

猜你喜欢

转载自blog.csdn.net/giantleech/article/details/115086245