您的位置:首页 > 大数据 > Hadoop

HDFS中的关键概念(一)

2016-07-05 23:26 309 查看

简介

HDFS是作为hadoop的文件系统组件,是一个高度容错性的系统。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。HDFS在最开始是作为Apache
Nutch搜索引擎项目的基础架构而开发的。HDFS是Apache Hadoop Core项目的一部分。

数据块(block

HDFS中的文件被分割成几个block,每个block分别存储在多个DataNode,一般一个block的默认大小为128MB,用户也可根据自己的需求自定义。

元数据结点(NameNode)

NameNode存储系统元数据。NameNode中inode记录了文件和目录属性,包括权限,修改时间和访问时间,namespace和分配的磁盘空间。元数据结点维护了一个namespace树和block到DataNode(文件数据的物理位置)之间的映射。

数据结点(DataNode)

DataNode主要存储应用数据。为了可靠性和永久性,文件被分割成几个block,每个block副本存储在多个(默认为3个)DataNode。当终端访问数据时,会选取离自己最近的DataNode。在DataNode上的block副本由两个文件来表示,分别存储数据本身和block的元数据(包括对块数据的校验和,block生成时间戳)。数据文件的大小与所占用的数据块大小一致,不需要额外空间考虑对齐问题。
在启动过程中,每一个数据结点会和数据结点握手,其目的是验证namespace ID和数据结点的软件版本。如果不匹配,则数据结点关闭。

当格式化的时候,就为文件系统指定了namespace ID,
并永久存储在集群的所有结点中。结点的namespace ID
和集群的不同,则不能加入到此集群中,由此,保证了文件系统的完整性。

检查软件版本防止不兼容的版本造成的数据崩溃或丢失。

在握手结束后,数据结点注册在元数据结点,并永久存储它的storage ID。(一个刚初始化的没有分配namespace
ID的数据结点可以加入集群并接受集群的namecpace ID。)
数据结点通过发送block report
到元数据结点,告知元数据结点它所存储的block副本。一旦注册完成,第一份block
report就发送到元数据结点, 然后,后续的报告每隔一小时发送一次,元数据结点就可根据报告定位block副本的位置。
同时,数据结点会每隔3秒(用户可根据情况自定义间隔时间,
如果集群规模比较小,间隔可设置得比较短,利于充分利用集群服务器,而规模比较大时,间隔时间可设置得比较长,从而降低网络负载,同事由于规模比较大,当NameNode认为DataNode失效时,有充分的资源可供选择。)发送一个heartbeats到元数据结点,保证元数据结点确信数据结点是可用的。如果超过10分钟,元数据结点没有收到数据结点的heatbeats,则元数据结点认为此数据结点服务中断,元数据结点将创建新的文件副本到其他数据结点。元数据结点并不直接给数据结点发送信息。它通过回复heartbeats给数据结点发送指令。这些指令包括:

复制block到其他的数据结点;

删除本地block副本;

重新注册或者关闭数据结;

立即发送一个block report。

HDFS客户端元数据结点数据结点之间的交互如图。




总结

简单介绍了HDFS的数据块,元数据结点,数据结点,以及HDFS客户端如何通过元数据结点,数据结点访问文件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: