=HADOOP HA高可用环境配置==================================
集群规划:
按照高可用的设计目标:需要保证至少有两个 NameNode (一主一备) 和 两个 ResourceManager (一主一备) ,同时为满足“过半写入则成功”的原则,需要至少要有 3 个 JournalNode 节点。这里使用三台主机进行搭建。
前置条件:
所有服务器都安装有 JDK
搭建好 ZooKeeper 集群
所有服务器之间都配置好 SSH 免密登录
=============================================================================================
1.配置文件
(1).修改 core-site.xml--------------------------------------------
fs.defaultFS
hdfs://master:8020
hadoop.tmp.dir
/opt/hadoop2.6/tmp
ha.zookeeper.quorum
master:2181,hadoop002:2181,hadoop003:2181
ha.zookeeper.session-timeout.ms
10000
(2).修改hdfs-site.xml-----------------------------------------------------
<configuration>
dfs.replication 2 dfs.name.dir /opt/hadoop2.6/hdfs/name dfs.data.dir /opt/hadoop2.6/hdfs/data dfs.hosts.exclude /opt/hadoop2.6/etc/hadoop/excludes
dfs.nameservices mycluster
dfs.ha.namenodes.mycluster nn1,nn2
dfs.namenode.rpc-address.mycluster.nn1 master:8020
dfs.namenode.rpc-address.mycluster.nn2 hadoop002:8020
dfs.namenode.http-address.mycluster.nn1 master:50070
dfs.namenode.http-address.mycluster.nn2 hadoop002:50070
dfs.namenode.shared.edits.dir qjournal://master:8485;hadoop002:8485;hadoop003:8485/mycluster
dfs.journalnode.edits.dir /opt/hadoop2.6/journalnode/data
dfs.ha.fencing.methods sshfence
dfs.ha.fencing.ssh.private-key-files /root/.ssh/id_rsa
dfs.ha.fencing.ssh.connect-timeout 30000
dfs.client.failover.proxy.provider.mycluster org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
dfs.ha.automatic-failover.enabled true
(3).修改yarn-site.xml-----------------------------------------------------------------------------
<configuration>
yarn.resourcemanager.hostname master 指定resourcemanager所在的hostname yarn.nodemanager.aux-services mapreduce_shuffle NodeManager上运行的附属服务。配置成mapreduce_shuffle,才可运行MapReduce程序
yarn.log-aggregation-enable true
yarn.log-aggregation.retain-seconds 86400
yarn.resourcemanager.ha.enabled true
yarn.resourcemanager.cluster-id my-yarn-cluster
yarn.resourcemanager.ha.rm-ids rm1,rm2
yarn.resourcemanager.hostname.rm1 hadoop002
yarn.resourcemanager.hostname.rm2 hadoop003
yarn.resourcemanager.webapp.address.rm1 hadoop002:8088
yarn.resourcemanager.webapp.address.rm2 hadoop003:8088
yarn.resourcemanager.zk-address master:2181,hadoop002:2181,hadoop003:2181
yarn.resourcemanager.recovery.enabled true
yarn.resourcemanager.store.class org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore
2.将配置文件进行分发:hadoop002 hadoop003
rsync -av /opt/hadoop2.6/etc/hadoop/core-site.xml hadoop002:/opt/hadoop2.6/etc/hadoop
rsync -av /opt/hadoop2.6/etc/hadoop/hdfs-site.xml hadoop002:/opt/hadoop2.6/etc/hadoop
rsync -av /opt/hadoop2.6/etc/hadoop/yarn-site.xml hadoop002:/opt/hadoop2.6/etc/hadoop
rsync -av /opt/hadoop2.6/etc/hadoop/core-site.xml hadoop003:/opt/hadoop2.6/etc/hadoop
rsync -av /opt/hadoop2.6/etc/hadoop/hdfs-site.xml hadoop003:/opt/hadoop2.6/etc/hadoop
rsync -av /opt/hadoop2.6/etc/hadoop/yarn-site.xml hadoop003:/opt/hadoop2.6/etc/hadoop
3.启动zookeeper
分别到三台服务器上启动 ZooKeeper 服务:
zkServer.sh start
检查zookeeper集群是否正常:
zkServer.sh status
4.启动Journalnode
分别到三台服务器的的 ${HADOOP_HOME}/sbin 目录下,启动 journalnode 进程
hadoop-daemon.sh start journalnode
使用jps命令确认这3个节点上的JournalNode进程都启动
5.初始化NameNode
在 hadop001 上执行 NameNode 初始化命令:
hdfs namenode -format
查看你配置的hadoop.tmp.dir这个配置信息,得到hadoop工作的目录,我的是/opt/hadoop2.6/hdfs/name,把master上的hadoopdata目录发送给hadoop002的相同路径下,这一步是为了同步两个namenode的元数据
scp -r /opt/hadoop2.6/hdfs/name hadoop002:/opt/hadoop2.6/hdfs/
6.初始化HA状态
在任意一台 NameNode 上使用以下命令来初始化 ZooKeeper 中的 HA 状态:
hdfs zkfc -formatZK
7.启动HDFS
进入到 hadoop001 的 ${HADOOP_HOME}/sbin 目录下,启动 HDFS。此时 hadoop001 和 hadoop002 上的 NameNode 服务,和三台服务器上的 DataNode 服务都会被启动:
start-dfs.sh
8.启动YARN
进入到 hadoop002 的 ${HADOOP_HOME}/sbin 目录下,启动 YARN。此时 hadoop002 上的 ResourceManager 服务,和三台服务器上的 NodeManager 服务都会被启动:
start-yarn.sh
需要注意的是,这个时候 hadoop003 上的 ResourceManager 服务通常是没有启动的,需要手动启动:
yarn-daemon.sh start resourcemanager
9.验证集群是否搭建成功 --------------------------------------------------------------------------
(1).查看进程jps
[root@hadoopmaster sbin]# jps
4512 DFSZKFailoverController
3714 JournalNode
4114 NameNode
3668 QuorumPeerMain
5012 DataNode
4639 NodeManager
[root@hadoop002 sbin]# jps
4499 ResourceManager
4595 NodeManager
3465 QuorumPeerMain
3705 NameNode
3915 DFSZKFailoverController
5211 DataNode
3533 JournalNode
[root@hadoop003 sbin]# jps
3491 JournalNode
3942 NodeManager
4102 ResourceManager
4201 DataNode
3435 QuorumPeerMain
(2).查看Web UI
HDFS 和 YARN 的端口号分别为 50070 和 8080
此时 hadoop001 上的 NameNode 处于可用状态:
active
而 hadoop002 上的 `NameNode` 则处于备用状态:
standby
hadoop002 上的 ResourceManager 处于可用状态:
ResourceManager state:STARTED
active
CONNECTED
hadoop003 上的 ResourceManager 则处于备用状态:
ResourceManager state:STARTED
standby
CONNECTED
同时界面上也有 Journal Manager 的相关信息:
可以查看共享的网站进行检验是否成功
https://www.jianshu.com/p/d79107d41e7c
https://github.com/heibaiying/BigData-Notes/blob/master/notes/installation/%E5%9F%BA%E4%BA%8EZookeeper%E6%90%AD%E5%BB%BAHadoop%E9%AB%98%E5%8F%AF%E7%94%A8%E9%9B%86%E7%BE%A4.md
集群的二次启动
上面的集群初次启动涉及到一些必要初始化操作,所以过程略显繁琐。但是集群一旦搭建好后,想要再次启用它是比较方便的,步骤如下(首选需要确保 ZooKeeper 集群已经启动):
在 master 启动 HDFS,此时会启动所有与 HDFS 高可用相关的服务,包括 NameNode,DataNode 和 JournalNode:
start-dfs.sh
在 hadoop002 启动 YARN:
start-yarn.sh
这个时候 hadoop003 上的 ResourceManager 服务通常还是没有启动的,需要手动启动:
yarn-daemon.sh start resourcemanager
Hadoop HA集群的重装-----------------------------------------------------
删除所有节点中hadoop的工作目录(core-site.xml中配置的hadoop.tmp.dir那个目录)
如果你在core-site.xml中还配置了dfs.datanode.data.dir和dfs.datanode.name.dir这两个配置,那么把这两个配置对应的目录也删除
删除所有节点中hadoop的log日志文件,默认在HADOOP_HOME/logs目录下
删除zookeeper集群中所关于hadoop的znode节点
详细看https://www.jianshu.com/p/d79107d41e7c如何删