hdfs 文件中文编码_HDFS的新特性Federation

作者 | 王sir说运维 1单个Namenode的HDFS架构的局限性
Namespace(命名空间)的限制

由于Namenode在内存中存储所有的元数据(metadata),因此单个Namenode所能存储的对象(文件+块)数目受到Namenode所在JVM的heap size的限制。例如,在NameNode的配置文件中配置JVM 的heap size 的-Xmx为50G的话,大概能够存储20亿(200 million)个对象。

性能的瓶颈

由于是单个Namenode的HDFS架构(这里一定和HA区别开来),因此整个HDFS文件系统的吞吐量受限于单个Namenode的吞吐量,在NameNode很繁忙的时候,打一下管理命令都可能报错。比如:hdfs fsck /  这种耗时较长,需要大量访问NameNode的命令。

隔离问题

如果HDFS仅有一个Namenode,无法隔离各个用户的应用,因此,假如在HDFS上运行的一个未充分测试的程序很有可能影响到(减慢)生产环境HDFS上运行的程序。在HDFS  Federation中,可以用不同的Namespace来隔离不同的用户应用程序,使得不同Namespace Volume中的程序相互不影响。

集群的可用性

在只有一个Namenode的HDFS中,此Namenode的宕机无疑会导致整个集群不可用,当然这里有HA的集群不在这个范围中。

需要注意的,HDFS Federation并不能解决单点故障问题,也就是说,每个NameNode都存在在单点故障问题,你需要为每个namenode部署一个backup namenode以应对NameNode挂掉对业务产生的影响。

2为什么纵向扩展目前的Namenode不可行

比如将Namenode的Heap空间扩大10倍,由原来的50G增大到500GB,这样纵向扩展带来的

第一个问题就是启动问题,启动花费的时间太长。因为,启动的过程中读的fsimage和editlog,当内存设置到500G时,你的fsimage会非常大。

配置50GB Heap size时,Namenode的HDFS启动一次大概需要半个小时,甚至更久,那500GB的需要多久? 这个不是线性的扩大10倍的问题,即使线性扩大10倍,那也不是客户所能接受的。

第二个潜在的问题就是Namenode在Full GC时,如果发生错误将会导致整个集群宕机,Full GC 的时间会变得很长,长的超过集群大部分的超时时间。

第三个问题是对大JVM Heap进行调试比较困难。优化Namenode的内存使用性价比比较低。

3为什么要引入Federation

Federation中文意思为联邦,联盟,是NameNode的Federation,也就是会有多个NameNode。

Federation能够快速的解决了大部分单Namenode HDFS的问题。

Federation  整个核心设计实现大概用了3.5个月。大部分改变是在Datanode、Config和Tools,而Namenode本身的改动非常少,这样Namenode原先的鲁棒性不会受到影响。

Federation良好的向后兼容性,已有的单Namenode的部署配置不需要任何改变就可以继续工作。

4HDFS的Federation机制

HDFS Federation使用了多个独立的Namenode/namespace来使得HDFS的命名服务能够水平扩展。在HDFS  Federation中的Namenode之间是联盟关系,他们之间相互独立且不需要相互协调。HDFS Federation中的Namenode提供了命名空间和块管理功能。HDFS Federation中的datanode被所有的Namenode用作公共存储块的地方。

每一个datanode都会向所在集群中所有的Namenode注册,并且会周期性的发送心跳和块信息报告,同时处理来自Namenode的指令。

41dbe67ac0e66b125ca63f51b5f60094.png

HDFS的两大两大模块得先了解下
Namespace

包括目录、文件和块,它支持所有命名空间相关的文件操作,如创建、删除、修改,查看所有文件和目录。

Block Storage Service(块存储服务)包括两部分

在namenode中的块的管理

  • 提供datanode集群的注册、心跳检测等功能。

  • 处理块的报告信息和维护块的位置信息。

  • 支持块相关的操作,如创建、删除、修改、获取块的位置信息。

  • 管理块的冗余信息、创建副本、删除多余的副本等。

存储:datanode提供本地文件系统上块的存储、读写、访问等。

4Federation HDFS与当前HDFS的比较及改进
架构的变化

单NameNode架构中,HDFS只有一个命名空间(Namespace),它控制管理集群中全部的块。而Federation  HDFS中有多个独立的命名空间(Namespace),并且每一个命名空间使用一个块池(block pool)。

单NameNode架构中,HDFS中只有一组块,而Federation  HDFS中有多组独立的块。块池(block  pool)就是属于同一个命名空间的一组块。

单NameNode架构中,HDFS由一个Namenode和一组datanode组成。而Federation HDFS由多个Namenode和一组datanode,每一个datanode会为多个块池(block pool)存储块。

Namenode

namenode直接相互独立,各自分工管理自己的区域,且不需要互相协调,一个namenode挂掉了不会影响其他的namenode。

Block Pool(块池)

Block pool(块池)就是属于某一个命名空间的一组block(块)。每一个datanode 可以为所有的block pool存储块。Datanode是一个物理概念,而block pool是一个重新将block划分的逻辑概念。

同一个datanode中可以存着属于多个block pool的多个块。Block pool允许一个命名空间在不通知其他命名空间的情况下为一个新的block创建Block ID。

一个Namenode挂掉后不会影响其下的datanode为其他Namenode的服务。当datanode与Namenode建立联系并开始会话后自动建立Block pool。每个block都有一个唯一的标识, 这个标识我们称之为扩展的块ID(Extended Block ID)= BlockID+BlockID。这个扩展的块ID在HDFS集群之间都是唯一的,这为以后集群归并创造了条件。

Datanode中的数据结构都通过块池ID(BlockPoolID)索引,即datanode中的BlockMap,storage等都通过BPID索引。在HDFS中,所有的更新、回滚都是以Namenode和BlockPool为单元发生的。即同一HDFS Federation中不同的Namenode/BlockPool之间没有什么关系。

Datanode的改进

在datanode中,对应于每个Namnode都有相应的线程。每个datanode会去每一个Namenode注册,并且周期性的给所有的Namenode发送心跳及datanode的使用报告。

Datanode还会给Namenode发送其所在的block pool的block report(块报告)。由于有多个Namenode同时存在,因此任何一个Namenode都可以随时动态加入、删除和更新。

多命名空间的管理问题

在一个集群中需要唯一的命名空间还是多个命名空间,核心问题是命名空间中数据的共享和访问的问题。在多命名空间下,可以使用Client Side Mount Table方式做到数据共享和访问,而Client Side Mount Table 则是通过新的文件系统viewfs实现的。后面写一篇文章单独详细展开讲解。

Namespace Volume(命名空间卷)

一个Namespace和它的Block Pool合在一起称作Namespace Volume。Namespace Volume是一个独立完整的管理单元。当一个Namenode/Namespace被删除,与之相对应的Block Pool也也被删除。在升级时每一个Namespace Volume也会整体作为一个单元。

ClusterID

在HDFS  Federation中添加了Cluster  ID用来区分集群中的每个节点。当格式化一个Namenode时,这个ClusterID会自动生成或者手动提供。在格式化同一集群中其他Namenode时会用到这个ClusterID。

HDFS Federation对老版本的HDFS是兼容的

这种兼容性可以使得已有的Namenode配置不需要任何改变继续工作。

平衡的配置有针对blockpool的选项了

Balancer 已经被用来改变集群中多个NameNode的的平衡。可以运行下面的命令:

hdfs start balancer [-policy <policy>]Policy:node -默认的策略。这个会平衡datanode的存储,和先前的版本类似。blockpool - 针对block 池平衡。平衡block池存储也会平衡datanode。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值