Hadoop学习笔记05_HA
################# 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的更多相关文章
- Hadoop学习笔记—22.Hadoop2.x环境搭建与配置
自从2015年花了2个多月时间把Hadoop1.x的学习教程学习了一遍,对Hadoop这个神奇的小象有了一个初步的了解,还对每次学习的内容进行了总结,也形成了我的一个博文系列<Hadoop学习笔 ...
- Hadoop学习笔记(7) ——高级编程
Hadoop学习笔记(7) ——高级编程 从前面的学习中,我们了解到了MapReduce整个过程需要经过以下几个步骤: 1.输入(input):将输入数据分成一个个split,并将split进一步拆成 ...
- Hadoop学习笔记(6) ——重新认识Hadoop
Hadoop学习笔记(6) ——重新认识Hadoop 之前,我们把hadoop从下载包部署到编写了helloworld,看到了结果.现是得开始稍微更深入地了解hadoop了. Hadoop包含了两大功 ...
- Hadoop学习笔记(2)
Hadoop学习笔记(2) ——解读Hello World 上一章中,我们把hadoop下载.安装.运行起来,最后还执行了一个Hello world程序,看到了结果.现在我们就来解读一下这个Hello ...
- Hadoop学习笔记(5) ——编写HelloWorld(2)
Hadoop学习笔记(5) ——编写HelloWorld(2) 前面我们写了一个Hadoop程序,并让它跑起来了.但想想不对啊,Hadoop不是有两块功能么,DFS和MapReduce.没错,上一节我 ...
- Hadoop学习笔记(3)——分布式环境搭建
Hadoop学习笔记(3) ——分布式环境搭建 前面,我们已经在单机上把Hadoop运行起来了,但我们知道Hadoop支持分布式的,而它的优点就是在分布上突出的,所以我们得搭个环境模拟一下. 在这里, ...
- Hadoop学习笔记(2) ——解读Hello World
Hadoop学习笔记(2) ——解读Hello World 上一章中,我们把hadoop下载.安装.运行起来,最后还执行了一个Hello world程序,看到了结果.现在我们就来解读一下这个Hello ...
- Hadoop学习笔记(1) ——菜鸟入门
Hadoop学习笔记(1) ——菜鸟入门 Hadoop是什么?先问一下百度吧: [百度百科]一个分布式系统基础架构,由Apache基金会所开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序. ...
- Hadoop学习笔记(两)设置单节点集群
本文描写叙述怎样设置一个单一节点的 Hadoop 安装.以便您能够高速运行简单的操作,使用 Hadoop MapReduce 和 Hadoop 分布式文件系统 (HDFS). 參考官方文档:Hadoo ...
随机推荐
- go中 -strconv包的使用
strconv 包中的函数和方法 // atob.go ------------------------------------------------------------ // ParseBoo ...
- myeclipse项目在Tomcat服务器部署问题
错误信息:Deployment of project mybook will replace this resource. Please specify the action you wish to ...
- linux bash tutorial
bash read-special-keys-in-bash xdotool linux 登录启动顺序
- C# 可指定并行度任务调度器
可指定并行度的任务调度器 https://social.msdn.microsoft.com/Forums/zh-CN/b02ba3b4-539b-46b7-af6b-a5ca3a61a309/tas ...
- 【Entity Framework】Revert the database to specified migration.
本文涉及的相关问题,如果你的问题或需求有与下面所述相似之处,请阅读本文 [Entity Framework] Revert the database to specified migration. [ ...
- python学习----IO模型
一.IO模型介绍 本文讨论的背景是Linux环境下的network IO. 本文最重要的参考文献是Richard Stevens的"UNIX® Network Programming Vol ...
- vue--数据显示模版上
首先需要知道 挂载点:是index.html文件下的一个dom节点 模板:挂载点里的内容,也就是模板内容. 组件: 页面上的某一部分内容.当我们的项目比较大时,可以将页面拆分成几个部分,每个部分就是一 ...
- 从github上下载java项目导入到eclipse中
转载地址:https://blog.csdn.net/chyo098/article/details/79268136
- MATLAB绘图功能(1) 二维高层绘图操作
文末源代码 部分源代码 %% 基本绘图操作 x=:*pi; y=sin(x); plot(x,y); % 第二个参数为矩阵 y1=sin(x); y2=cos(x); y3=0.002*exp(x); ...
- 20175317 《Java程序设计》第五周学习总结
20175317 <Java程序设计>第五周学习总结 教材学习内容总结 第五周我学习了教材第六章的内容,了解了接口的知识,学到了以下内容: 明白了什么是接口 学会了如何实现接口 了解了接口 ...