文档章节

Hadoop文件写入详细剖析(22)

肖鋭
 肖鋭
发布于 2014/03/09 21:28
字数 887
阅读 87
收藏 2


            客户端通过对DistibutedFileSystem对象调用create()函数来创建文件(步骤1).DistributedFileSystem对namenode创建一个RPC调用,在文件系统的命名空间中创建一个新文件,此时该文件中还没有相应的数据块(步骤2)。namenode执行各种不同的检查以确保个文件不存在,并且客户端有创建该文件的权限。如果这些检查均通过,namenode就会创建新文件记录一条记录;否则,文件创建失败并向客户端抛出一个IOException异常。DistributedFileSystem向客户端返回一个FSDataOutputStream对象,由此客户端可以开始写入数据。就像读取事件一样,FSDataOutputStream封装一个DFSOutputStream对象,该对象负责处理datanode和namenode之间的通信。

                在客户端写入数据时(步骤3),DFSOutputStream将它分成一个个的数据包,并写入内部队列,称为“数据队列”(data queue).DataStream处理数据列表,它的责任是根据datanode列表来要求namenode分配适合的新块来存储数据备份。这一组datanode构成一个管线----我们假设复本数为3,所以管线中有3个节点.DataStreamer将数据包流式传输到管线中第一个datanode,该datanode存储数据包并将它发送到管线中的第2个datanode。同样地,第2个datanode存储该数据包并且发送给管线中的第3个(也就是最后一个)datanode(步骤4).DFSOutputStream也维护着一个内部数据包队列来等待datanode的收到确认回执,称为”确认队列“(ack queue).当收到管道中所有datanode确认信息后,该数据包才会从确认队列删除(步骤5)。

                如果在数据写入期间,datanode发生故障,则执行以下操作,这对于写入数据的客户端是透明的,首先关闭管线,确认把队列中的任何数据包都添加回数据队列的最前端,以确认故障节点下游的datanode不会漏掉任何一个数据包。为存储在另一正常datanode的当前数据块指定一个新的标识,并将该标识传送给namenode,以便datanode在恢复后可以删除存储的部分数据块。从管线中删除故障数据节点并且把余下的数据块写入管线中的两个正常的datanode。namenode注意到块复本量不足时,会在另一个节点创建一个新的复本。后续的数据块继续正常接受处理。

                在一个块被写入期间可能会有多个datanode同时发生故障,但非常少见,只要写入了dfs.replication.min的复本数(默认为1),写操作就会成功,并且这个块可以在集群中异步复制,直到达到其目标复本数(dfs.replication的默认值为3)。客户端完成数据的写入后,会对数据流调用close()方法(步骤6),该操作将剩余的所有数据包写入datanode管线中,并在联系namenode且发送文件写入完成信号之前,等待确认(步骤7),namenode已经知道文件由哪些块组成(通过DataStreamer询问数据库的分配),所以它在返回成功前只需要等待数据块进行最小量的复制。


                                                                                                                                    Name:Xr

                                                                                                                                    Date:2014-03-09 21:28

© 著作权归作者所有

肖鋭
粉丝 10
博文 62
码字总数 29531
作品 0
朝阳
程序员
私信 提问
Hadoop - HDFS的数据流剖析

剖析文件的读取 为了了解客户端及与之交互的HDFS、namenode 和 datanode之间的数据流是什么样的,我们可以参考下图,该图显示了在读取文件时事件的发生顺序。 客户端通过调用FileSystem对象的...

yangji008
2016/11/16
0
0
MapReduce shuffle过程剖析及调优

MapReduce简介 在Hadoop MapReduce中,框架会确保reduce收到的输入数据是根据key排序过的。数据从Mapper输出到Reducer接收,是一个很复杂的过程,框架处理了所有问题,并提供了很多配置项及扩...

riseee
2018/05/25
68
0
Spark基本工作原理与RDD及wordcount程序实例和原理深度剖析

RDD以及其特点 1、RDD是Spark提供的核心抽象,全称为Resillient Distributed Dataset,即弹性分布式数据集。 2、RDD在抽象上来说是一种元素集合,包含了数据。它是被分区的,分为多个分区,每...

qq1137623160
2018/05/10
0
0
Hive从入门到实战视频教程【40讲全】

1、Hive是什么,Hive的体系结构,Hive和Hadoop的关系 2、Hive的元数据存储、Hive的数据存储、Hive和RDBMS的区别 3、JDK安装 4、Hadoop集群搭建-1 5、Hadoop集群搭建-2 6、Hadoop集群搭建-3 ...

tom先生
2014/11/26
48
0
Hadoop系列008-HDFS的数据流

本人微信公众号,欢迎扫码关注! HDFS的数据流 1 HDFS写数据流程 1.1 剖析文件写入 1)客户端向namenode请求上传文件,namenode检查目标文件是否已存在,父目录是否存在。 2)namenode返回是...

云端笑猿
01/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

面向海量数据的极致成本优化-云HBase的一体化冷热分离

前言 随着业务的持续发展,业务数据库存储量会持续增长。通常数据量过亿时,就需要考虑做分库分表,或者选择扩展能力更好的NOSQL/NewSQL数据库,如HBase就可以单表支持PB级数据,足够满足大多...

阿里云官方博客
37分钟前
4
0
最新最全国内外架构开源技术干货资料

大家好,废话不多说,整理了精心收集了各类资源。 声明,如侵犯个人利益,请联系小编,会立即删除相关资料。 领取方式在文末 求转发列表 好了,由于资源太多啦,就不一一列举了。 大家按照下...

泥瓦匠BYSocket
39分钟前
6
0
springmvc jsp访问不了css

在jsp中引入css,一直报404错误,直接访问css,也无法访问 将css文件移出WEB-INF,因为处于安全性考虑,这个目录禁止外部访问。 当引用css时,可以直接用绝对路径${pageContext.request.conte...

沉迷于编程的小菜菜
42分钟前
4
0
android 系统版本 9.1网络请求遇到坑

网络请求异常: E/http: CLEARTEXT communication to plat.xunlinkeji.cn not permitted by network security policy 在res下新建一个xml目录 创建名为network_security_config.xml 文件 ,该......

MrLins
59分钟前
5
0
Istio 1.3 发布,HTTP 遥测不再需要 Mixer

> 原文链接:Istio 1.3 发布,HTTP 遥测不再需要 Mixer Istio 是 Google、IBM 和 Lyft 联合开源的服务网格(Service Mesh)框架,旨在解决大量微服务的发现、连接、管理、监控以及安全等问题...

米开朗基杨
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部