Hadoop -- HDFS 读写数据

一、HDFS读写文件过程

1.读取文件过程

1)       初始化FileSystem,然后客户端(client)用FileSystem的open()函数打开文件

2)       FileSystem用RPC调用元数据节点,得到文件的数据块信息,对于每一个数据块,元数据节点返回保存数据块的数据节点的地址。

3)       FileSystem返回FSDataInputStream给客户端,用来读取数据,客户端调用stream的read()函数开始读取数据。

4)       DFSInputStream连接保存此文件第一个数据块的最近的数据节点,data从数据节点读到客户端(client)

5)       当此数据块读取完毕时,DFSInputStream关闭和此数据节点的连接,然后连接此文件下一个数据块的最近的数据节点。

6)       当客户端读取完毕数据的时候,调用FSDataInputStream的close函数。

7)       在读取数据的过程中,如果客户端在与数据节点通信出现错误,则尝试连接包含此数据块的下一个数据节点。

8)       失败的数据节点将被记录,以后不再连接。

2.写文件过程

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中的另外两个数据节点。元数据节点则被通知此数据块是复制块数不足,将来会再创建第三份备份。

啦啦啦

时间: 2024-08-03 17:05:03

Hadoop -- HDFS 读写数据的相关文章

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/

[Hadoop]HDFS机架感知策略

HDFS NameNode对文件块复制相关所有事物负责,它周期性接受来自于DataNode的HeartBeat和BlockReport信息,HDFS文件块副本的放置对于系统整体的可靠性和性能有关键性影响. 一个简单但非优化的副本放置策略是,把副本分别放在不同机架,甚至不同IDC.这样可以防止整个机架.甚至整个IDC崩溃带来的错误,但是这样文件写必须在多个机架之间.甚至IDC之间传输,增加了副本写的代价. 在缺省配置下副本数是3个,通常的策略是:第一个副本放在和Client相同机架的Node里(如

Redis开发与运维 (数据库技术丛书) PDF 下载,深度剖析Hadoop HDFS PDF 下载

1.Redis开发与运维 (数据库技术丛书) PDF 下载 2.深度剖析Hadoop HDFS (大数据技术丛书) PDF 下载 关注微信公众号:职业开发者之路,百度云免费 下载 PDF 电子书籍,或直接访问:问风网:askwinds.com请添加链接描述,免费资源下载模块下载,问风@程序员部落,更多资源分享等你获取关注微信公众号:职业开发者之路,?更多免费资源分享 原文地址:http://blog.51cto.com/2058005/2350798

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

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

Hadoop之HDFS(HDFS的数据流读写数据) (面试开发重点)

1 HDFS写数据流程 1.1 剖析文件写入 HDFS写数据流程,如图所示 1)客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在. 2)NameNode返回是否可以上传. 3)客户端请求第一个 Block上传到哪几个DataNode服务器上. 4)NameNode返回3个DataNode节点,分别为dn1.dn2.dn3. 5)客户端通过FSDataOutputStream模块请求dn1上传数据,dn

Hadoop HDFS (3) JAVA访问HDFS之二 文件分布式读写策略

先把上节未完成的部分补全,再剖析一下HDFS读写文件的内部原理 列举文件 FileSystem(org.apache.hadoop.fs.FileSystem)的listStatus()方法可以列出一个目录下的内容. public FileStatus[] listStatus(Path f) throws FileNotFoundException, IOException; public FileStatus[] listStatus(Path[] files) throws FileNot

Hadoop HDFS源码分析 关于数据块的类

Hadoop HDFS源码分析 关于数据块的类 1.BlocksMap 官方代码中的注释为: /** * This class maintains the map from a block to its metadata. * block's metadata currently includes blockCollection it belongs to and * the datanodes that store the block. */ BlocksMap数据块映射,管理名字节点上的数据

hadoop hdfs数据块探索

1.文件存储的位置 示例查看 ./bin/hadoop fsck /data/bb/bb.txt -files -blocks -racks –locations blk_1076386829_2649976是meta文件名,具体如何找到这个meta文件,可以通过find命令,从图中我们可以看到文件存储在117和229的二台机器上,例如我们登录到117机器上. 首先到dfs.datanode.data.dir的路径(如果忘记啦,可以在$HADOOP_HOME/etc/hadoop/hdfs-si

大数据10小时入门Hadoop+HDFS+YARN+MapReduce+Spark视频教程

38套大数据,云计算,架构,数据分析师,Hadoop,Spark,Storm,Kafka,人工智能,机器学习,深度学习,项目实战视频教程 视频课程包含: 38套大数据和人工智能精品高级课包含:大数据,云计算,架构,数据挖掘实战,实时推荐系统实战,电视收视率项目实战,实时流统计项目实战,离线电商分析项目实战,Spark大型项目实战用户分析,智能客户系统项目实战,Linux基础,Hadoop,Spark,Storm,Docker,Mapreduce,Kafka,Flume,OpenStack,Hiv