1.HA

HA即为High Availability,用于解决NameNode单点故障问题,该特性通过热备的方式为主NameNode提供一个备用者,一旦主NameNode出现故障,可以迅速切换至备NameNode,从而实现不间断对外提供服务。

在一个典型的HDFSHA场景中,通常由两个NameNode组成,一个处于active状态,另一个处于standby状态。Active NameNode对外提供服务,比如处理来自客户端的RPC请求,而Standby NameNode则不对外提供服务,仅同步active namenode的状态,以便能够在它失败时快速进行切换。

为了能够实时同步Active和Standby两个NameNode的元数据信息(实际上editlog),需提供一个共享存储系统,可以是NFS、QJM(Quorum Journal Manager)或者Bookeeper,Active Namenode将数据写入共享存储系统,而Standby监听该系统,一旦发现有新数据写入,则读取这些数据,并加载到自己内存中,以保证自己内存状态与Active NameNode保持基本一致,如此这般,在紧急情况下standby便可快速切为active namenode。

HA 的共享存储常用的就是journal manager,也就是ZKFC。

zk在zkfc中可以提供的功能:
(1) Failure detector: 及时发现出故障的NN,并通知zkfc
(2) Active node locator: 帮助客户端定位哪个是Active的NN
(3) Mutual exclusion of active state: 保证某一时刻只有一个Active的NN

(1) ZKFailoverController(DFSZKFailoverController): 驱动整个ZKFC的运转,通过向HealthMonitor和ActiveStandbyElector注册回调函数的方式,subscribe HealthMonitor和ActiveStandbyElector的事件,并做相应的处理
(2) HealthMonitor: 定期check NN的健康状况,在NN健康状况发生变化时,通过回调函数把变化通知给ZKFailoverController
(3) ActiveStandbyElector: 管理NN在zookeeper上的状态,zookeeper上对应node的结点发生变化时,通过回调函数把变化通知给ZKFailoverController
(4) FailoverController: 提供做graceful failover的相关功能(dfs admin可以通过命令行工具手工发起failover)

详细配置:略

Java API 访问:

public static void main(String[] args) {
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://myhadoop");
conf.set("dfs.nameservices", "myhadoop");
conf.set("dfs.ha.namenodes.myhadoop", "nn1,nn2");
conf.set("dfs.namenode.rpc-address.myhadoop.nn1", "192.168.2.2:8020");
conf.set("dfs.namenode.rpc-address.myhadoop.nn2", "192.168.2.3:8020");
conf.set("dfs.client.failover.proxy.provider.myhadoop",
"org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider");
FileSystem fs = null;
try {
fs = FileSystem.get(conf);
FileStatus[] list = fs.listStatus(new Path("/"));
for (FileStatus file : list) {
System.out.println(file.getPath().getName());
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fs.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

2.Federaion

Federation即为“联邦”,该特性允许一个HDFS集群中存在多个NameNode同时对外提供服务,这些NameNode分管一部分目录(水平切分),彼此之间相互隔离,但共享底层的DataNode存储资源。

一般1000台机器一下的中小规模的hadoop集群,一个namespace/name service就足够了,不需要考虑federation,以免增加不必要的复杂性


参考自:

http://dongxicheng.org/hadoop-hdfs/hdfs-ha-federation-deploy/

http://www.wuzesheng.com/?p=2475

最新文章

  1. [LeetCode] Pow(x, n) 求x的n次方
  2. Thisgood
  3. 利用windbg查找dictionary导致IIS占CPU100%案例分析(一)
  4. php访问全局变量
  5. OK6410移植madplay播放器,王明学learn
  6. 【读书笔记】iOS网络-运行循环
  7. AudioStreamer使用之快速点击下/上一首按钮,音频会重复的问题解决。
  8. 游戏开发设计模式之原型模式 & unity3d JSON的使用(unity3d 示例实现)
  9. cf591B Rebranding
  10. checkbox 实现单选效果(html)
  11. android面试题2
  12. 配置虚拟主机并更改Apache默认解析路径
  13. android中自定义Theme以及TitleBar
  14. Python爬取豆瓣音乐存储MongoDB数据库(Python爬虫实战1)
  15. Java虚拟机监控命令
  16. 我的openwrt开发相关文章
  17. apache反向代解决绝对路径可能出现的问题
  18. 20145331魏澍琛《网络对抗》Exp4 恶意代码分析
  19. JavaOperator小框架制作【精品博客】
  20. Json.Net组件指定/忽略序列化字段属性技巧知识点

热门文章

  1. Memcache+Cookie替代Session解决方案(MVC版)
  2. 20、Semantic-UI之数据验证
  3. C# 同步锁 lock Monitor
  4. centos 6.5下安装mysql
  5. Java50道经典习题-程序1 不死神兔
  6. 2015-9-13 NOIP模拟赛解题报告(by hzwer)
  7. php从文本读入数据,处理结果再导入到文本
  8. [Swift实际操作]八、实用进阶-(4)通过protocol在两个对象中进行消息传递
  9. CentOS 中卸载 RPM 包文件
  10. 关于word转化成xml,图片的转换