今天下午刚刚搭建了一个高可用hadoop集群,整理如下,希望大家能够喜欢。
namenode HA:得有两个节点,构成一个namenode HA集群
namenode Federation:可以有多个HA集群,分管不同的数据
至少得有4个节点,才能满足要求
节点 | NN | JournalNode | DN | ZK | 归属组 |
Hmaster | Y | Y | cluster1 | ||
Hslave1 | Y | Y | Y | Y | |
Hslave2 | Y | Y | Y | Y | cluster2 |
Hslave3 | Y | Y | Y |
一、配置hosts、ssh免密登录、ZK集群等通用
二、有hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml、slaves 6个文件需要配置
(1)hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_91
(2)core-site.xml
fs.defaultFS | hdfs://cluster1 |
hadoop.tmp.dir | /home/hadoop/hadoop/tmp |
ha.zookeeper.quorum | Hslave1:2181,Hslave2:2181,Hslave3:2181 |
(3)hdfs-site.xml
dfs.nameservices | cluster1,cluster2 | 备注 |
dfs.ha.namenodes.cluster1 | nn1,nn2 | |
dfs.namenode.rpc-address.cluster1.nn1 | Hmaster:9000 | |
dfs.namenode.rpc-address.cluster1.nn2 | Hslave1:9000 | |
dfs.namenode.http-address.cluster1.nn1 | Hmaster:9000 | |
dfs.namenode.http-address.cluster1.nn2 | Hslave1:50070 | |
dfs.client.failover.proxy.provider.cluster1 | org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider | |
dfs.ha.automatic-failover.enabled.cluster1 | true | |
dfs.namenode.shared.edits.dir | qjournal://Hmaster:8485;Hslave1:8485;Hslave2:8485/cluster1 | 只能出现在cluster1节点上 |
dfs.ha.namenodes.cluster2 | nn1,nn2 | |
dfs.namenode.rpc-address.cluster2.nn1 | Hslave2:9000 | |
dfs.namenode.rpc-address.cluster2.nn2 | Hslave3:9000 | |
dfs.namenode.http-address.cluster2.nn1 | Hslave2:9000 | |
dfs.namenode.http-address.cluster2.nn2 | Hslave3:50070 | |
dfs.client.failover.proxy.provider.cluster2 | org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider | |
dfs.ha.automatic-failover.enabled.cluster2 | true | |
dfs.namenode.shared.edits.dir | qjournal://Hmaster:8485;Hslave1:8485;Hslave2:8485/cluster2 | 只能出现在cluster2节点上 |
dfs.journalnode.edits.dir | /home/hadoop/hadoop/tmp/journal | |
dfs.ha.fencing.methods | sshfence | |
dfs.ha.fencing.ssh.private-key-files | /home/hadoop/.ssh/id_rsa | |
dfs.ha.fencing.ssh.connect-timeout | 5000 | |
dfs.datanode.data.dir | file:///home/hadoop/dfs/data | |
dfs.replication | 3 |
(4)mapred-site.xml
mapreduce.framework.name | yarn | true |
(5)yarn-site.xml
yarn.resourcemanager.hostname | Hmaster | RM目前是单节点,存在单点故障,以后配成RM HA |
yarn.nodemanager.aux-services | mapreduce_shuffle |
(6)slaves(DataNode节点)
Hslave1
Hslave2
Hslave3
分发到各节点,只有hdfs-site.xml中标红字段,根据cluster情况注释掉不必要的
三、启动集群
(1)启动、格式化ZK集群。
在每个ZK上执行:启动 zkServer.sh start
在每个cluster的其中一个节点执行: 建立HA节点:hdfs zkfc –formatZK
(2)启动JournalNode集群
每个节点上执行:hadoop-daemon.sh start journalnode
(3)格式化、启动NameNode集群
格式化并启动集群cluster1的namenode:
先在集群中的一个节点执行:hdfs namenode -format -clusterId c1 hadoop-daemon.sh start namenode
再在另一个节点执行(数据同步):hdfs namenode -bootstrapStandby hadoop-daemon.sh start namenode
cluster2集群类似
(4)启动DataNode
hadoop-daemons.sh start datanode
(5)启动YARN
start-yarn.sh
(6)启动ZooKeeperFailoverController
在其中一个节点执行:hadoop-daemons.sh start zkfc
四、测试
http://Hmaster:50070 看namenode的情况
http://Hmaster:8080/cluster 看集群的情况
kill其中一个namenode后,发现集群仍可正常使用