写点什么

从 HDFS 的写入和读取中,我发现了点东西

  • 2022 年 3 月 25 日
  • 本文字数:1395 字

    阅读完需:约 5 分钟

本文分享自华为云社区《从HDFS的写入和读取中,我们能学习到什么》,作者: breakDawn 。


最近开发过程涉及了一些和文件读取有关的问题,于是对 hdfs 的读取机制感到兴趣,顺便深入学习了 1 下。

写入

  1. 客户端向 NameNode 发出写文件请求,告诉需要写的文件名和路径、用户

  2. NameNode 检查是否已存在文件、检查权限。如果通过,会返回一个输出流对象

  • 注意此时会按照“日志先行“原则,写入 NameNode 的 editLog

  1. 客户端按照 128MB 的大小切分文件。 也就是 block 大小

  2. 客户端把 nameNode 传来的 DataNode 列表和 Data 数据一同发送给 最近的第一个 DataNode 节点

  3. 第一个 dataNode 节点收到数据和 DataNode 列表时, 会先根据列表,找到下一个自己要连接的最近 DataNode, 删除自己后,再一样往下发。以此类推,发完 3 台或者 N 台。

  • 传输单位是 packet,包,比 block 小一点。

  1. dataNode 每写完一个 block 块, 则返回 ACK 信息给上一个节点进行确认。(注意是写完 block 才确认)

  2. 写完数据, 关闭输出流, 发送完成信息给 DataNode


写过程的核心总结:

  • 客户端只向一个 dataNode 写数据,然后下一个 dataNode 接着往另一个 dataNode 写,串联起来。

  • 按 128MB 分 block。 每次传数据按 pack 传。 校验按照 chunk 校验,每次 chunk 都会写入 pack。

  • 写完 block 才发 ACK 确认。


Q: NameNode 的 editlog 有什么用?怎么起作用的?

A:作用:

  • 硬盘中需要有一份元数据的镜像——FSImage

  • 每次要修改元数据就信息时,必须得改文件(hdfs 没有数据库)

  • 可能会比较久,改的时候如果断电了,就丢失这个操作了

为了避免丢失,引入 editlog,每次修改元数据前,先追加方式写入 editlog, 然后再处理,这样即使断电了也能修复。

一般都是那些更改操作有断开风险,为了确保能恢复,都会引入这类操作。


Q: 什么时候发送完成信号? 全部节点都写入完成吗?

A:发送完成信号的时机取决于集群是强一致性还是最终一致性,强一致性则需要所有 DataNode 写完后才向 NameNode 汇报。最终一致性则其中任意一个 DataNode 写完后就能单独向 NameNode 汇报,HDFS 一般情况下都是强调强一致性


Q: 怎么验证写入时的数据完整性?

A:

  • 因为每个 chunk 中都有一个校验位,一个个 chunk 构成 packet,一个个 packet 最终形成 block,故可在 block 上求校验和。

  • 当客户端创建一个新的 HDFS 文件时候,分块后会计算这个文件每个数据块的校验和,此校验和会以一个隐藏文件形式保存在同一个 HDFS 命名空间下。就是.meta 文件


  • 当 client 端从 HDFS 中读取文件内容后,它会检查分块时候计算出的校验和(隐藏文件里)和读取到的文件块中校验和是否匹配,如果不匹配,客户端可以选择从其他 Datanode 获取该数据块的副本。


Q: 写入时怎么确定最近节点?

A:按照按照 hadoop 时设置的机架、数据中心、节点来估算

假设有数据中心 d1 机架 r1 中的节点 n1。该节点可以表示为/d1/r1/n1。利用这种标记,这里给出四种距离描述。

  • Distance(/d1/r1/n1, /d1/r1/n1)=0(同一节点上的进程)

  • Distance(/d1/r1/n1, /d1/r1/n2)=2(同一机架上的不同节点)

  • Distance(/d1/r1/n1, /d1/r3/n2)=4(同一数据中心不同机架上的节点)

  • Distance(/d1/r1/n1, /d2/r4/n2)=6(不同数据中心的节点)

读取

读取就比较简单了,没有那种复杂的串行过程。NameNode 直接告诉客户端去哪读就行了。

  1. client 访问 NameNode,查询元数据信息,获得这个文件的数据块位置列表,返回输入流对象。

  2. 就近挑选一台 datanode 服务器,请求建立输入流 。

  3. DataNode 向输入流中中写数据,以 packet 为单位来校验。

  4. 关闭输入


点击关注,第一时间了解华为云新鲜技术~​

发布于: 刚刚阅读数: 2
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
从HDFS的写入和读取中,我发现了点东西_hdfs_华为云开发者社区_InfoQ写作平台