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. SQL 2005/2008 连接SQL 2000报18456错误

    在看文章前,你先看看下面这两个问题,考考你对MSSMS工具的掌握情况: 1: SQL 2005/2008 能连接 SQL 2000数据库服务器吗? 2: SQL 2000 能连接SQL 2005/20 ...

  2. Android内核三大核心功能之一AMS内部原理

    上面类是AmS的全称,另外两大核心功能是WindowManagerService.java和View.java AmS提供的主要功能: 统一调度各应用程序 内存管理 进程管理 AmS中定义了几个重要的 ...

  3. Struts2 (一)

    1 三层架构 2 MVC框架的原理 3 什么是Struts2 Struts2是一个非常优秀的MVC框架,基于Model2设计模式. 是由传统的Struts1和WebWork两个经典的框架发展而来的. ...

  4. SQL语句-delete语句

    delete语句 delete语句用于删除表中已经存在的整行数据 Tbl_name关键词代表删除数据的目标表 Where子句代表被删除数据的满足条件,如果没有where子句则代 表所有表数据都删除 O ...

  5. java_多线程4种实现方式

    为了34月份回学校春招,不得不复习一下线程的四种实现方式,希望春招时能找到更好的公司,加油! 1.继承Thread类 class MyThread extends Thread{ private in ...

  6. c# 事件路由器

    事件转发 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sys ...

  7. spring使用redis做缓存

    缓存 什么是缓存? 在高并发下,为了提高访问的性能,需要将数据库中 一些经常展现和不会频繁变更的数据,存放在存取速率更快的内存中.这样可以 降低数据的获取时间,带来更好的体验 减轻数据库的压力 缓存适 ...

  8. Java基础系列--Executor框架(一)

    文章来源:http://www.cnblogs.com/V1haoge/p/8393618.html 一.Executor框架介绍 Executor框架是JDK1.5之后出现的,位于juc包中,是并发 ...

  9. JAVA并发编程学习笔记------对象的可见性及发布逸出

    一.非原子的64位操作: 当线程在没有同步的情况下读取变量时,可能会得到一个失效值,但至少这个值是由之前某个线程设置的值,而不是一个随机值,这种安全性保证被称为最低安全性.最低安全性适用于绝大多数变量 ...

  10. ipcs、ipcrm、sysresv、kernel.shmmax

    ipcs.ipcrm.sysresv.kernel.shmmax 1.1  BLOG文档结构图 1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可 ...