开发者社区> 问答> 正文

高可用HDFS集群的NameNode作用是什么?

高可用HDFS集群的NameNode作用是什么?

展开
收起
追风少年刘全有 2021-10-22 16:22:40 758 0
来自:华章出版社
1 条回答
写回答
取消 提交回答
  • 线上需要部署2个NameNode:一个节点是Active状态并对外提供服务;另一个节点是StandBy状态,作为Active的备份,备份状态下不提供对外服务,也就是说HDFS客户端无法通过请求StandBy状态的NameNode来实现修改文件元数据的目的。如果ZkFailoverController服务检测到Active状态的节点发生异常,会自动把StandBy状态的NameNode服务切换成Active的NameNode。

    NameNode存储并管理HDFS的文件元数据,这些元数据主要包括文件属性(文件大小、文件拥有者、组以及各个用户的文件访问权限等)以及文件的多个数据块分布在哪些存储节点上。需要注意的是,文件元数据是在不断更新的,例如HBase对HLog文件持续写入导致文件的Block数量不断增长,管理员修改了某些文件的访问权限,HBase把一个HFile从/hbase/data目录移到/hbase/archive目录。所有这些操作都会导致文件元数据的变更。因此NameNode本质上是一个独立的维护所有文件元数据的高可用KV数据库系统。为了保证每一次文件元数据都不丢失,NameNode采用写EditLog和FsImage的方式来保证元数据的高效持久化。每一次文件元数据的写入,都是先做一次EditLog的顺序写,然后再修改NameNode的内存状态。同时NameNode会有一个内部线程,周期性地把内存状态导出到本地磁盘持久化成FsImage(假设导出FsImage的时间点为t),那么对于小于时间点t的EditLog都认为是过期状态,是可以清理的,这个过程叫做推进checkpoint。

    NameNode会把所有文件的元数据全部维护在内存中。因此,如果在HDFS中存放大量的小文件,则造成分配大量的Block,这样可能耗尽NameNode所有内存而导致OOM。因此,HDFS并不适合存储大量的小文件。当然,后续的HDFS版本支持NameNode对元数据分片,解决了NameNode的扩展性问题。

    资料来源:《HBase原理与实践》,文章链接:https://developer.aliyun.com/article/724670

    2021-10-22 16:35:32
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
+ 订阅
问答排行榜
最热
最新

相关电子书

更多
海量数据分布式存储——Apache HDFS之最新进展 立即下载
HBase 高可用HA 立即下载
HBase 应用与高可用实践 立即下载