################# HA 即 High Available 高可用。
# 其作用是为了减少主从结构的单点故障,而设置备用节点,既然学习了Hadoop生态圈,那么HA配置也是必须要掌握的。
# 因为生产环境中,一定会设置HA,减少故障率。

# 参考了好几处的教程,自己动手实践了下,成功。

# 会有一些配置文件需要修改,如果嫌vim麻烦,可以将文件下载到windows,改好后再传回去。
# 本次软件版本: CentOS 6.5 x64      jdk-8u161-linux-x64.tar.gz     zookeeper-3.4.5.tar.gz       hadoop-2.7.5.tar.gz

一、集群的规划  四台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

二、准备工作
1、安装JDK
2、配置环境变量
3、配置免密码登录
4、配置主机名、网络、关闭防火墙 ...

三、配置Zookeeper(在192.168.112.10 master 安装)
在主节点(master)上配置ZooKeeper
(*)配置/usr/local/src/zookeeper/conf/zoo.cfg文件

dataDir=/usr/local/src/zookeeper/zkdata
clientPort=2181
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

(*)在/usr/local/src/zookeeper/zkdata目录下创建一个myid的空文件

echo  > myid

(*)将配置好的zookeeper拷贝到其他节点,同时修改各自的myid文件

scp -r /usr/local/src/zookeeper slave1:/usr/local/src
scp -r /usr/local/src/zookeeper slave2:/usr/local/src

四、安装Hadoop集群(在 master 上安装)
1、修改hadoo-env.sh

export JAVA_HOME=/usr/local/src/jdk1..0_161

2、修改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>

3、修改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>
sshfence
shell(/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./
mkdir journal
chmod journal

4、修改mapred-site.xml

<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

5、修改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>

6、修改slaves

bigdata14
bigdata15

7、将配置好的hadoop拷贝到其他节点

    scp -r /usr/local/src/hadoop-2.7./ root@slave1:/usr/local/src/
scp -r /usr/local/src/hadoop-2.7./ root@slave2:/usr/local/src/
scp -r /usr/local/src/hadoop-2.7./ root@slave3:/usr/local/src/

五、启动Zookeeper集群

每台上面 zkServer.sh start

六、在master和slave1上启动journalnode

hadoop-daemon.sh start journalnode

七、格式化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.

八、在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

九、验证与检查
jps查看每台的进程:(这里没显示Jps进程)

master:
QuorumPeerMain
JournalNode
ResourceManager
NameNode
DFSZKFailoverController
slave1:
ResourceManager
NameNode
JournalNode
DFSZKFailoverController
QuorumPeerMain
slave2:
NodeManager
DataNode
QuorumPeerMain
slave3:
DataNode
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状态。

十、停止服务
好了,我要关掉VM了,所以要先停掉这些服务。
master上 stop-all.sh
slave1上 stop-all.sh 因为刚才有个RM是单独启动的,所以也需要单独来停止。
在每台zk上zkServer.sh stop

Hadoop学习笔记05_HA的更多相关文章

  1. Hadoop学习笔记—22.Hadoop2.x环境搭建与配置

    自从2015年花了2个多月时间把Hadoop1.x的学习教程学习了一遍,对Hadoop这个神奇的小象有了一个初步的了解,还对每次学习的内容进行了总结,也形成了我的一个博文系列<Hadoop学习笔 ...

  2. Hadoop学习笔记(7) ——高级编程

    Hadoop学习笔记(7) ——高级编程 从前面的学习中,我们了解到了MapReduce整个过程需要经过以下几个步骤: 1.输入(input):将输入数据分成一个个split,并将split进一步拆成 ...

  3. Hadoop学习笔记(6) ——重新认识Hadoop

    Hadoop学习笔记(6) ——重新认识Hadoop 之前,我们把hadoop从下载包部署到编写了helloworld,看到了结果.现是得开始稍微更深入地了解hadoop了. Hadoop包含了两大功 ...

  4. Hadoop学习笔记(2)

    Hadoop学习笔记(2) ——解读Hello World 上一章中,我们把hadoop下载.安装.运行起来,最后还执行了一个Hello world程序,看到了结果.现在我们就来解读一下这个Hello ...

  5. Hadoop学习笔记(5) ——编写HelloWorld(2)

    Hadoop学习笔记(5) ——编写HelloWorld(2) 前面我们写了一个Hadoop程序,并让它跑起来了.但想想不对啊,Hadoop不是有两块功能么,DFS和MapReduce.没错,上一节我 ...

  6. Hadoop学习笔记(3)——分布式环境搭建

    Hadoop学习笔记(3) ——分布式环境搭建 前面,我们已经在单机上把Hadoop运行起来了,但我们知道Hadoop支持分布式的,而它的优点就是在分布上突出的,所以我们得搭个环境模拟一下. 在这里, ...

  7. Hadoop学习笔记(2) ——解读Hello World

    Hadoop学习笔记(2) ——解读Hello World 上一章中,我们把hadoop下载.安装.运行起来,最后还执行了一个Hello world程序,看到了结果.现在我们就来解读一下这个Hello ...

  8. Hadoop学习笔记(1) ——菜鸟入门

    Hadoop学习笔记(1) ——菜鸟入门 Hadoop是什么?先问一下百度吧: [百度百科]一个分布式系统基础架构,由Apache基金会所开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序. ...

  9. Hadoop学习笔记(两)设置单节点集群

    本文描写叙述怎样设置一个单一节点的 Hadoop 安装.以便您能够高速运行简单的操作,使用 Hadoop MapReduce 和 Hadoop 分布式文件系统 (HDFS). 參考官方文档:Hadoo ...

随机推荐

  1. js-cookie的用法

    cookie的作用无需多言,自己封装一个cookie,不停地复制黏贴页颇为麻烦,在这里,有npm为我们封装好的插件js-cookie: https://www.npmjs.com/package/js ...

  2. MariaDB glare cluster简介

    MariaDB MariaDB 是由原来 MySQL 的作者Michael Widenius创办的公司所开发的免费开源的数据库服务器,MariaDB是同一MySQL版本的二进制替代品, 当前最新版本1 ...

  3. 使用mybatis-generator插件自动生成代码的步骤

    注意:首先你这个项目一定要是个maven项目 1.首先你需要在pom文件中导入相关的依赖,如下代码 <plugin> <groupId>org.mybatis.generato ...

  4. iptables 认识 第二章

    一.四表五链 netfilter 通过四表五链两个维度来定义数据包过滤规则. #上面图片中 raw 表不在postrouting 链中,请注意 上图中的五个位置也被称为五个钩子函数(hook func ...

  5. HDU 6088 Rikka with Rock-paper-scissors(NTT+欧拉函数)

    题意 \(n\) 局石头剪刀布,设每局的贡献为赢的次数与输的次数之 \(\gcd\) ,求期望贡献乘以 \(3^{2n}\) ,定义若 \(xy=0\) 则,\(\gcd(x,y)=x+y\) 思路 ...

  6. _mount_allowed

    该表配置可以坐骑的使用区域,可能需要修改spell.dbc,允许在室内等特殊区域使用坐骑技能

  7. 最新案例铁血军事手机客户端(IOS & Android)

    <铁血军事>Android手机客户端由铁血网开发和运营,为网友提供铁血论坛和铁血读书两大产品.使用Android手机客户端,您不仅可以阅读到最新军事资讯,随时参与精彩话题讨论,还可以在线阅 ...

  8. Asp.net core 学习笔记 (AutoMapper)

    参考 : http://www.cnblogs.com/xishuai/p/3700052.html http://www.cnblogs.com/xishuai/p/3704435.html htt ...

  9. eclipse 运行 mapreduce程序报错 No job jar file set. User classes may not be found. See JobConf(Class) or JobConf#setJar(String).

    报错信息 17/07/06 17:00:27 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Ap ...

  10. webpack2与promise在IE环境下

    webpack2好像说是要自己编译es6,但是结果不是很理想,es6的箭头函数他就没有编译,所以目前还是先用babel来转换吧, 之前用的ajax是axios,底层是promise,但是promise ...