专栏首页行者悟空Hadoop之HDFS源码分析

Hadoop之HDFS源码分析

HDFS的读取数据过程

  1. 初始化FileSystem,然后客户端(client)用FileSystem的open()函数打开文件
  2. FileSystem用RPC调用元数据节点,得到文件的数据块信息,对于每一个数据块,元数据节点返回保存数据块的数据节点的地址。
  3. FileSystem返回FSDataInputStream给客户端,用来读取数据,客户端调用stream的read()函数开始读取数据。
  4. DFSInputStream连接保存此文件第一个数据块的最近的数据节点,data从数据节点读到客户端(client)
  5. 当此数据块读取完毕时,DFSInputStream关闭和此数据节点的连接,然后连接此文件下一个数据块的最近的数据节点。
  6. 当客户端读取完毕数据的时候,调用FSDataInputStream的close函数。
  7. 在读取数据的过程中,如果客户端在与数据节点通信出现错误,则尝试连接包含此数据块的下一个数据节点。
  8. 失败的数据节点将被记录,以后不再连接。

HDFS的写入数据过程

  1. 初始化FileSystem,客户端调用create()来创建文件
  2. FileSystem用RPC调用元数据节点,在文件系统的命名空间中创建一个新的文件,元数据节点首先确定文件原来不存在,并且客户端有创建文件的权限,然后创建新文件。
  3. FileSystem返回DFSOutputStream,客户端用于写数据,客户端开始写入数据。
  4. DFSOutputStream将数据分成块,写入data queue。data queue由Data Streamer读取,并通知元数据节点分配数据节点,用来存储数据块(每块默认复制3块)。分配的数据节点放在一个pipeline里。Data Streamer将数据块写入pipeline中的第一个数据节点。第一个数据节点将数据块发送给第二个数据节点。第二个数据节点将数据发送给第三个数据节点。
  5. DFSOutputStream为发出去的数据块保存了ack queue,等待pipeline中的数据节点告知数据已经写入成功。
  6. 当客户端结束写入数据,则调用stream的close函数。此操作将所有的数据块写入pipeline中的数据节点,并等待ack queue返回成功。最后通知元数据节点写入完毕。
  7. 如果数据节点在写入的过程中失败,关闭pipeline,将ack queue中的数据块放入data queue的开始,当前的数据块在已经写入的数据节点中被元数据节点赋予新的标示,则错误节点重启后能够察觉其数据块是过时的,会被删除。失败的数据节点从pipeline中移除,另外的数据块则写入pipeline中的另外两个数据节点。元数据节点则被通知此数据块是复制块数不足,将来会再创建第三份备份。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 基于Scala Acotor实现多线程单词统计(WordCount)

    天策
  • Apache Hive 安装详解及相关问题解决方案

    天策
  • Spark DAG调度

    天策
  • 【技术】HDFS存储原理

    根据Maneesh Varshney的漫画改编,以简洁易懂的漫画形式讲解HDFS存储机制与运行原理,非常适合Hadoop/HDFS初学者理解。 一、角色出演 ...

    小莹莹
  • 数据科学通识第八讲:数据可视化

    下面这四组数据是由统计学家Francis Anscombe在1973年精心构建的。大家直观地看这四组数据,能否看出什么规律呢?

    数据酷客
  • 系统的高可用(纯理论)

    专注服务端首先要专注的是关于高可用。 有的时候高可用系统并不是简单的技术方案,会包含很多其他的东西。 什么是高可用? 基本来讲是为了让我们的计算机(硬件/软件...

    春哥大魔王
  • 美图大数据平台架构实践

    如今大数据在各行业的应用越来越广泛:运营基于数据关注运营效果,产品基于数据分析关注转化率情况,开发基于数据衡量系统优化效果等。美图公司有美拍、美图秀秀、美颜相机...

    美图数据技术团队
  • redis数据分布

    我们知道redis官方说他是可以支持10万/每秒的并发量,但是如果我们的业务场景需要100万/每秒呢?

    小土豆Yuki
  • 【钱塘号】深度分析大数据在工业4.0智能工厂中的应用

    随着近些年国家工业信息化进程脚步的不断加快,以及国际社会在工业现代化、工业4.0等方面的不断演进,使得大数据技术在工业行业以及制造业方面也进行了比较深度的技术融...

    钱塘数据
  • HDFS读写数据过程原理分析

    在学习hadoop hdfs的过程中,有很多人在编程实践这块不知道该其实现的原理是什么,为什么通过几十行小小的代码就可以实现对hdfs的数据的读写。

    王知无

扫码关注云+社区

领取腾讯云代金券