- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
HDFS文件系统体系架构和数据读写流程详解
来源:八斗学院
一、 HDFS体系架构
1. HDFS是一个主 / 从( Master/Slave)体系架构,由于分布式存储的性
质,集群拥有两类节点 NameNode 和 DataNode。
2. NameNode (名字节点):系统中通常只有一个, 中心服务器的角色,
管理存储和检索多个 DataNode 的实际数据所需的所有元数据。
3. DataNode (数据节点):系统中通常有多个,是文件系统中真正存
储数据的地方,在 NameNode 统一调度下进行数据块的创建、删除和复
制。
4. 图中的 Client 是 HDFS的客户端,是应用程序可通过该模块与
NameNode 和 DataNode 进行交互,进行文件的读写操作。
二、 HDFS数据块复制
为了系统容错,文件系统会对所有数据块进行副本复制多份, Hadoop 是默
认 3 副本管理。
复本管理策略是运行客户端的节点上放一个复本 (若客户端运行在集群之外,
会随机选择一个节点) ,第二个复本会放在与第一个不同且随机另外选择的机架
中节点上, 第三个复本与第二个复本放在相同机架, 切随机选择另一个节点。 所
存在其他复本, 则放在集群中随机选择的节点上, 不过系统会尽量避免在相同机
架上放太多复本。
所有有关块复制的决策统一由 NameNode 负责,NameNode 会周期性地接受
集群中数据节点 DataNode 的心跳和块报告。一个心跳的到达表示这个数据节点
是正常的。一个块报告包括该数据节点上所有块的列表。
三、 HDFS读取和写入流程
1. 读文件的过程:
首先 Client 通过 File System的 Open 函数打开文件,Distributed File System用
RPC调用 NameNode 节点,得到文件的数据块信息。对于每一个数据块,
NameNode 节点返回保存数据块的数据节点的地址。 Distributed File System返回
FSDataInputStream给客户端,用来读取数据。客户端调用 stream 的 read()函数
开始读取数据。 DFSInputStream连接保存此文件第一个数据块的最近的数据节点。
DataNode 从数据节点读到客户端 (client) ,当此数据块读取完毕时,
DFSInputStream关闭和此数据节点的连接, 然后连接此文件下一个数据块的最近
的数据节点。当客户端读取完毕数据的时候,调用 FSDataInputStream的 close
函数。
在读取数据的过程中,如果客户端在与数据节点通信出现错误,则尝试连接
包含此数据块的下一个数据节点。失败的数据节点将被记录,以后不再连接。
2. 写文件的过程:
客户 端调 用 create()来 创建 文件, Distributed File System 用 RPC 调 用
NameNode 节点,在文件系统的命名空间中创建一个新的文件。 NameNode 节点
首先确定文件原来不存在,并且客户端有创建文件的权限,然后创建新文件。
Distributed File System返回 DFSOutputStream,客户端用于写数据。 客户端开
始写入数据, DFSOutputStream将数据分成块,写入 Data Queue。Data Queue 由
Data Streamer读取,并通知 NameNode 节点分配数据节点,用来存储数据块
原创力文档


文档评论(0)