环境准备
-
安装配置JDK,参考如下文档:
https://blog.csdn.net/king123456man/article/details/81517171
-
安装配置hadoop
https://blog.csdn.net/king123456man/article/details/81517152
-
高可用集群环境搭建,参考如下文档:
https://blog.csdn.net/king123456man/article/details/81517234
-
ZooKeeper完全分布式集群搭建,参考如下文档:
https://blog.csdn.net/king123456man/article/details/81737991
-
脚本准备:批分发(xcall.sh)和批同步(xsync.sh)
https://blog.csdn.net/king123456man/article/details/81738122
-
停掉所有的hadoop进程(保证没有任何进程在运行)
$> stop-all.sh
- 删除所有节点的日志和本地数据
//删除所有日志
$> xcall.sh "rm -rf /soft/hadoop/logs/*"
//删除所有本地文件
$> xcall.sh "rm -rf /home/centosmin0/hadoop/*"
- 登录每台JN节点主机,启动JN进程(s202, s203, s204)
$> hadoop-daemon.sh start journalnode
- 登录其中一个名称节点(NN),格式化文件系统
$> hadoop namenode -format
- 复制s201主机 /home/centosmin0/hadoop/* 的元数据到s205主机
$> scp -r ~/hadoop/* centosmin0@s205:/home/centosmin0/hadoop
-
在未格式化的NN(s205)节点上做standby引导
- 启动s201主机的名称节点
$> hadoop-daemon.sh start namenode
- 登录到s205节点,做standby引导(N)
$> hdfs namenode -bootstrapStandby
- 登录s201,将s201的edit日志初始化到JN节点
$> hdfs namenode -initializeSharedEdits
假如出现被锁住无法引导的情况,需要删除 /home/centosmin0/hadoop/dfs/name 下的 in_use.lock 文件:
-
启动所有数据节点
$> hadoop-daemons.sh start datanode
- 登录到s206主机,启动名称节点(NN)
$> hadoop-daemon.sh start namenode
- 在web上查看启动情况
名称节点的自动容灾(HA)
- 停止所有进程
$> stop-all.sh
- 配置hdfs-site.xml和core-site.xml,分发两个文件给所有主机
//配置hdfs-site.xml,启用自动容灾
[hdfs-site.xml]
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
//配置core-site.xml,指定zk的连接地址
[core-site.xml]
<property>
<name>ha.zookeeper.quorum</name>
<value>s201:2181,s202:2181,s203:2181</value>
</property>
//分发文件到其他主机
$> xsync.sh hdfs-site.xml
$> xsync.sh core-site.xml
- 开启ZooKeeper集群(s201, s202, s203)
$> zkServer.sh start
- 登录其中的一台NN(s201),在ZK中初始化HA状态,进入zk客户端查看
$> hdfs zkfc -formatZK
//进入zk客户端
$> zkCli.sh
- 启动hdfs进程
$> start-dfs.sh
s201和s205开启了容灾处理器进程:DFSZKFailoverController
查看web,s205主机变为了激活状态
- 测试自动容灾,杀死s205的NN进程
自动切换为s201:
配置资源管理器(RM)的自动容灾(HA)
- 配置 yarn-site.xml,分发给其他主机节点
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>cluster1</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>s201</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>s205</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>s201:8088</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>s205:8088</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>s201:2181,s202:2181,s203:2181</value>
</property>
- 启动yarn进程(s201主机)。hadoop没有启动两个resourcemanager,需要手动启动另外一个。
[s201]
$> start-yarn.sh
[s205]
$>yarn-daemon.sh start resourcemanager
- 查看 s201 和 s205 的资源管理器
s201的资源管理器:192.168.32.201:8088
s205的资源管理器:192.168.32.205:8088
- 容灾演示:杀死s201的资源管理器进程,自动切换为s205