背景:了解客户端及与之交互的HDFS,namenode,datanode之间的数据流是什么样的。
引用资料:《Hadoop权威指南》
如图:

读取流程:

  1. 客户端通过调用 FileSystem 对象的 open() 方法来打开希望读取的文件,对于 HDFS 来说,这个对象是 DistributedFileSystem 的一个实例。
  2. DistributedFileSystem 通过使用远程过程调用(RPC)来调用 namenode ,以确定文件起始块的位置。对于每一个块,namenode 返回存有改块副本的 datanode 地址。这些datanode 根据他们与客户端的距离来排序(根据集群的网络拓扑)。如果该客户端本身就是一个 datanode (比如,在一个 MapReduce 任务中),那么该客户端会从不保存有相应数据块副本的本地 datanode 读取数据。
  3. DistrubuteFileSystem 类返回一个 FSDataInputStream 对象(一个支持文件定位的输入流)给客户端以读取数据。FSDataInputStream 类转而封装 DFSInputStream 对象,改对象管理着 datanode 和 namenode 的 I/O。接着,客户端对这个输入流调用 read() 方法(步骤3)。存储者文件起始几个块的 datanode 地址的 DFSInputStream 随即连接距离最近的文件中第一个块所在的 datanode 。通过对数据流反复调用 read()方法,可以将数据从 datanode 传输到客户端(步骤4)。到达块的末端时,DFSInputStream 关闭与该datanode 的连接,然后寻找下一个块的嘴贱 datanode(步骤5)。
  4. 一旦客户端完成读取,就对 FSDataInputStream 调用 close()方法(步骤6)。

在读取数据的时候,如果DFSInputStream 在与 datanode 通信是遇到错误,回尝试从这个块的另外一个最邻近的 datanode 读取数据。它也记住那个故障 datanode ,以保证以后不会反复读取该节点上后续的块。DFSInputStream 也会通过校验和确认从 datanode 发来的数据是否完整。如果发现有损坏的块,DFSInputStream 会试图从其他 datanode 读取其副本,也会将被损坏的块通知给 namenode。

优点:

  1. 客户端可以直接连接到 datanode 检索数据
  2. namenode 只需要响应块位置的请求,无需响应数据请求。

HDFS文件读取流程相关推荐

  1. HDFS文件读写流程

    1.HDFS文件读取流程: 2.HDFS写入文件流程 转载于:https://www.cnblogs.com/shijiaoyun/p/5790344.html

  2. shell 删除了hdfs 文件_知识干货 | 大数据全解 HDFS分布式文件系统

                                                                                      HDFS概述 Hadoop分布式文件 ...

  3. HDFS的读写流程步骤(附图文解析)

    1.HDFS的写入流程: 详细步骤: client 发起文件上传请求,通过 RPC 与 NameNode 建立通讯,NameNode 检查目标文件是否已存在,父目录是否存在,返回是否可以上传: cli ...

  4. Blender文件读取分析

    blender 开源3d模型创作软件,基于2.7.8a版本分析blender文件(blender自己产生的文件)读取流程进行分析. blender文件分析流程,没有画图了 wm_open_mainfi ...

  5. hdfs读写流程_深度探索Hadoop分布式文件系统(HDFS)数据读取流程

    一.开篇 Hadoop分布式文件系统(HDFS)是Hadoop大数据生态最底层的数据存储设施.因其具备了海量数据分布式存储能力,针对不同批处理业务的大吞吐数据计算承载力,使其综合复杂度要远远高于其他数 ...

  6. java读取hdfs文件夹_HDFS 读取、写入、遍历文件夹获取文件全路径、append

    1.从HDFS中读取数据 Configuration conf = getConf(); Path path = new Path(pathstr); FileSystem fs = FileSyst ...

  7. 记录一次读取hdfs文件时出现的问题java.net.ConnectException: Connection refused

    公司的hadoop集群是之前的同事搭建的,我(小白一个)在spark shell中读取hdfs上的文件时,执行以下指令 >>> word=sc.textFile("hdfs ...

  8. python读取HDFS文件

    2019独角兽企业重金招聘Python工程师标准>>> ###方法一:使用hdfs库读取HDFS文件 ###在读取数据时,要加上 encoding='utf-8',否则字符串前面会有 ...

  9. Spark没有读取HDFS文件的方法?那textFile是怎么读的?

    直入正题吧,ctrl+鼠标点进textFile方法. package org.apache.spark ......... /*** Read a text file from HDFS, a loc ...

最新文章

  1. Windows Server2016 安装及配置DFS实现数据复制
  2. iframe内联元素有白边原因_教你如何使用内联框架元素 IFrames 的沙箱属性提高安全性?
  3. mfc 判断文件夹复制完成_Python办公自动化|自动整理文件,一键完成!
  4. 如何将python项目部署到服务器_部署python项目到linux服务器
  5. codeforces1473 E.Minimum Path(分层图最短路)
  6. if...elif...else...fi和case...esac的脚本条件判断式
  7. java程序包r不存在_java - 从命令行使用Gradle构建时,“程序包R不存在”错误 - 堆栈内存溢出...
  8. 谷歌拼音输入法快速切换中英文解决中英文混合打字问题
  9. MATLAB常用的基本数学函数
  10. 控制器发生异常 eofexception_关于气动薄膜调节阀常发生的故障你可能还不知道...
  11. PAT 1031 查验身份证
  12. Mac 环境下labelImg标注工具的安装
  13. 用css制作旋转的立方体
  14. 从技术走向管理——李元芳履职记
  15. order by是怎么工作的?
  16. 论文中看到的光线投影法(ray casting)是什么?
  17. 大道至简(读后感)第一章 编程的精义
  18. 什么是扩散模型(Diffusion Models),为什么它们是图像生成的一大进步?
  19. android 观察者模式的简单demo,一个简单的demo彻底搞懂观察者模式
  20. 火车头采集器 v9免费版使用

热门文章

  1. 【数据库】数据库系统概念
  2. 李开复给中国大学生的七封公开信(其七)
  3. 从零开始为《吃豆人》创建BT
  4. Eureka 和nacos 的区别
  5. 梦幻西游服务器维护一天,梦幻西游2011年梦幻全年维护更新总结 17173.com网络游戏:《梦幻西游》专区...
  6. 一文全面掌握conda
  7. 我们注视的,是相同的世界吗
  8. Python双色球开奖
  9. mysql 用ip地址连接不上
  10. 智能信息处理复习1——布尔查询