HDFS的读写过程:

读过程:

Client收到用户的读请求——client拿着path向namenode请求文件或者block的datanode列表——client从返回的datanode列表中选择一个离自己最近的datanode,并且向他请求数据——datanode接到请求返回block的数据

读过程:

DFSInputStream对象中包含文件开始部分的数据块所在的DataNode地址,首先它会链接包含文件第一个块最近的DataNode。随后,在数据流中重复调用read函数,知道这个块全部读完位置,当最后一个块读取完毕时,DFSInputStream会关闭连接,并查找存储下一个数据块客户端最近的DataNode。客户端按照DFSInputSttream打开和DataNode连接返回的数据流的顺序读取该块,它会调用NameNode来检索下一组块所在的DataNode的位置信息。

写过程:client接到用户的写请求——client接收到数据,分割成一个个block——client请求namenode,并说明写入的数据大小和备份数——namenode返回给client需要的datanode列表——client写入第一个datanode,以packet的形式写入,一个packet一般为64k;第一个datanode写入第二个datanode,依次类推;每写入一个datanode都会返回ack信息,第一个datanode返回所有的ack信息;当datanode持久化数据后向namenode汇报已经完成——client接收到ack,检查所有datanode都写入正常,发送请求给namenode要求关闭文件——namenode关闭文件。

写过程:DFSOutputStream将文件分割成包,然后放入一个内部队列。DataStreamer会将这些小的文件包放入数据流中。

副本写过程:假设副本系数为3,当本地临时文件累积到一个数据块的大小(累积量超过一个数据块的大小),客户端会从NameNode获取一个Datanode列表用于存放副本,然后客户端开始向第一个Datanode传输数据,第一个Datanode一小部分一小部分(4kb)接收数据,将每一部分写入本地仓库,并同时传输到该部分到列表中第二个Datanode节点,第二个Datanode也是这样所以,Datanode采取流水线复制,从前一个节点接收数据,并在同时转发给下一个节点。

HDFS读写过程的更多相关文章

  1. Hadoop学习总结之二:HDFS读写过程解析

    一.文件的打开 1.1.客户端 HDFS打开一个文件,需要在客户端调用DistributedFileSystem.open(Path f, int bufferSize),其实现为: public F ...

  2. Hadoop源码分析(1):HDFS读写过程解析

    一.文件的打开 1.1.客户端 HDFS打开一个文件,需要在客户端调用DistributedFileSystem.open(Path f, int bufferSize),其实现为: public F ...

  3. HDFS 文件读写过程

    HDFS 文件读写过程 HDFS 文件读取剖析 客户端通过调用FileSystem对象的open()来读取希望打开的文件.对于HDFS来说,这个对象是分布式文件系统的一个实例. Distributed ...

  4. Hadoop之HDFS文件读写过程

    一.HDFS读过程 1.1 HDFS API 读文件 Configuration conf = new Configuration(); FileSystem fs = FileSystem.get( ...

  5. HDFS读写数据块--${dfs.data.dir}选择策略

    最近工作需要,看了HDFS读写数据块这部分.不过可能跟网上大部分帖子不一样,本文主要写了${dfs.data.dir}的选择策略,也就是block在DataNode上的放置策略.我主要是从我们工作需要 ...

  6. Hadoop -- HDFS 读写数据

    一.HDFS读写文件过程 1.读取文件过程 1)       初始化FileSystem,然后客户端(client)用FileSystem的open()函数打开文件 2)       FileSyst ...

  7. HBase 文件读写过程描述

    HBase 数据读写过程描述 我们熟悉的在 Hadoop 使用的文件格式有许多种,例如: Avro:用于 HDFS 数据序序列化与 Parquet:常见于 Hive 数据文件保存在 HDFS中 HFi ...

  8. 【转】HDFS读写流程

    概述开始之前先看看其基本属性,HDFS(Hadoop Distributed File System)是GFS的开源实现. 特点如下: 能够运行在廉价机器上,硬件出错常态,需要具备高容错性流式数据访问 ...

  9. HBase的简单介绍,寻址过程,读写过程

    HBase是列族数据库,主要由,表,行键,列族,列标识,值,时间戳 组成,         表   其中HBase 主要底层存储依赖与hdfs,可以在HDFS中看到每个表名都作为一个独立的目录结构   ...

随机推荐

  1. promise使用方法

    代码报错会走向失败时的回调 let p = new Promise((resolve, reject) => { throw new Error("我错了"); //会失败 ...

  2. 交换两个变量的值,不借助第三个变量的 三种方法(JS实现)

    第一种:算术运算法 var a = 10; var b = 12; a = b - a; b = b - a; a = b + a; 它的原理是:把a.b看做数轴上的点,围绕两点间的距离来进行计算.具 ...

  3. 合理使用软引用和弱引用,提升JVM内存使用性能

    在项目运行时,OOM异常是比较处理的,因为从日志看出的发生异常的代码点可能仅仅是最后一根稻草,从中可能未必能发现OOM的原因,而且OOM未必是固定重现的. 上医治未病,与其等OOM问题发生时再通过看日 ...

  4. rsync命令解释

    -v, --verbose 详细模式输出-q, --quiet 精简输出模式-c, --checksum 打开校验开关,强制对文件传输进行校验-a, --archive 归档模式,表示以递归方式传输文 ...

  5. scala 小结(一)

    Scala 是什么?(What is scala?)   引用百度百科对于scala的定义: Scala是一门多范式的编程语言,一种类似java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编 ...

  6. 二目运算符 “->”

    -> 在C语言中称为间接引用运算符,是二目运算符,优先级同成员运算符“.”.用法:p->a,其中p是指向一个结构体的指针,a是这个结构体类型的一个成员.表达式p->a引用了指针p指向 ...

  7. MySQL笔记-union

    union语法 select ... union [all | distinct] selct ... union用于把来自多个select语句的结果组合在一个结果集中. 两次查询的列表必须相同,否则 ...

  8. ContextLoaderListener加载过程

    在web.xml中,配置ContextLoaderListener <!-- 配置Listener,用来创建Spring容器 --> <listener> <listen ...

  9. JAX-RS和Jersey

    一:JAX-RS JAX-RS是JAVA EE6 引入的一个新技术. JAX-RS即Java API for RESTful Web Services,是一个Java 编程语言的应用程序接口,支持按照 ...

  10. 前端-Useful Js Plugins

    Validform.min.js:提供对表单的验证.提交等功能,具体可查阅相关文档,@Validform 示例: $("#id").Validform() ; WdatePicke ...