HDFS文件读取流程
背景:了解客户端及与之交互的HDFS,namenode,datanode之间的数据流是什么样的。
引用资料:《Hadoop权威指南》
如图:
读取流程:
- 客户端通过调用 FileSystem 对象的 open() 方法来打开希望读取的文件,对于 HDFS 来说,这个对象是 DistributedFileSystem 的一个实例。
- DistributedFileSystem 通过使用远程过程调用(RPC)来调用 namenode ,以确定文件起始块的位置。对于每一个块,namenode 返回存有改块副本的 datanode 地址。这些datanode 根据他们与客户端的距离来排序(根据集群的网络拓扑)。如果该客户端本身就是一个 datanode (比如,在一个 MapReduce 任务中),那么该客户端会从不保存有相应数据块副本的本地 datanode 读取数据。
- DistrubuteFileSystem 类返回一个 FSDataInputStream 对象(一个支持文件定位的输入流)给客户端以读取数据。FSDataInputStream 类转而封装 DFSInputStream 对象,改对象管理着 datanode 和 namenode 的 I/O。接着,客户端对这个输入流调用 read() 方法(步骤3)。存储者文件起始几个块的 datanode 地址的 DFSInputStream 随即连接距离最近的文件中第一个块所在的 datanode 。通过对数据流反复调用 read()方法,可以将数据从 datanode 传输到客户端(步骤4)。到达块的末端时,DFSInputStream 关闭与该datanode 的连接,然后寻找下一个块的嘴贱 datanode(步骤5)。
- 一旦客户端完成读取,就对 FSDataInputStream 调用 close()方法(步骤6)。
在读取数据的时候,如果DFSInputStream 在与 datanode 通信是遇到错误,回尝试从这个块的另外一个最邻近的 datanode 读取数据。它也记住那个故障 datanode ,以保证以后不会反复读取该节点上后续的块。DFSInputStream 也会通过校验和确认从 datanode 发来的数据是否完整。如果发现有损坏的块,DFSInputStream 会试图从其他 datanode 读取其副本,也会将被损坏的块通知给 namenode。
优点:
- 客户端可以直接连接到 datanode 检索数据
- namenode 只需要响应块位置的请求,无需响应数据请求。
HDFS文件读取流程相关推荐
- HDFS文件读写流程
1.HDFS文件读取流程: 2.HDFS写入文件流程 转载于:https://www.cnblogs.com/shijiaoyun/p/5790344.html
- shell 删除了hdfs 文件_知识干货 | 大数据全解 HDFS分布式文件系统
HDFS概述 Hadoop分布式文件 ...
- HDFS的读写流程步骤(附图文解析)
1.HDFS的写入流程: 详细步骤: client 发起文件上传请求,通过 RPC 与 NameNode 建立通讯,NameNode 检查目标文件是否已存在,父目录是否存在,返回是否可以上传: cli ...
- Blender文件读取分析
blender 开源3d模型创作软件,基于2.7.8a版本分析blender文件(blender自己产生的文件)读取流程进行分析. blender文件分析流程,没有画图了 wm_open_mainfi ...
- hdfs读写流程_深度探索Hadoop分布式文件系统(HDFS)数据读取流程
一.开篇 Hadoop分布式文件系统(HDFS)是Hadoop大数据生态最底层的数据存储设施.因其具备了海量数据分布式存储能力,针对不同批处理业务的大吞吐数据计算承载力,使其综合复杂度要远远高于其他数 ...
- java读取hdfs文件夹_HDFS 读取、写入、遍历文件夹获取文件全路径、append
1.从HDFS中读取数据 Configuration conf = getConf(); Path path = new Path(pathstr); FileSystem fs = FileSyst ...
- 记录一次读取hdfs文件时出现的问题java.net.ConnectException: Connection refused
公司的hadoop集群是之前的同事搭建的,我(小白一个)在spark shell中读取hdfs上的文件时,执行以下指令 >>> word=sc.textFile("hdfs ...
- python读取HDFS文件
2019独角兽企业重金招聘Python工程师标准>>> ###方法一:使用hdfs库读取HDFS文件 ###在读取数据时,要加上 encoding='utf-8',否则字符串前面会有 ...
- Spark没有读取HDFS文件的方法?那textFile是怎么读的?
直入正题吧,ctrl+鼠标点进textFile方法. package org.apache.spark ......... /*** Read a text file from HDFS, a loc ...
最新文章
- Windows Server2016 安装及配置DFS实现数据复制
- iframe内联元素有白边原因_教你如何使用内联框架元素 IFrames 的沙箱属性提高安全性?
- mfc 判断文件夹复制完成_Python办公自动化|自动整理文件,一键完成!
- 如何将python项目部署到服务器_部署python项目到linux服务器
- codeforces1473 E.Minimum Path(分层图最短路)
- if...elif...else...fi和case...esac的脚本条件判断式
- java程序包r不存在_java - 从命令行使用Gradle构建时,“程序包R不存在”错误 - 堆栈内存溢出...
- 谷歌拼音输入法快速切换中英文解决中英文混合打字问题
- MATLAB常用的基本数学函数
- 控制器发生异常 eofexception_关于气动薄膜调节阀常发生的故障你可能还不知道...
- PAT 1031 查验身份证
- Mac 环境下labelImg标注工具的安装
- 用css制作旋转的立方体
- 从技术走向管理——李元芳履职记
- order by是怎么工作的?
- 论文中看到的光线投影法(ray casting)是什么?
- 大道至简(读后感)第一章 编程的精义
- 什么是扩散模型(Diffusion Models),为什么它们是图像生成的一大进步?
- android 观察者模式的简单demo,一个简单的demo彻底搞懂观察者模式
- 火车头采集器 v9免费版使用