HA 即 High Available 高可用。node
# 其做用是为了减小主从结构的单点故障,而设置备用节点,既然学习了Hadoop生态圈,那么HA配置也是必需要掌握的。linux
# 由于生产环境中,必定会设置HA,减小故障率。shell
# 参考了好几处的教程,本身动手实践了下,成功。apache
# 会有一些配置文件须要修改,若是嫌vim麻烦,能够将文件下载到windows,改好后再传回去。vim
# 本次软件版本: CentOS 6.5 x64 jdk-8u161-linux-x64.tar.gz zookeeper-3.4.5.tar.gz hadoop-2.7.5.tar.gzwindows
分享以前我仍是要推荐下我本身建立的大数据学习交流Qun531629188浏览器
不管是大牛仍是想转行想学习的大学生网络
小编我都挺欢迎,今天的已经资讯上传到群文件,不按期分享干货,ssh
包括我本身整理的一份最新的适合2018年学习的大数据教程,欢迎初学和进阶中的小伙伴。ide
1、集群的规划 四台VM12
Zookeeper集群:
192.168.112.10 master
192.168.112.11 slave1
192.168.112.12 slave2
Hadoop集群:
192.168.112.10 master NameNode1 ResourceManager1 Journalnode
192.168.112.11 slave1 NameNode2 ResourceManager2 Journalnode
192.168.112.12 slave2 DataNode1
192.168.112.13 slave3 DataNode2
2、准备工做
一、安装JDK
二、配置环境变量
三、配置免密码登陆
四、配置主机名、网络、关闭防火墙 ...
3、配置Zookeeper(在192.168.112.10 master 安装)
在主节点(master)上配置ZooKeeper
(*)配置/usr/local/src/zookeeper/conf/zoo.cfg文件
dataDir=/usr/local/src/zookeeper/zkdataclientPort=2181server.1=master:2888:3888server.2=slave1:2888:3888server.3=slave2:2888:3888
(*)在/usr/local/src/zookeeper/zkdata目录下建立一个myid的空文件
echo 1 > myid
(*)将配置好的zookeeper拷贝到其余节点,同时修改各自的myid文件
scp -r /usr/local/src/zookeeper slave1:/usr/local/srcscp -r /usr/local/src/zookeeper slave2:/usr/local/src
4、安装Hadoop集群(在 master 上安装)
一、修改hadoo-env.sh
export JAVA_HOME=/usr/local/src/jdk1.8.0_161
二、修改core-site.xml
<configuration><!-- 指定hdfs的nameservice为 names1 --><property><name>fs.defaultFS</name><value>hdfs://names1</value></property><!-- 指定hadoop临时目录 --><property><name>hadoop.tmp.dir</name><value>/usr/local/src/hadoop-2.7.5/tmp</value></property><!-- 指定zookeeper地址 --><property><name>ha.zookeeper.quorum</name><value>master:2181,slave1:2181,slave2:2181</value></property></configuration>
三、修改hdfs-site.xml(配置这个nameservice中有几个namenode)
<configuration> <!-- 指定hdfs的nameservice为 names1 ,须要和core-site.xml中的保持一致 --><property><name>dfs.nameservices</name><value>names1</value></property><!-- names1下面有两个NameNode,分别是nn1,nn2 --><property><name>dfs.ha.namenodes.names1</name><value>nn1,nn2</value></property><!-- nn1的RPC通讯地址 --><property><name>dfs.namenode.rpc-address.names1.nn1</name><value>master:9000</value></property><!-- nn1的http通讯地址 --><property><name>dfs.namenode.http-address.names1.nn1</name><value>master:50070</value></property><!-- nn2的RPC通讯地址 --><property><name>dfs.namenode.rpc-address.names1.nn2</name><value>slave1:9000</value></property><!-- nn2的http通讯地址 --><property><name>dfs.namenode.http-address.names1.nn2</name><value>slave1:50070</value></property><!-- 指定NameNode的日志在JournalNode上的存放位置 --><property><name>dfs.namenode.shared.edits.dir</name><value>qjournal://master:8485;slave1:8485;/names1</value></property><!-- 指定JournalNode在本地磁盘存放数据的位置 --><property><name>dfs.journalnode.edits.dir</name><value>/usr/local/src/hadoop-2.7.5/journal</value></property><!-- 开启NameNode失败自动切换 --><property><name>dfs.ha.automatic-failover.enabled</name><value>true</value></property><!-- 配置失败自动切换实现方式 --><property><name>dfs.client.failover.proxy.provider.names1</name><value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value></property><!-- 配置隔离机制方法,多个机制用换行分割,即每一个机制暂用一行--><property><name>dfs.ha.fencing.methods</name><value>sshfenceshell(/bin/true)</value></property><!-- 使用sshfence隔离机制时须要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>
cd /usr/local/src/hadoop-2.7.5/mkdir journalchmod 777 journal
四、修改mapred-site.xml
<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property></configuration>
五、修改yarn-site.xml
<configuration><!-- 开启RM高可靠 --><property><name>yarn.resourcemanager.ha.enabled</name><value>true</value></property><!-- 指定RM的cluster,不能与nameservices相同 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>
六、修改slaves
bigdata14bigdata15
七、将配置好的hadoop拷贝到其余节点
scp -r /usr/local/src/hadoop-2.7.5/ root@slave1:/usr/local/src/ scp -r /usr/local/src/hadoop-2.7.5/ root@slave2:/usr/local/src/ scp -r /usr/local/src/hadoop-2.7.5/ root@slave3:/usr/local/src/
5、启动Zookeeper集群
每台上面 zkServer.sh start
6、在master和slave1上启动journalnode
hadoop-daemon.sh start journalnode
7、格式化HDFS(在 master 上执行)
1. hdfs namenode -format
2. 将/usr/local/src/hadoop-2.7.5/tmp拷贝到slave1的/usr/local/src/hadoop-2.7.5/tmp下
3. 格式化zookeeper
hdfs zkfc -formatZK# 日志:18/04/11 22:34:33 INFO ha.ActiveStandbyElector: Successfully created /hadoop-ha/names1 in ZK.
8、在master上启动Hadoop集群
start-all.sh
# 日志:
Starting namenodes on [master slave1]
slave1: starting namenode, logging to /usr/local/src/hadoop-2.7.5/logs/hadoop-root-namenode-slave1.out
master: starting namenode, logging to /usr/local/src/hadoop-2.7.5/logs/hadoop-root-namenode-master.out
slave3: starting datanode, logging to /usr/local/src/hadoop-2.7.5/logs/hadoop-root-datanode-slave3.out
slave2: starting datanode, logging to /usr/local/src/hadoop-2.7.5/logs/hadoop-root-datanode-slave2.out
slave1上的ResourceManager须要单独启动
yarn-daemon.sh start resourcemanager
9、验证与检查
jps查看每台的进程:(这里没显示Jps进程)
master: 3745 QuorumPeerMain 3812 JournalNode 4484 ResourceManager 4070 NameNode 4377 DFSZKFailoverControllerslave1: 3809 ResourceManager 3602 NameNode 3522 JournalNode 3715 DFSZKFailoverController 3455 QuorumPeerMainslave2: 19316 NodeManager 19207 DataNode 19118 QuorumPeerMainslave3: 3530 DataNode 3630 NodeManager
分别访问:http://master:50070 和 http://slave1:50070 能够看到一个是active, 另外一个是standby 而Namespace均显示为names1
分别访问:http://master:8088 和 http://slave1:8088 其中slave1将自动跳转到master,注意看浏览器URL的变化。Nodes中能够看到DataNode
模拟宕机:master 上执行 kill -9 4070 后,马上刷新http://slave1:50070 会发现变在了active
而后再从新启动宕掉的master进程: sbin/hadoop-daemon.sh start namenode 启动成功后,master会变为standby状态。
10、中止服务
好了,我要关掉VM了,因此要先停掉这些服务。
master上 stop-all.sh
slave1上 stop-all.sh 由于刚才有个RM是单独启动的,因此也须要单独来中止。
在每台zk上zkServer.sh stop