1.此教程默认已经搭建好完全分布式
2. Zookeeper 集群搭建
1 | 配置完全分布式zk集群 |
3.HA 集群搭建
首先声明
笔者用的6台主机, 主机名 cs1-cs6
, 用户名为ap
, 可以对照改为自己的主机名&用户名
另外, 搭建 HA 不会影响原来的完全分布式, 具体操作会在下面告知.
hadoop 安装目录层级结构:
/home/ap/apps/hadoop/etc/hadoop/hdfs-site.xml
data 目录层级结构:
cs1
:/home/ap/hadoopdata/namenode/current/edits_00....
cs2
:/home/ap/hadoopdata/datanode/current/BP-15...
可以对照参考
集群结构如下
开始搭建
首先保证 各节点直接的 ssh 免密登录没问题
- 如果非生产环境, 可以同时把
.ssh
删掉后, 全部重新生成ssh-keygen
, 同时相互发送, 这样操作最简单, 效率最高.
其次上代码了
- 把原本
/home/ap/apps/hadoop/etc/hadoop
中的hadoop
目录改为full
,意思是完全分布式. cp -r full ha
, 复制一份 full 为 ha, 在这份配置文件中配置 HAln -s /home/ap/apps/hadoop/etc/ha /home/ap/apps/hadoop/etc/hadoop
, 用一个软链接hadoop 指向 ha- 配置
/home/ap/apps/hadoop/etc/ha/hdfs-site.xml
1 | [hdfs-site.xml] |
- 配置
core-site.xml
, 这里给出完整配置 (目前不包括 Hive 配置)
1 | [core-site.xml] |
- 配置
mapred-site.xml
1 | [mapred-site.xml] |
- 把
/home/ap/apps/hadoop/etc/*
发给其他所有节点 2-6- 注意: 软链接scp 的时候会有问题, 最终保证每个节点跟 cs1一样就可以了,可以每个节点单独修改, 也可以写脚本一起修改
ln -sfT /home/ap/apps/hadoop/etc/ha /home/ap/apps/hadoop/etc/hadoop
- 部署细节
1 | 0.在 zk 节点启动 zkServer |
- HA 管理
1 | # 查看web 界面, 是否是2个 standby 状态 |
- 加入 Zookeeper 容灾服务 zkfc
1 | <!-- 1.部署容灾 --> |
- 配置RM的HA自动容灾
1 | 1.配置yarn-site.xml |
至此, 大功告成
4.HA 集群的启动/关闭
4.1 HA 的启动
一:单点启动
启动 zk 服务 QuorumPeerMain, 否则后面 RM 会起不来,连不上 ZK 服务
cs1-cs3: $>zkServer.sh start
启动 namenode/datanode
cs1,cs6: $>hadoop-daemon.sh start namenode
cs1/cs6: $>hadoop-daemons.sh start datanode
cs6: $>hadoop-daemon.sh start namenode
- 启动 journalnode
cs2-cs4: $>hadoop-daemon.sh start journalnode
- 启动RM (RM 会自动选出一个 active)
cs1,cs6: $>yarn-daemon.sh start resourcemanager
cs1/cs6: $>yarn-daemons.sh start nodemanager
启动 zk 的 DFSZKFailoverController
cs1,cs6: $>hadoop-daemon.sh start zkfc
此外可以启动MapReduce 的历史任务服务器
[ap@cs1]$>
mr-jobhistory-daemon.sh start historyserver
然后访问配置的
http://cs1:19888/jobhistory
二:懒汉启动
启动 zk 服务 QuorumPeerMain, 否则后面 RM 会起不来,连不上 ZK 服务
cs1-cs3: $>zkServer.sh start
执行启动全部
cs1: $>
start-all.sh
(RM 节点)或者, 使用新的启动方式
cs1: $>
start-dfs.sh
(任意节点)cs1: $>
start-yarn.sh
(在 RM 节点)另一个 RM 节点不会自己启动,要手动启动
cs6: $>
yarn-daemon.sh start resourcemanager
三: 启动完成后
1 | ============= cs1 jps ============= |
4.2 HA 的关闭
在 一台NN 上stop-all.sh
, 注意 zk 的 server- QuorumPeerMain
不会停掉
5. 在集群实现时间同步(root 用户操作)
思路:
时间同步的方式:找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,比如,每隔十分钟,同步一次时间。
5.1 在cs1
上修改ntp
服务
1 | 1) 检查 ntp 是否安装 |
5.2 其它机器上
1 | 1)在其他所有机器配置10分钟与时间服务器同步一次 |