hdfs资料整理.pdfVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一、HDFS读文件解析 下图描述了在文件读过程中,client、NameNode 和 DataNode 三者之间是如何互动的。 1. client 调用 get 方法得到 HDFS 文件系统的一个实例(FileSystem )。然后调用它的open 方法。 2. FileSystem 通过 RPC 远程调用 NameNode 决定文件文件的 block 的位置信息。对于每一个 bolck , NameNode 返回 block 所在的 DataNode (包括副本)的地址。FileSystem 返回 FSDataInputStream 给 client 用来读 数据。FSDataInputStream 封装了 DFSInputStream 用于管理 NameNode 和 DataNode 的IO 。 3. client 调用 FSDataInputStream 的read 方法。 4. DFSInputStream 保存了 block 块所在的 DataNode 的地址信息。DFSInputStream 连接第一个 block 的 DataNode ,read block 数据,传回给 client 。 5. 当第一个block 读完,DFSInputStream 关掉与这个 DataNode 的连接。然后开始第二个block 。 6. 当 client 读结束,调用 FSDataInputStream 的close 方法。 在读的过程中,如果 client 和一个 datanode 通讯时出错,他会连接副本所在的 datanode 。这种 client 直接连 接 datanode 读取数据的设计方法使 HDFS 可以同时相应很多 client 的同时并发。因为数据流量均匀的分布在所有 的datanode 上,NameNode 只负责 block 的位置信息请求。 Linux公社(LinuxIDC.com) 是包括Ubuntu,Fedora,SUSE技术,必威体育精装版IT资讯等Linux专业类网站。 二、HDFS写文件解析 我们看一下创建文件,写文件最后关闭文件的流程。如下图: 1. client 通过调用 FileSystem 的create 方法来创建文件。 2. FileSystem 通过 RPC 调用 NameNode 在文 件系统的名字空间里创建一个文件,这个时候还没有任何 block 信息。FileSystem 返回 FSDataOutputStream 给 client 。FSDataOutputStream 封装了一个 DFSOutputStream 来 处理与 datanodes 和 namenode 之间的通讯。 3. 当 client 写一个 block 数据的时候,DFSOutputStream 把数据分成很多 packet 。FSDataOutputStream 询问 namenode 挑选存储这个 block 以及它的副本的 datanode 列表。这个 datanode 列表组成了一个管道,在上图管道 由三个datanode 组成(备份参数是 3 ),这三个 datanode 的选择有一定的副本放置策略,详细请看下一篇。 4. FSDataOutputStream 把 packet 写进管道的第一个 datanode,然后管道把packet 转发给第二个 datanode, 这样一直转发到最后一个 datanode 。 5. 只有当管道里所有 datanode 都返回写入成功,这个 packet 才算写成功,发送应答给 FSDataOutputStream 。 开始下一个 packet 。 如果某个 datanode 写失败了,会产生如下步骤,但是这些对 client 是透明的。 1) 管道关闭。 2) 正常的 datanode 上正在写的 block 会有一个新 ID (需要和namenode 通信)。这样失败的 datanode 上的 那个不完整的 block 在上报心跳的时候会被删掉。 3) 失败的 datanode 会被移出管道。block 中剩余的packet 继续写入管道的其他两个 datanode 4) namenode 会标记这个 block 的副本个数少于指定值。block 的副本会稍后在另一个

文档评论(0)

仙人指路 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档