Hadoop.2.x_HA部署
一、概念与HA思路
1. 首先Hadoop架构为主从架构(NameNode/DataNode)
2. NameNode管理着文件系统和与维护客户端访问DataNode
3. Hadoop 2.0 之前的版本,集群中NameNode存在单点故障(SPOF)
4. 单个NameNode机器宕机将导致集群无法使用,直到管理员重启
5. 单个NameNode机器升级时也会导致集群无法使用
6. HDFS HA用于解决单节点故障(使用Active/Standby两个NameNode交替)
方案一:借助质量好的机器进行读写操作保证日志数据一致
方案二:使用类似与Zookeeper(2n+1特效) 备份日志数据(保证日志数据的安全性),两个NameNode共同管理一份元数据
方案三:使用Zookeeper
7. 使用方案二,日志交于JournalNode进程管理,日志节点为奇数个
AvtiveNameNode启动时接收DataNode心跳汇报,StandbyNameNode也需要
使用JournalNode至少需要3个节点
8. 既然ActiveNameNode有可能会宕掉,那么客户端如何去找到StandbyNameNode
这其中有一个Proxy(代理)用于告知客户端
9. ActiveNameNode与StandbyNameNode通过隔离机制互不干预
通过代理找到ActiveNameNode,通过Zookeeper选主操作转移故障
10.既然ResourceManager也是一个分布式的系统,同样也可能出现单节点故障
二、部署与搭建测试
1. 目录规划(hdfs存储位置,JournalNode存储位置,等)
2. 上传并解压Hadoop
3. 配置自定义(这仅仅配置HDFS NameNode HA)
*.env
# 配置JDK路径
hdfs-site.xml
# 服务配置
dfs.nameservices-->ns1
dfs.ha.namenodes.ns1-->nn1,nn2
dfs.namenode.rpc-address.ns1.nn1-->hadoop09-linux-01.ibeifeng.com:8020
dfs.namenode.rpc-address.ns1.nn2-->hadoop09-linux-02.ibeifeng.com:8020
dfs.namenode.http-address.ns1.nn1-->hadoop09-linux-01.ibeifeng.com:50070
dfs.namenode.http-address.ns1.nn2-->hadoop09-linux-02.ibeifeng.com:50070
# JournalNode存储配置(注意新建自定义目录)
dfs.namenode.shared.edits.dir-->qjournal://hadoop09-linux-01.ibeifeng.com:8485;hadoop09-linux-02.ibeifeng.com:8485;hadoop09-linux-03.ibeifeng.com:8485/ns1
dfs.journalnode.edits.dir-->/home/liuwl/opt/app/hadoop-2.5.0/data/dfs/jn
# 隔离机制
dfs.ha.fencing.methods-->sshfence
# 注意测试那几个节点是否能够连通 ssh hadoop09-linux-01.ibeifeng.com
dfs.ha.fencing.ssh.private-key-files-->/home/liuwl/.ssh/id_rsa
# 访问文件系统权限
dfs.permissions.enabled-->false
core-site.xml
fs.defaultFS-->hdfs://ns1
hadoop.tmp.dir-->/home/liuwl/opt/app/hadoop-2.5.0/data/tmp
hadoop.http.staticuser.user-->liuwl
slaves
hadoop09-linux-01.ibeifeng.com
hadoop09-linux-02.ibeifeng.com
hadoop09-linux-03.ibeifeng.com
4. 分发配置文件目录(注意刚才新建的data/dfs/jn,其他节点也要保持一致)
scp -r hadoop/ liuwl@hadoop09-linux-02.ibeifeng.com:/home/liuwl/opt/app/hadoop-2.5.0/etc
scp -r hadoop/ liuwl@hadoop09-linux-03.ibeifeng.com:/home/liuwl/opt/app/hadoop-2.5.0/etc
5. 分别启动Zookeeper(转13步)
bin/zkServer start
6. 分别启动JournalNode服务
sbin/hadoop-daemon.sh start journalnode
7. 在nn1所在节点进行格式化文件系统,并启动
bin/hdfs dfs namenode -format
sbin/hadoop-daemon.sh start namenode
8. 在nn2所在节点进行同步元数据信息,并启动
bin/hdfs namenode -bootstrapStandby
sbin/hadoop-daemon.sh start namenode
9. 将nn1切换为Active(手动切换)
bin/hdfs haadmin -transitionToActive nn1
10. 在nn1所在节点启动所有datanode
sbin/hadoop-daemon.sh start datanode
11. kill掉nn1上的namenode,并手动设置nn2为Active
nn1: kill -9 xxx/sbin/hadoop-daemon.sh stop namenode
nn2: bin/hdfs haadmin -transitionToActive nn2 --forceactive
12. 网页上查看namenode状态或使用命令
bin/hdfs haadmin -getServiceState nn2
13. 使用Zookeeper自动转移故障
hdfs-site.xml
dfs.ha.automatic-failover.enabled-->false
core-site.xml
ha.zookeeper.quorum-->hadoop09-linux-01.ibeifeng.com:2181,hadoop09-linux-02.ibeifeng.com:2181,hadoop09-linux-03.ibeifeng.com:2181
14. 按照官方文档,需要初始化Zookeeper,注意每个节点上的Zookeeper服务为开启状态(转13步)
bin/hdfs zkfc -formatZK
# 单独启动zookeeper的故障转移监控器(DFSZKFailoverController),每个namenode都有一个
sbin/hadoop-deamon.sh start zkfc
15. 测试Zookeeper存储
../zookeeper-3.4.6/bin/zkCli.sh
16. 启动yarn,上传一个wc.input,节点三运行MR程序,运行时,kill掉ActiveNameNode
sbin/start-yarn.sh
bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar wordcount tmp/mapreduce/wordcount/input tmp/mapreduce/wordcount/output
kill -9 xxx
# 查看namenode状态
# 分析结论:DFSZKFailoverController监控NameNode状态,NameNode宕掉,监听器马上告诉Zookeeper,
# Zookeeper告知Standby的DFSZKFailoverController,进入切换Active流程
# DFSZKFailoverController进行选主操作,
# 确保新的Active节点,然后通过RPC将StandbyNameNode切换为ActiveNameNode,完成故障转移
# HA 解决了元数据共享,Active切换,隔离,并保证了元数据的安全性
17. ResourceManager HA (支持一个ActiveResourceManager对应多个StandbyResourceManager)
yarn-site.xml
# 运行MapRedue程序必配
yarn.nodemanager.aux-services-->mapreduce_shuffle
# 配置日志聚集功能
# 日志聚集是YARN提供的日志中央化管理功能,
# 它能将运行完成的Container/任务日志上传到HDFS上,
# 从而减轻NodeManager负载,且提供一个中央化存储和分析机制,
# 默认情况下,Container/任务日志是存在各个NodeManager上的
yarn.log-aggregation-enable-->true
# 在HDFS上聚集的日志最多保存多长时间
yarn.log-aggregation.retain-seconds-->604800
# 使用ResourceManager HA
yarn.resourcemanager.ha.enabled-->true
# 添加一个ResourceManager集群ID
yarn.resourcemanager.cluster-id-->yarn-cluster
# 指定两个ResouceManager
yarn.resourcemanager.ha.rm-ids-->rm109,rm110
# 指定ResourceManager所在机器
yarn.resourcemanager.hostname.rm109-->hadoop09-linux-02.ibeifeng.com
yarn.resourcemanager.hostname.rm110-->hadoop09-linux-03.ibeifeng.com
# 配置Zookeeper机器地址
yarn.resourcemanager.zk-address-->hadoop09-linux-01.ibeifeng.com:2181,hadoop09-linux-02.ibeifeng.com:2181,hadoop09-linux-03.ibeifeng.com:2181
# ResourceManager恢复
yarn.resourcemanager.recovery.enabled-->true
# 修改ResourceManager默认存储日志的方式
yarn.resourcemanager.store.class-->org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore
# 分发到各个节点
18. 分别启动(之前先启动Zookeeper)
节点1:sbin/start-dfs.sh
节点1:sbin/start-yarn.sh
节点1:sbin/start-yarn.sh
19. 打开web查看各类信息,当使用节点3打开resourcemanager,发现它会自动重定向到节点2
20. 节点1测试一个mr程序,断掉节点2的ResourceManager,查看web
bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar wordcount tmp/mapreduce/wordcount/input tmp/mapreduce/wordcount/output2
kill -9 xx
# 当kill节点2的ResourceManager的一瞬间,节点报错(连接超时)
# java.io.IOException: Failed on local exception: java.io.EOFException; Host Details : local host is: "hadoop09-linux-01.ibeifeng.com/10.0.0.108"; destination host is: "hadoop09-linux-02.ibeifeng.com":8032;
# 打开节点3的web页面发现该程序仍在运行,即由节点3的ResoreceManager接管执行mr程序
# 过了几十秒后mr程序成功运行完毕
# 内部已设置一个监控器,所以可以自动切换
21. 进入Zookeeper客户端查看
../zookeeper-3.4.6/bin/zkCli.sh
[zk: localhost:2181(CONNECTED) 0] ls /
[rmstore, yarn-leader-election, hadoop-ha, zookeeper]
[zk: localhost:2181(CONNECTED) 1] ls /rmstore
[ZKRMStateRoot]
[zk: localhost:2181(CONNECTED) 2] ls /rmstore/ZKRMStateRoot
[RMAppRoot, RMVersionNode, RMDTSecretManagerRoot]
Hadoop.2.x_HA部署的更多相关文章
- Hadoop大数据部署
Hadoop大数据部署 一. 系统环境配置: 1. 关闭防火墙,selinux 关闭防火墙: systemctl stop firewalld systemctl disable firewalld ...
- Hadoop生态圈-Oozie部署实战
Hadoop生态圈-Oozie部署实战 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Oozie简介 1>.什么是Oozie Oozie英文翻译为:驯象人.一个基于工作流 ...
- Hadoop.之.入门部署
一.课程目标 ->大数据是什么?大数据能做什么? ->什么是Hadoop?Hadoop的设计思想? ->Hadoop如何解决大数据的问题?(什么是hdfs与yarn.MapReduc ...
- Hadoop生态圈-Azkaban部署实战
Hadoop生态圈-Azkaban部署实战 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Azkaban部署流程 1>.上传azkaban程序并创建解压目录 [yinz ...
- Hadoop系列之(二):Hadoop集群部署
1. Hadoop集群介绍 Hadoop集群部署,就是以Cluster mode方式进行部署. Hadoop的节点构成如下: HDFS daemon: NameNode, SecondaryName ...
- Hadoop生态圈-Sqoop部署以及基本使用方法
Hadoop生态圈-Sqoop部署以及基本使用方法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Sqoop(发音:skup)是一款开源的工具,主要用于在Hadoop(Hive)与 ...
- hadoop 集群部署ganglia 监控服务与nagios 报警服务
1. 部署ganglia 服务 ganglia 涉及到的组件: 数据监测节点(gmond):这个部件装在需要监测的节点上,用于收集本节点的运行情况,并将这些统计信息传送到gmetad, ...
- ubuntu下hadoop完全分布式部署
三台机器分别命名为: hadoop-master ip:192.168.0.25 hadoop-slave1 ip:192.168.0.26 hadoop-slave2 ip:192.168.0.27 ...
- Hadoop系列(二):Hadoop单节点部署
环境:CentOS 7 JDK: 1.7.0_80 hadoop:2.8.5 hadoop(192.168.56.101) 配置基础环境 1. 测试环境可以直接关闭selinux和防火墙 2. 主机添 ...
随机推荐
- 协处理器,王明学learn
协处理器 协处理器用于执行特定的处理任务,如:数学协处理器可以控制数字处理,以减轻处理器的负担.ARM可支持多达16个协处理器,其中CP15是最重要的一个. CP15提供16组寄存器 通过提供的16组 ...
- 数字信号处理实验(四)——数字滤波器结构
一.滤波器结构 1.IIR滤波器 (1)系统函数 (2)差分方程 (3)级联形式: (4)并联形式 2.FIR滤波器 (1)系统函数 (2)差分方程 (3)级联形式: (4 ...
- Java优化之输出十万以内的质数
(1)未经优化时所耗费的时间: public class PrimeNumber { public static void main(String[] args) { long start = Sys ...
- eclipse->project->clean…作用
其实主要作用就是把编译好的class等文件删除,激活eclipse的自动编译.解决的问题就是,有时候你把代码改了,但因为一些未知的原因,eclipse的自动编译没有成功,导致运行结果不正常.当你的工程 ...
- CSS3 calc()的使用
前言: 平时在制作页面的时候,总会碰到有的元素是100%的宽度.众所周知,如果元素宽度为100%时,其自身不带其他盒模型属性设置还好,要是有别的,那将导致盒子撑破.比如说,有一个边框,或者说有marg ...
- node.js整理 01代码的组织和部署
模块 require(函数) 用于在当前模块中加载和使用别的模块,传入一个模块名,返回一个模块导出对象. 模块名可使用相对路径(以./开头),或者是绝对路径(以/或C:之类的盘符开头:注意单个模块名默 ...
- BZOJ2082 : [Poi2010]Divine divisor
将所有数分解质因数,那么第一问就是求指数的最大值,第二问就是$2^{指数最大的质数个数}-1$. 首先将$10^6$以内的质因数全部找到,那么剩下部分的因子$>10^6$,且只有3种情况: 1. ...
- BZOJ1841 : 蚂蚁搬家
树分治,对于每个分治结构,维护两棵线段树. 第一棵按dfs序维护所有点到重心的距离,第二棵维护每个分支的最长链. 那么当前结构对答案的贡献就是第二棵线段树的最大值$+$次大值. 对于操作$0$,如果是 ...
- BZOJ3591: 最长上升子序列
因为是一个排列,所以可以用$n$位二进制数来表示$O(n\log n)$求LIS时的单调栈. 首先通过$O(n^22^n)$的预处理,求出每种LIS状态后面新加一个数之后的状态. 设$f[i][j]$ ...
- 内网配置DNS服务器,无域名,只有主机名
Hadoop集群中,使用DNS而不是hosts来访问服务器. 1. 安装bind软件 用root用户运行: yum -y install bind* 2. 配置named.conf文件 vi /etc ...