2023/11/6

Block Caching

DataNode通常直接从磁盘读取数据,但是频繁使用的Block可以在内存中缓存。默认情况下,一个Block只有一个数据节点会缓存。但是可以针对每个文件可以个性化配置。

作业调度器可以利用缓存提升性能,例如MapReduce可以把任务运行在有Block缓存的节点上。 用户或者应用可以向NameNode发送缓存指令(缓存哪个文件,缓存多久),缓存池的概念用于管理一组缓存的权限和资源。

HDFS Federation

HDFS Federation提供了一种横向扩展NameNode的方式。在Federation模式中,每个NameNode管理命名空间的一部分,例如一个NameNode管理/user目录下的文件,另一个NameNode管理/share目录下的文件。

每个NameNode管理一个namespace volumn,所有volumn构成文件系统的元数据。每个NameNode同时维护一个Block Pool,保存Block的节点映射等信息。各NameNode之间是独立的,一个节点的失败不会导致其他节点管理的文件不可以。

客户端使用mount table将文件路径映射到NameNode。mount table 是在NameNode群组之上封装了一层,这一层也是一个Hadoop文件系统的实现,通过viewfs:协议访问。

HDFS HA(High Availability 高可用性)

启动新的NameNode之后,需要重新配置客户端和DataNode的NameNode信息。

重启耗时的原因大致有:

  • 元数据镜像文件载入到内存耗时较长

  • 需要重放edit log

  • 需要收到来自DataNode的状态报告并且满足条件后才能离开安全模式提供写服务。

Hadoop的HA方案

采用HA的HDFS集群配置两个NameNode,分别处于Active和Standby状态。切换过程一般持续几十秒到数分钟。

HA设计到的主要实行逻辑有

  • 主备需要共享edit log存储 主NameNode和待命的NameNode共享一份edit log,当主备切换时,Standby通过回放edit log同步数据。

  • DataNode需要同时往主备发送Block Report 因为Block映射数据存储在内存中(不是磁盘上),为了在Active挂掉后能够快速启动,DataNode需要同时向主备两个NameNode发送Block Report。

  • 客户端徐亚配置failover模式(失效备援模式,对用户透明) 客户端在配置文件中使用的HDFS URI是逻辑路径,映射到一对NameNode地址。客户端会不断尝试每一个NameNode地址直到成功。

  • Standby替代Secondary NameNode

NameNode的切换通过代failover controller来实现。failover controller默认使用Zookeeper来保证只有一个NameNode处于Active状态。

命令行接口

命令行的交互只要通过Hadoop fs来操作。

文件权限是否开启通过dfs.permissions.enabled属性来控制,这个属性默认为false

 
posted @ 2023-11-06 21:56  啦啦啦one  阅读(18)  评论(0编辑  收藏  举报