前言:正式引入HA机制是从hadoop2.0开始,之前的版本中没有HA机制
1.1 HA的运作机制
(1)hadoop-HA集群运作机制介绍
所谓HA,即高可用(7*24小时不中断服务)
实现高可用最关键的是消除单点故障
hadoop-ha严格来说应该分成各个组件的HA机制——HDFS的HA、YARN的HA
(2)HDFS的HA机制详解
通过双namenode消除单点故障
双namenode协调工作的要点:
A、元数据管理方式需要改变:
内存中各自保存一份元数据
Edits日志只能有一份,只有Active状态的namenode节点可以做写操作
两个namenode都可以读取edits
共享的edits放在一个共享存储中管理(qjournal和NFS两个主流实现)
B、需要一个状态管理功能模块
实现了一个zkfailover,常驻在每一个namenode所在的节点
每一个zkfailover负责监控自己所在namenode节点,利用zk进行状态标识
当需要进行状态切换时,由zkfailover来负责切换
切换时需要防止brain splitf现象的发生
2.HDFS HA
集群配置(以此为例)
1
)规划集群
102 103 104
NameNode NameNode
JournalNode JournalNode JournalNode
DataNode DataNode DataNode
2
)配置集群
(
1
)官方地址: http://hadoop.apache.org/
(
2
)在
opt
目录下创建一个
ha
文件夹
mkdir ha
(
3
)将
/opt/app/
下的
hadoop-2.7.2
拷贝到
/opt/ha
目录下
cp -r hadoop-2.7.2/ /opt/ha/
(
4
)配置
hdfs-site.xml
dfs.nameservices
ns1
dfs.ha.namenodes.ns1
nn1,nn2
dfs.namenode.rpc-address.ns1.nn1
hadoop102:8020
dfs.namenode.rpc-address.ns1.nn2
hadoop103:8020
dfs.namenode.http-address.ns1.nn1
hadoop102:50070
dfs.namenode.http-address.ns1.nn2
hadoop103:50070
dfs.namenode.shared.edits.dir
qjournal://hadoop102:8485;hadoop3.robot.com:8485;hadoop104:8485/ns1
dfs.journalnode.edits.dir
/opt/ha/hadoop-2.5.0/data/dfs/jn
dfs.client.failover.proxy.provider.mycluster
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
dfs.ha.fencing.methods
sshfence
dfs.ha.fencing.ssh.private-key-files
/root/.ssh/id_rsa
|
(
5
)配置
core-site.xml
fs.defaultFS
hdfs://ns1
hadoop.tmp.dir
/opt/app/hadoop-2.5.0/data/tmp
|
(
6
)拷贝配置好的
hadoop
环境到其他节点
3
)
HA
启动
(
1
)在各个
JournalNode
节点上,输入以下命令启动
journalnode
服务:
sbin/hadoop-daemon.sh start journalnode
(
2
)在
[nn1]
上,对其进行格式化,并启动:
bin/hdfs namenode –format
sbin/hadoop-daemon.sh start namenode
(
3
)在
[nn2]
上,同步
nn1
的元数据信息:
bin/hdfs namenode –bootstrapStandby
(
4
)启动
[nn2]
:
sbin/hadoop-daemon.sh start namenode
(
5
)查看
web
页面显示
这时候hadoop102,hadoop103都是standby状态
(
6
)在
[nn1]
上,启动所有
datanode
sbin/hadoop-daemons.sh start datanode
(
7
)将
[nn1]
切换为
Active
bin/hdfs haadmin –transitionToActive nn1
(
8
)查看是否
Active
bin/hdfs haadmin –getServiceState nn1
3 Zookeeper对HA配置高可用
1
)
Zookeeper
配置
HA
自动故障转移架构图
2
)具体配置
(
1
)在
hdfs-site.xml
中增加
dfs.ha.automatic-failover.enabled
true
|
(
2
)在
core-site.xml
文件中增加
ha.zookeeper.quorum
hadoop102:2181,hadoop103:2181,hadoop104:2181
|
3
)启动
(
1
)关闭所有
HDFS
服务:
sbin/stop-dfs.sh
(
2
)启动
Zookeeper
集群:
bin/zkServer.sh start
(
3
)初始化
HA
在
Zookeeper
中状态:
bin/hdfs zkfc -formatZK
(
4
)启动
HDFS
服务:
sbin/start-dfs.sh
(
5
)在各个
NameNode
节点上启动
DFSZK Failover Controller
,先在哪台机器启动,哪个机器的
NameNode
就是
Active NameNode
Sbin/hadoop-daemin.sh start zkfc
4
)验证
(
1
)将
Active NameNode
进程
kill
kill -9 pid
(
2
)将
Active NameNode
机器断开网络
service network stop
4.HDFS Federation架构设计
- NameNode架构的局限性
(
1
)
Namespace
(命名空间)的限制
由于
NameNode
在内存中存储所有的元数据(
metadata
),因此单个
namenode
所能存储的对象(文件
+
块)数目受到
namenode
所在
JVM
的
heap size
的限制。
50G
的
heap
能够存储
20
亿(
200million
)个对象,这
20
亿个对象支持
4000
个
datanode
,
12PB
的存储(假设文件平均大小为
40MB
)。随着数据的飞速增长,存储的需求也随之增长。单个
datanode
从
4T
增长到
36T
,集群的尺寸增长到
8000
个
datanode
。存储的需求从
12PB
增长到大于
100PB
。
(
2
)隔离问题
由于
HDFS
仅有一个
namenode
,无法隔离各个程序,因此
HDFS
上的一个实验程序就很有可能影响整个
HDFS
上运行的程序。
(
3
)性能的瓶颈
由于是单个
namenode
的
HDFS
架构,因此整个
HDFS
文件系统的吞吐量受限于单个
namenode
的吞吐量。
2
)
HDFS Federation
架构设计
能不能有多个
NameNode
NameNode NameNode NameNode
元数据
元数据
元数据
3
)
HDFS Federation
应用思考
不同应用可以使用不同
NameNode
进行数据管理
图片业务、爬虫业务、日志审计业务
Hadoop
生态系统中,不同的框架使用不同的
namenode
进行管理
namespace
。(隔离性)