频道栏目
首页 > 数据库 > 其他综合 > 正文
Hadoop分布式文件系统HDFS的工作原理详述
2015-07-16 10:29:44         来源:周兆熊的专栏  
收藏   我要投稿

Hadoop分布式文件系统(HDFS)是一种被设计成适合运行在通用硬件上的分布式文件系统。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。它能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。要理解HDFS的内部工作原理,首先要理解什么是分布式文件系统。

1.分布式文件系统
多台计算机联网协同工作(有时也称为一个集群)就像单台系统一样解决某种问题,这样的系统我们称之为分布式系统。
分布式文件系统是分布式系统的一个子集,它们解决的问题就是数据存储。换句话说,它们是横跨在多台计算机上的存储系统。存储在分布式文件系统上的数据自动分布在不同的节点上。
分布式文件系统在大数据时代有着广泛的应用前景,它们为存储和处理来自网络和其它地方的超大规模数据提供所需的扩展能力。

2.分离元数据和数据:NameNode和DataNode
存储到文件系统中的每个文件都有相关联的元数据。元数据包括了文件名、i节点(inode)数、数据块位置等,而数据则是文件的实际内容。
在传统的文件系统里,因为文件系统不会跨越多台机器,元数据和数据存储在同一台机器上。
为了构建一个分布式文件系统,让客户端在这种系统中使用简单,并且不需要知道其他客户端的活动,那么元数据需要在客户端以外维护。HDFS的设计理念是拿出一台或多台机器来保存元数据,并让剩下的机器来保存文件的内容。
NameNode和DataNode是HDFS的两个主要组件。其中,元数据存储在NameNode上,而数据存储在DataNode的集群上。NameNode不仅要管理存储在HDFS上内容的元数据,而且要记录一些事情,比如哪些节点是集群的一部分,某个文件有几份副本等。它还要决定当集群的节点宕机或者数据副本丢失的时候系统需要做什么。
存储在HDFS上的每份数据片有多份副本(replica)保存在不同的服务器上。在本质上,NameNode是HDFS的Master(主服务器),DataNode是Slave(从服务器)。

3.HDFS写过程
NameNode负责管理存储在HDFS上所有文件的元数据,它会确认客户端的请求,并记录下文件的名字和存储这个文件的DataNode集合。它把该信息存储在内存中的文件分配表里。
例如,客户端发送一个请求给NameNode,说它要将“zhou.log”文件写入到HDFS。那么,其执行流程如图1所示。具体为:
第一步:客户端发消息给NameNode,说要将“zhou.log”文件写入。(如图1中的①)
第二步:NameNode发消息给客户端,叫客户端写到DataNode A、B和D,并直接联系DataNode B。(如图1中的②)
第三步:客户端发消息给DataNode B,叫它保存一份“zhou.log”文件,并且发送一份副本给DataNode A和DataNode D。(如图1中的③)
第四步:DataNode B发消息给DataNode A,叫它保存一份“zhou.log”文件,并且发送一份副本给DataNode D。(如图1中的④)
第五步:DataNode A发消息给DataNode D,叫它保存一份“zhou.log”文件。(如图1中的⑤)
第六步:DataNode D发确认消息给DataNode A。(如图1中的⑤)
第七步:DataNode A发确认消息给DataNode B。(如图1中的④)
第八步:DataNode B发确认消息给客户端,表示写入完成。(如图1中的⑥)
这里写图片描述vc7EvP7Ptc2ztcTJ6LzG1tCjrMz01b3WrtK7ysfI57rOyLexo8r9vt21xNK71sLQ1KGjttTT2khERlPAtMu1o6zWsbW9y/nT0NKqsaO05sr9vt21xERhdGFOb2Rlc8i3yM/L/MPHtrzT0M7EvP61xLixsb7KsaOsyv2+3bLFsbvIz86q0LTI683qs8mho9LytMujrMr9vt3Su9bC0NTKx9Ta0LS1xL3Xts7N6rPJtcSho9K7uPa/zbuntsvO3sLb0aHU8bTTxMS49kRhdGFOb2RltsHIoaOstry9q7XDtb3P4M2stcTK/b7doaM8L3A+DQo8cD48c3Ryb25nPjQuSERGU7bBuf2zzDwvc3Ryb25nPjxiciAvPg0KzqrBy8DtveK2wbXEuf2zzKOsv8nS1MjPzqrSu7j2zsS8/srH08m05rSi1NpEYXRhTm9kZcnPtcTK/b7dv+nX6bPJtcSho7/Nu6e2y7Lpv7TWrsew0LTI67XExNrI3bXE1rTQ0MH3s8zI5828Msv5yr6jrL7fzOWyvdbozqqjujxiciAvPg0KtdrSu7K9o7q/zbuntsvRr87KTmFtZU5vZGXL/NOmuMO008TEwO+2wcihzsS8/qGjKMjnzbwy1tC1xKLZKTxiciAvPg0Ktdq2/rK9o7pOYW1lTm9kZbeiy83K/b7dv+m1xNDFz6K4+L/Nu6e2y6GjKMr9vt2/6dDFz6Kw/Lqswcuxo7Tm18XOxLz+uLGxvrXERGF0YU5vZGW1xElQtdjWt6Os0tS8sERhdGFOb2Rl1NqxvrXY07LFzLLp1dLK/b7dv+nL+dDo0qq1xMr9vt2/6UlEoaMpICjI5828MtbQtcSi2ik8YnIgLz4NCrXayP2yvaO6v827p7bLvOyy6cr9vt2/6dDFz6KjrMGqz7XP4LnYtcREYXRhTm9kZaOsx+vH88r9vt2/6aGjKMjnzbwy1tC1xKLbKTxiciAvPg0KtdrLxLK9o7pEYXRhTm9kZbe1u9jOxLz+xNrI3bj4v827p7bLo6zIu7rzudix1cGsvdOjrM3qs8m2wbLZ1/ehoyjI5828MtbQtcSi3Ck8YnIgLz4NCjxpbWcgYWx0PQ=="这里写图片描述" src="/uploadfile/Collfiles/20150716/2015071610201692.jpg" title="" />
图2 HDFS读过程示意图
客户端并行从不同的DataNode中获取一个文件的数据块,然后联结这些数据块,拼成完整的文件。

5.通过副本快速恢复硬件故障
当一切运行正常时,DataNode会周期性发送心跳信息给NameNode(默认是每3秒钟一次)。如果NameNode在预定的时间内没有收到心跳信息(默认是10分钟),它会认为DataNode出问题了,把它从集群中移除,并且启动一个进程去恢复数据。DataNode可能因为多种原因脱离集群,如硬件故障、主板故障、电源老化和网络故障等。
对于HDFS来说,丢失一个DataNode意味着丢失了存储在它的硬盘上的数据块的副本。假如在任意时间总有超过一个副本存在(默认3个),故障将不会导致数据丢失。当一个硬盘故障时,HDFS会检测到存储在该硬盘的数据块的副本数量低于要求,然后主动创建需要的副本,以达到满副本数状态。

6.跨多个DataNode切分文件
在HDFS里,文件被切分成数据块,通常每个数据块64MB~128MB,然后每个数据块被写入文件系统。同一个文件的不同数据块不一定保存在相同的DataNode上。这样做的好处是,当对这些文件执行运算时,能够通过并行方式读取和处理文件的不同部分。
当客户端准备写文件到HDFS并询问NameNode应该把文件写到哪里时,NameNode会告诉客户端,那些可以写入数据块的DataNode。写完一批数据块后,客户端会回到NameNode获取新的DataNode列表,把下一批数据块写到新列表中的DataNode上。

点击复制链接 与好友分享!回本站首页
上一篇:偶遇smon进程cpu开销高异常分析
下一篇:远程桌面授权服务器没有提供许可证问题解决方法
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站