HDFS读写流程简介

HDFS写流程:

  • 1.初始化FileSystem,客户端调用create()来创建文件
  • 2.FileSystem用RPC调用元数据节点,在文件系统的命名空间中创建一个新的文件,元数据节点首先确定文件原来不存在,并且客户端有创建文件的权限,然后创建新文件。
  • 3.FileSystem返回DFSOutputStream,客户端用于写数据,客户端开始写入数据。
  • 4.DFSOutputStream将数据分成块,写入data queue。data queue由Data Streamer读取,并通知元数据节点分配数据节点,用来存储数据块(每块默认复制3块)。分配的数据节点放在一个pipeline里。Data Streamer将数据块写入pipeline中的第一个数据节点。第一个数据节点将数据块发送给第二个数据节点。第二个数据节点将数据发送给第三个数据节点。
  • 5.DFSOutputStream为发出去的数据块保存了ack queue,等待pipeline中的数据节点告知数据已经写入成功。
  • 6.当客户端结束写入数据,则调用stream的close函数。此操作将所有的数据块写入pipeline中的数据节点,并等待ack queue返回成功。最后通知元数据节点写入完毕。
  • 7.如果数据节点在写入的过程中失败,关闭pipeline,将ack queue中的数据块放入data queue的开始,当前的数据块在已经写入的数据节点中被元数据节点赋予新的标示,则错误节点重启后能够察觉其数据块是过时的,会被删除。失败的数据节点从pipeline中移除,另外的数据块则写入pipeline中的另外两个数据节点。元数据节点则被通知此数据块是复制块数不足,将来会再创建第三份备份。

HDFS读流程:

  • 1.初始化FileSystem,然后客户端(client)用FileSystem的open()函数打开文件
  • 2.FileSystem用RPC调用元数据节点,得到文件的数据块信息,对于每一个数据块,元数据节点返回保存数据块的数据节点的地址。
  • 3.FileSystem返回FSDataInputStream给客户端,用来读取数据,客户端调用stream的read()函数开始读取数据。
  • 4.DFSInputStream连接保存此文件第一个数据块的最近的数据节点,data从数据节点读到客户端(client)
  • 5.当此数据块读取完毕时,DFSInputStream关闭和此数据节点的连接,然后连接此文件下一个数据块的最近的数据节点。
  • 6.当客户端读取完毕数据的时候,调用FSDataInputStream的close函数。
  • 7.在读取数据的过程中,如果客户端在与数据节点通信出现错误,则尝试连接包含此数据块的下一个数据节点。

参考:
https://blog.csdn.net/gaijianwei/article/details/45918337
https://www.cnblogs.com/xubiao/p/5579080.html

原文地址:http://blog.51cto.com/10814168/2119213

时间: 2024-11-08 17:30:07

HDFS读写流程简介的相关文章

大数据系列文章-Hadoop的HDFS读写流程(二)

在介绍HDFS读写流程时,先介绍下Block副本放置策略. Block副本放置策略 第一个副本:放置在上传文件的DataNode:如果是集群外提交,则随机挑选一台磁盘不太满,CPU不太忙的节点. 第二个副本:放置在与第一个副本不同的机架的节点上. 第三个副本:与第二个副本相同机架的节点. 更多副本:随机节点. HDFS写流程 客户端发请求给NameNode,我想保存一个文件A,这时候在NameNode会有一个标识,标识为A_copy(文件不可用). 根据副本放置策略,返回三个副本的可放置位置列表

Hadoop之HDFS读写流程

hadoophdfs 1. HDFS写流程 2. HDFS写流程 1. HDFS写流程 HDFS写流程 副本存放策略: 上传的数据块后,触发一个新的线程,进行存放. 第一个副本:与client最近的机器(基于性能考虑) 第二个副本:跨机器存放该副本(考虑数据安全性) 第三个副本:与第一个,第二个副本都不在同一个机架上(考虑数据安全性) 2. HDFS写流程 HDFS读流程 原文地址:https://www.cnblogs.com/linyufeng/p/10989433.html

HDFS读写流程

读程图: 1.客户端发送请求,调用DistributedFileSystem API的open方法发送请求到Namenode,获得block的位置信息,因为真正的block是存在Datanode节点上的,而namenode里存放了block位置信息的元数据. 2.Namenode返回所有block的位置信息,并将这些信息返回给客户端. 3.客户端拿到block的位置信息后调用FSDataInputStream API的read方法并行的读取block信息,图中4和5流程是并发的,block默认有

Hadoop2.6.0学习笔记(七)HDFS读写流程

鲁春利的工作笔记,谁说程序员不能有文艺范? HDFS读文件解析 HDFS写文件解析

HDFS(一)架构及文件读写流程

Hadoop 中有三大组件:HDFS.MapReduce.YARN,HDFS 负责大文件存储的问题,MapReduce 负责大数据计算,而 YARN 负责资源的调度,接下来的文章我会一一介绍这几个组件.今天我们先来聊聊 HDFS 的架构及文件的读写流程. 总体架构 HDFS 设计的目的是为了存储大数据集的文件,因此一台服务器是应付不了的,我们需要一个集群来实现这个目标.当用户需要存储一个文件时,HDFS 会将这个文件切分为一个个小的数据块(在 2.x 的版本中,每个数据块默认大小为 128M),

Ceph源码解析:读写流程

一.OSD模块简介 1.1 消息封装:在OSD上发送和接收信息. cluster_messenger -与其它OSDs和monitors沟通 client_messenger -与客户端沟通 1.2 消息调度: Dispatcher类,主要负责消息分类 1.3 工作队列: 1.3.1 OpWQ: 处理ops(从客户端)和sub ops(从其他的OSD).运行在op_tp线程池. 1.3.2 PeeringWQ: 处理peering任务,运行在op_tp线程池. 1.3.3 CommandWQ:处

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

最近工作需要,看了HDFS读写数据块这部分.不过可能跟网上大部分帖子不一样,本文主要写了${dfs.data.dir}的选择策略,也就是block在DataNode上的放置策略.我主要是从我们工作需要的角度来读这部分代码的. 1 hdfs-site.xml 2 <property> 3 <name>dfs.data.dir</name> 4 <value>/mnt/datadir1/data,/mnt/datadir2/data,/mnt/datadir3/

小记--------hbase数据库读写流程

hbase读写流程 读过程 client先从缓存中定位region位置,如果缓存中没有region位置,则从zookeeper的-ROOT-表,获取-ROOT-所在regionserver位置 通过查询-ROOT-的region服务器获取含有.META.表所在regionserver地址 Client会将保存着regionserver位置信息的元数据表.META.进行缓存,然后在表中确定待检索rowkey所在regionserver信息. Client会向在.META.表中确定的regionse

HBase 数据读写流程

HBase 数据读写流程 2016-10-18 杜亦舒 读数据 HBase的表是按行拆分为一个个 region 块儿,这些块儿被放置在各个 regionserver 中 假设现在想在用户表中获取 row key 为 row0001 的用户信息 要想取得这条数据,就需要先找到含有此条记录的 region HBase 是如何定位到具体 regionserver 中的具体 region 的呢? HBase 中有一个内置的 hbase:meta 表,其中记录了所有表的所有 region 的详细信息 例如