################# 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. python 使用函数参数注解

    使用函数参数注解是一个很好的办法,它能提示程序员应该怎样正确使用这个函数. 函数注解只存储在函数的annotations 属性中

  2. 20165215 2017-2018-2《Java程序设计》课程总结

    20165215 2017-2018-2<Java程序设计>课程总结 一.每周作业链接汇总 预备作业1:我期望的师生关系:令我记忆深刻的老师,期望的师生关系,本学期的学习规划. 预备作业二 ...

  3. vue mandmobile ui实现三列列表的方法

    vue mandmobile ui实现三列列表的方法 请问这种列表的要用那个组件好呢?Cellitem 只能用到两列,这个要三列的怎么弄?mand的好像没有listview,grid组件的 问了man ...

  4. GoldenGate实时投递数据到大数据平台(7)– Apache Hbase

    Apache Hbase安装及运行 安装hbase1.4,确保在这之前hadoop是正常运行的.设置相应的环境变量, export HADOOP_HOME=/u01/hadoop export HBA ...

  5. Qt::WindowFlags枚举类型解析

    在使用Qt设计的时候经常会看到QWidget控件的构造函数出现下面这样一句话: QWidget(QWidget *parent=0,Qt::WindowFlags f=0) QWidget *pare ...

  6. 剑指offer(52)正则表达式的匹配

    题目描述 请实现一个函数用来匹配包括'.'和'*'的正则表达式.模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次). 在本题中,匹配是指字符串的所有字符匹配整个模式 ...

  7. ArchLinux 无密码Samba 配置

    安装上迅雷后就必须把硬盘挂上去开个Samba,然后边下电影边看,这就是一个Nas了. 开搞! pacman -S samba 安装samba,然后进入/etc/samba/目录 vim smb.con ...

  8. bzoj2091: [Poi2010]The Minima Game DP

    2091: [Poi2010]The Minima Game DP 链接 https://www.lydsy.com/JudgeOnline/problem.php?id=2091 思路 这类问题好迷 ...

  9. webpack4入门

    前提 已安装node(版本号>4.0,已自带NPM) mac机器 有一个空目录 无webpack.config.js配置打包 快速构建package.json文件. npm init -y 安装 ...

  10. 第 8 章 容器网络 - 063 - 如何使用 Weave 网络?

    如何使用 Weave 网络? weave 是 Weaveworks 开发的容器网络解决方案. weave 创建的虚拟网络可以将部署在多个主机上的容器连接起来. 对容器来说,weave 就像一个巨大的以 ...