Hadoop权威指南:HDFS-数据流
Hadoop权威指南:HDFS-数据流
剖析文件读取
- 客户端通过调用
FileSystem
对象的open()
方法来打开希望读取的文件,对于HDFS来说, 这个对象是分布式文件系统的一个实例 DistributedFiltSystem
通过使用RPC来调用namenode
,以确定文件起始块的位置.
- 对于每一个块,
namenode
返回存有该块副本的datanode
的地址,这些datanode根据它们与客户端的距离来排序(根据集群的网络拓扑) DistributedFileSystem
类返回一个FSDataInputStream
对象(一个支持文件定位的输入流)给客户端并读取数据FSDataInputStream
类转而封装DFSInputStream
对象, 该对象管理着datanode
和namenode
的 I/O操作.
- 接着, 客户端对这个输入流调用read()方法
- 存储着文件起始几个块的
datanode
地址的DFSInputStream
随即连接距离最近的datanode
, 通过对数据流反复调用read()
方法, 可以将数据从datanode
传输到客户端 - 到达块的末端时,
DFSInputStream
关闭与该datanode
的连接, 然后寻找下一个块的最佳datanode
客户端只需要读取连续的流,并且对于客户端都是透明的
- 客户端从流中读取数据时,块是按照打开
DFSInputStream
与datanode
新建连接的顺序读取的.一旦客户端完成读取,就对FSDataInputStream
调用cloase()
方法
几点说明
- 在读取数据的时候,如果
DFSInputStream
与datanode
通讯时遇到错误,会尝试从这个块的另外一个最邻近datanode
读取数据,也会记住那个故障datanode
namenode
告知客户端每个块中最佳的datanode
, 并让客户端直接连接到该datanode
检索数据namenode
只需要相应块位置的请求(这些信息储存在内存中)
剖析文件写入
- 客户端通过对
DistributedFileSystem
对象调用create()
函数来新建文件 DistributedFileSystem
对namenode
创建一个RPC调用, 在文件系统的命名空间中新建一个文件, 此时该文件中还没有相应的数据块namenode
检查文件是否存在及客户端是否有该文件的权限
- 检查通过,
namenode
就会为创建新文件记录一条记录 - 否则,文件创建失败,并向客户端抛出一个
IOException
异常
DistributedFileSystem
向客户端返回一个FSDataOutputStream
对象,由此客户端可以开始写入数据FSDataOutputStream封装一个DFSOutputStream对象, 该对象负责处理
datanode
和namenode
之间的通讯在客户端写入数据时,
DFSOutputStream
将它分成一个个的数据包, 并写入内部队列, 称为 "数据队列".DataStreamer
处理数据队列,它的责任是根据datanode
列表来要求namenode
分配适合的新块来储存数据副本客户端完成数据的写入后, 对数据流调用
close()
方法,该操作将剩余的所有数据包写入datanode
管线,并在联系到namenode
且发送文件写入完成信号之前,等待确认namenode
已经知道文件由哪些块组成(通过DataStreamer
请求分配数据块),所以它在返回成功前只需等待数据块进行最小量复制
一致模型
文件系统的一致模型(coherency model)描述了文件读写的数据可见性,HDFS为性能牺牲了一些POSIX要求
- 新建一个文件之后,能在文件系统的命名空间中立即可见, 但是文件的内容不保证能立即可见,及时数据流已经刷新(
out.flush()
)并存储 - 当前正在写入的块对其他reader不可见,HDFS提供一个方法来使所有缓存与数据节点强行同步,即对
FSDataOutputStream
调用sync()
方法.当sync()
方法返回成功后,对所有新的reader而言,HDFS能保证文件中到目前为止写入的数据均到达所有datanode的写入管道并且对所有新的reader均可见
Path p = new Path("p");
FSDataOutputStream out = fs.create(p);
out.write("content".getBytes("UTF-8"));
out.flush();
out.sync();
- 在HDFS中关闭文件其实还隐含执行
sync()
方法
如果不调用sync()
方法,在客户端或系统发生故障时可能还丢失数据块
Hadoop权威指南:HDFS-数据流的更多相关文章
- Hadoop权威指南:压缩
Hadoop权威指南:压缩 [TOC] 文件压缩的两个好处: 减少储存文件所需要的磁盘空间 加速数据在网络和磁盘上的传输 压缩格式总结: 压缩格式 工具 算法 文件扩展名 是否可切分 DEFLATE ...
- 《Hadoop权威指南》读书笔记1
<Hadoop权威指南>读书笔记 Day1 第一章 1.MapReduce适合一次写入.多次读取数据的应用,关系型数据库则更适合持续更新的数据集. 2.MapReduce是一种线性的可伸缩 ...
- Hadoop权威指南:通过FileSystem API读取数据
Hadoop权威指南:通过FileSystem API读取数据 [TOC] 在Hadoop中,FileSystem是一个通用的文件系统API 获取FileSystem实例的几个静态方法 public ...
- Hadoop权威指南:从Hadoop URL读取数据
[TOC] Hadoop权威指南:从Hadoop URL读取数据 使用java.net.URL对象从Hadoop文件系统读取文件 实现类似linux中cat命令的程序 文件名 HDFSCat.java ...
- Hadoop权威指南:数据完整性
Hadoop权威指南:数据完整性 [TOC] 常用的错误检测码是CRC-32(循环冗余校验) HDFS的数据完整性 HDFS会对写入的所有数据计算校验和,并在读取数据时验证校验和 datanode负责 ...
- Hadoop权威指南:HDFS-Hadoop存档
Hadoop权威指南:HDFS-Hadoop存档 [TOC] 每个文件按块方式存储, 每个块的元数据存储在namenode的内存中 Hadoop存档文件或HAR文件是一个更高效的文件存档工具,它将文件 ...
- Hadoop权威指南:通过distcp并行复制
Hadoop权威指南:通过distcp并行复制 distcp是一个分布式复制程序,改程序可以从Hadoop文件系统间复制大量数据,也可以将大量的数据复制到Hadoop中 distcp的典型应用是在两个 ...
- Hadoop权威指南:HDFS-目录,查询文件系统,删除文件
Hadoop权威指南:HDFS-目录,查询文件系统,删除文件 [TOC] 目录 FileSystem实例提供了创建目录的方法 public boolean mkdirs(Path f) throws ...
- Hadoop权威指南:HDFS-写入数据
Hadoop权威指南:HDFS-写入数据 FileSystem类有一系列的新建文件的方法.最简单的方法是给准备建的文件指定一个Path对象,然后返回一个用于写入数据的输出流: public FSDat ...
随机推荐
- 如何用70行Java代码实现深度神经网络算法
http://www.tuicool.com/articles/MfYjQfV 如何用70行Java代码实现深度神经网络算法 时间 2016-02-18 10:46:17 ITeye 原文 htt ...
- xmlns=""
用dom4j把两个手上的element撮合到一起,dom4j就会在被加的元素上写上xmlns="",当时我也没在意,后来用户要求去掉,查了一下还不是那么容易,原来xml本身对nam ...
- Centos rsync文件同步配置
一.服务器端配置: # yum -y install xinetd CentOS默认已经安装了rsync 服务.. 输入 rsync 命令可查看是否安装. # vi /etc/xinetd.d ...
- 常见div+css网页布局(float,absolute)
网页布局-常见 1, float布局 (1)常规方法 <div id="warp"> <div id="column&quo ...
- Android L(5.0)源码之手势识别OnTouchListener
在Activity中,因为要监听触摸屏的触摸事件和手势时间,所以该Activity必须实现OnTouchListener和OnGestureListener两个接口,并重写其中的方法.本人根据andr ...
- 苹果App Store开发者帐户从申请,验证,到发布应用(2)
app store付费 上面已经介绍了app store id的注册了,下面在注册基础上,介绍一下app store的付费. 在上面注册成功之后,会收到一封邮件. 1.收到邮件Thank Yo ...
- 安卓canvas操作的总结
2014.07.03 使用canvas绘图 需求:公司需要绘制波形图,类似数学上的正弦波,一条是参考值,一条是实际曲线 解决方法:采用canvas绘图.保存为图片,以供导出 这里提供一个学习的demo ...
- 高仿xx教育网
2014年2月26日 16:24:50 好久没做 php了,考虑到老婆是教育行业,高仿一个教育辅导机构的网站 加油
- python获取绑定的IP,并动态指定出口IP
在做采集器的过程中,经常会遇到IP限制的情况,这时候可以通过切换IP能继续访问. 如果是多IP的服务器,那么可以通过切换出口Ip来实现. 1.首先是如何获取服务器绑定的IP import netifa ...
- YII 1.0模型标签与验证规则,前后台验证
model Admin.php model(),tabName()是固定格式 <?php /* 管理员模型 * ----------------------------------------- ...