====================================================

Hadoop Federation

背景概述

单NameNode的架构使得HDFS在集群扩展性和性能上都有潜在的问题,当集群大到一定程度后,NameNode进程使用的内存可能会达到上百G,NameNode成为了性能的瓶颈。因而提出了namenode水平扩展方案-- Federation。

Federation中文意思为联邦,联盟,是NameNode的Federation,也就是会有多个NameNode。多个NameNode的情况意味着有多个namespace(命名空间),区别于HA模式下的多NameNode,它们是拥有着同一个namespace。既然说到了NameNode的命名空间的概念,这里就看一下现有的HDFS数据管理架构,如下图所示:

从上图中,我们可以很明显地看出现有的HDFS数据管理,数据存储2层分层的结构.也就是说,所有关于存储数据的信息和管理是放在NameNode这边,而真实数据的存储则是在各个DataNode下.而这些隶属于同一个NameNode所管理的数据都是在同一个命名空间下的.而一个namespace对应一个block pool。Block Pool是同一个namespace下的block的集合.当然这是我们最常见的单个namespace的情况,也就是一个NameNode管理集群中所有元数据信息的时候.如果我们遇到了之前提到的NameNode内存使用过高的问题,这时候怎么办?元数据空间依然还是在不断增大,一味调高NameNode的jvm大小绝对不是一个持久的办法.这时候就诞生了HDFS Federation的机制.

Federation架构设计

HDFS Federation是解决namenode内存瓶颈问题的水平横向扩展方案。

Federation意味着在集群中将会有多个namenode/namespace。这些namenode之间是联合的,也就是说,他们之间相互独立且不需要互相协调,各自分工,管理自己的区域。分布式的datanode被用作通用的数据块存储存储设备。每个datanode要向集群中所有的namenode注册,且周期性地向所有namenode发送心跳和块报告,并执行来自所有namenode的命令。

Federation一个典型的例子就是上面提到的NameNode内存过高问题,我们完全可以将上面部分大的文件目录移到另外一个NameNode上做管理.更重要的一点在于,这些NameNode是共享集群中所有的DataNode的,它们还是在同一个集群内的。

这时候在DataNode上就不仅仅存储一个Block Pool下的数据了,而是多个(在DataNode的datadir所在目录里面查看BP-xx.xx.xx.xx打头的目录)。

概括起来:

多个NN共用一个集群里的存储资源,每个NN都可以单独对外提供服务。

每个NN都会定义一个存储池,有单独的id,每个DN都为所有存储池提供存储。

DN会按照存储池id向其对应的NN汇报块信息,同时,DN会向所有NN汇报本地存储可用资源情况。

HDFS Federation不足

HDFS Federation并没有完全解决单点故障问题。虽然namenode/namespace存在多个,但是从单个namenode/namespace看,仍然存在单点故障:如果某个namenode挂掉了,其管理的相应的文件便不可以访问。Federation中每个namenode仍然像之前HDFS上实现一样,配有一个secondary namenode,以便主namenode挂掉一下,用于还原元数据信息。

所以一般集群规模真的很大的时候,会采用HA+Federation的部署方案。也就是每个联合的namenodes都是ha的。


Federation示例配置

这是一个包含两个Namenode的Federation示例配置:

<configuration>

<property>

<name>dfs.nameservices</name>

<value>ns1,ns2</value>

</property>

<property>

<name>dfs.namenode.rpc-address.ns1</name>

<value>nn-host1:rpc-port</value>

</property>

<property>

<name>dfs.namenode.http-address.ns1</name>

<value>nn-host1:http-port</value>

</property>

<property>

<name>dfs.namenode.secondaryhttp-address.ns1</name>

<value>snn-host1:http-port</value>

</property>

<property>

<name>dfs.namenode.rpc-address.ns2</name>

<value>nn-host2:rpc-port</value>

</property>

<property>

<name>dfs.namenode.http-address.ns2</name>

<value>nn-host2:http-port</value>

</property>

<property>

<name>dfs.namenode.secondaryhttp-address.ns2</name>

<value>snn-host2:http-port</value>

</property>

.... Other common configuration ...

</configuration>

最新文章

  1. TFS二次开发系列:四、TFS二次开发WorkItem添加和修改、保存
  2. TestLink学习三:发送邮件的两种配置方法
  3. 字符串复制char *strcpy(char* dest, const char *src);
  4. springmvc前后端传值
  5. Navicate DataModel 注册码
  6. js 中的流程控制-循环(for)语句
  7. 解压和生成 system.img&amp;data.img ( ext4格式)
  8. [改变自己wordpress.2]给wordpress加上简单debug sql调试.
  9. OpenStack(企业私有云)万里长征第二步——使用Fuel部署
  10. Flask 学习 五 电子邮件
  11. odoo按钮触发下载文件
  12. 全面掌握Node命令选项
  13. 2018-08-22 为中文API的简繁转换库添加迟到的持续集成
  14. C#梳理【集合Collection】
  15. Dinner
  16. Linux压力测试软件Stress安装及使用
  17. tomcat8_java1.8 基础镜像
  18. JAVA-JSP内置对象
  19. ElasticSearch—分页查询
  20. OpenTLD在VS2012和opencv246编译通过

热门文章

  1. ssh pubkey免密登陆远程主机
  2. leetCode练题——14. Longest Common Prefix
  3. php 高级 多台web服务器共享session的方法
  4. Python 之并发编程之线程中
  5. VB.NET中Sub和Function的区别
  6. Vacuum Pump Manufacturer - Vacuum Pump Range Use: Considerations
  7. 装有Ubuntu的硬盘插入到电脑中无法进入
  8. DNS域名解析,内网
  9. windows系统下hosts文件的改写(为了测试nginx内网的证书代理,需要做域名解析)
  10. jquery $.ajax status为200 却调用了error方法