HDFS角色职责超详细概述Namenode、Datanode、元数据管理+fsimage 内存镜像文件+ Edits log编辑日志

HDFS角色职责超详细概述Namenode、Datanode、元数据管理

1、Namenode职责

a、 NameNode是HDFS的核心,集群的主角色,被称为Master。

b、 NameNode仅存储管理HDFS的元数据:文件系统namespace操作维护目录树,文件和块的位置信息。

c、 NameNode不存储实际数据或数据集。数据本身实际存储在DataNodes中。

d、 NameNode知道HDFS中任何给定文件的块列表及其位置。使用此信息NameNode知道如何从块中构建文件。

e、 NameNode并不持久化存储每个文件中各个块所在的DataNode的位置信息,这些信息会在系统启动时从DataNode汇报中重建。

f、 NameNode对于HDFS至关重要,当NameNode关闭时,HDFS / Hadoop集群无法访问。

g、 NameNode是Hadoop集群中的单点故障。

h、 NameNode所在机器通常会配置有大量内存(RAM)。

2、 Datanode职责

a、 DataNode负责将实际数据存储在HDFS中。是集群的从角色,被称为Slave。

b、 DataNode启动时,它将自己发布到NameNode并汇报自己负责持有的块列表。

c、 根据NameNode的指令,执行块的创建、复制、删除操作。

d、 DataNode会定期(dfs.heartbeat.interval配置项配置,默认是3秒)向NameNode发送心跳,如果NameNode长时间没有接受到DataNode发送的心跳, NameNode就会认为该DataNode失效。

e、 DataNode会定期向NameNode进行自己持有的数据块信息汇报,汇报时间间隔取参数dfs.blockreport.intervalMsec,参数未配置的话默认为6小时.

f、 DataNode所在机器通常配置有大量的硬盘空间。因为实际数据存储在DataNode中。

3、 Namenode 元数据管理

3.1 元数据是什么

元数据(Metadata),又称中介数据,为描述数据的数据(data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。

在HDFS中,元数据主要指的是文件相关的元数据,由NameNode管理维护。从广义的角度来说,因为NameNode还需要管理众多DataNode节点,因此DataNode的位置和健康状态信息也属于元数据。

3.2 元数据管理概述

在HDFS中,文件相关元数据具有两种类型:

  • Ø 文件自身属性信息

    文件名称、权限,修改时间,文件大小,复制因子,数据块大小。

  • Ø 文件块位置映射信息

    记录文件块和DataNode之间的映射信息,即哪个块位于哪个节点上。

    按存储形式分为内存元数据和元数据文件两种,分别存在内存和磁盘上。

3.2.1 内存元数据

为了保证用户操作元数据交互高效,延迟低,NameNode把所有的元数据都存储在内存中,我们叫做内存元数据。内存中的元数据是最完整的,包括文件自身属性信息、文件块位置映射信息。

但是内存的致命问题是,断点数据丢失,数据不会持久化。因此NameNode又辅佐了元数据文件来保证元数据的安全完整。

3.2.2 磁盘元数据文件

2.2.2.1 fsimage 内存镜像文件

是内存元数据的一个持久化的检查点。但是fsimage中仅包含Hadoop文件系统中文件自身属性相关的元数据信息,但不包含文件块位置的信息。文件块位置信息只存储在内存中,时由datanode启动加入集群的时候,向namenode进行数据块的汇报得到的,并且后续间断指定时间进行数据块报告。

持久化的动作是一种数据从内存到磁盘的IO过程。会对namenode正常服务造成一定的影响,不能频繁的进行持久化。

2.2.2.2 Edits log编辑日志

为了避免两次持久化之间数据丢失的问题,又设计了Edits log编辑日志文件。文件中记录的是HDFS所有更改操作(文件创建,删除或修改)的日志,文件系统客户端执行的更改操作首先会被记录到edits文件中。

3.2.3 加载元数据顺序

fsimage和edits文件都是经过序列化的,在NameNode启动的时候,它会将fsimage文件中的内容加载到内存中,之后再执行edits文件中的各项操作,使得内存中的元数据和实际的同步,存在内存中的元数据支持客户端的读操作,也是最完整的元数据。

当客户端对HDFS中的文件进行新增或者修改操作,操作记录首先被记入edits日志文件中,当客户端操作成功后,相应的元数据会更新到内存元数据中。因为fsimage文件一般都很大(GB级别的很常见),如果所有的更新操作都往fsimage文件中添加,这样会导致系统运行的十分缓慢。

HDFS这种设计实现着手于:一是内存中数据更新、查询快,极大缩短了操作响应时间;二是内存中元数据丢失风险颇高(断电等),因此辅佐元数据镜像文件(fsimage)+编辑日志文件(edits)的备份机制进行确保元数据的安全。

NameNode维护整个文件系统元数据。因此,元数据的准确管理,影响着HDFS提供文件存储服务的能力。

上一篇:cube.js 官方关于cube store 的一些实践说明


下一篇:phpMyadmin日志写入webshell