一、准备工作
1、集群规划
49.235.8.131 master | NameNode、DataNode、NodeManager、QuorumPeerMain、ResourceManager、DFSZKFailoverController、JournalNode |
180.76.149.30 slave1 | NameNode、DataNode、NodeManager、QuorumPeerMain、ResourceManager、DFSZKFailoverController、JournalNode |
183.76.179.221 slave2 | DataNode、NodeManager、JournalNode、QuorumPeerMain |
2、三台机器安装JDK
3、配置SSH免密登录
4、搭建zookeeper集群
二、Hadoop集群安装
1、上传Hadoop安装包hadoop-2.7.7.tar.gz,并将其解压到hadoop(新建)目录下。
#上传安装包
[root@master hadoop]# rz -y
#解压到指定目录
[root@master software]# tar -xzvf hadoop-2.7.7.tar.gz -C /home/hadoop/
2、在hadoop目录下新建hdfs目录,hdfs目录下新建data、name、tmp目录。
[root@master hdfs]# mkdir -p /home/hadoop/hdfs
[root@master hdfs]# mkdir -p /home/hadoop/hdfs/data
[root@master hdfs]# mkdir -p /home/hadoop/hdfs/name
[root@master hdfs]# mkdir -p /home/hadoop/hdfs/tmp
3、修改hadoop-env.sh文件,配置HAVA_HOME如下
[root@master hdfs]# vim /home/hadoop/hadoop-2.7.7/etc/hadoop/hadoop-env.sh
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/java/jdk1.8.0_161
4、修改core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hdfs/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>master:2181,slave1:2181,slave2:2181</value>
</property>
</configuration>
5、修改hdfs-site.xml
<configuration>
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<!-- nn1,nn2的rpc远程过程调用地址和端口-->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>master:9000</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>slave1:9000</value>
</property>
<!-- 两个名称节点nn1,nn2的webserver地址-->
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>master:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>slave1:50070</value>
</property>
<!-- 指定NameNode的edits元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://master:8485;slave1:8485;slave2:8485/mycluster</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/journal/data/</value>
</property>
<!-- 开启NameNode失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 指定该集群出故障时,哪个实现类负责执行故障切换 -->
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--容灾发生时,用于杀死原先active node,确保只有一个active态node-->
<!-- shell(/bin/true)确保防护方法最后返回成功 -->
<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>
<!-- 配置sshfence隔离机制超时时间 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>
6、修改mapred-site.xml
<configuration>
<!-- 指定mr框架为yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
7、修改yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<!-- 开启RM高可用 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 指定RM的cluster id -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property>
<!-- 指定RM的名字 -->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- 分别指定RM的地址 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>master</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>slave1</value>
</property>
<!-- 指定zk集群地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>master:2181,slave1:2181,slave2:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
8、修改slaves
master
slave1
slave2
三、Hadoop集群启动
1、启动zookeeper集群(master、slave1、slave2)
[root@master hadoop]# /home/zookeeper/zookeeper-3.4.14/bin/zkServer.sh start
[root@slave1 hadoop]# /home/zookeeper/zookeeper-3.4.14/bin/zkServer.sh start
[root@slave2 hadoop]# /home/zookeeper/zookeeper-3.4.14/bin/zkServer.sh start
#查看状态:一个leader,两个follower
[root@master hadoop]# /home/zookeeper/zookeeper-3.4.14/bin/zkServer.sh status
[root@slave1 hadoop]# /home/zookeeper/zookeeper-3.4.14/bin/zkServer.sh status
[root@slave2 hadoop]# /home/zookeeper/zookeeper-3.4.14/bin/zkServer.sh status
2、手动启动journalnode(分别在master、slave1、slave2上执行)
[root@master hadoop]# hadoop-daemon.sh start journalnode
[root@slave1 hadoop]# hadoop-daemon.sh start journalnode
[root@slave2 hadoop]# hadoop-daemon.sh start journalnode
#运行jps命令检验,master、slave1、slvae2上多了JournalNode进程
3、格式化namenode
#格式化后会在根据core-site.xml中的hadoop.tmp.dir配置的目录下生成个hdfs初始化文件
[root@master hadoop]# hdfs namenode -format
4、把hadoop.tmp.dir配置的目录下所有文件拷贝到另一台namenode节点所在的机器上。
[root@master hadoop]# scp -r /home/hadoop/hdfs/ root@slave1:/home/hadoop/
5、格式化ZKFC(在active上执行即可)
[root@master hadoop]# hdfs zkfc -formatZK
6、启动HDFS
[root@master hadoop]# start-dfs.sh
7、启动YARN
[root@master hadoop]# start-yarn.sh
8、还需要手动在standby上手动启动备份的 resourcemanager
[root@slave1 hdfs]# yarn-daemon.sh start resourcemanager
9、JPS 查看启动进程
#master机器上
[root@master hadoop]# jps
28625 Jps
16258 DataNode
16472 JournalNode
5385 QuorumPeerMain
16793 ResourceManager
16906 NodeManager
16666 DFSZKFailoverController
17565 NameNode
#slave1 机器上jps
[root@slave1 hdfs]# jps
11328 NodeManager
11011 DataNode
10358 ResourceManager
11240 DFSZKFailoverController
7784 QuorumPeerMain
11113 JournalNode
11933 Jps
#slave2 机器上jps
[root@slave1 hdfs]# jps
11328 NodeManager
11011 DataNode
10358 ResourceManager
11240 DFSZKFailoverController
7784 QuorumPeerMain
11113 JournalNode
11933 Jps
四、验证集群可用性
http://49.235.8.131:50070/dfshealth.html#tab-overview
master:9000(active)
http://180.76.149.30:50070/dfshealth.html#tab-overview
slave1:9000' (standby)
测试集群工作状态的一些指令 :
# 查看hdfs的各节点状态信息
[root@master hadoop]# hdfs dfsadmin -report