HDFS上读写数据的流程解释_程猿薇茑的博客-CSDN博客_hdfs中ack机制


本站和网页 https://blog.csdn.net/hellozpc/article/details/45646823 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

HDFS上读写数据的流程解释_程猿薇茑的博客-CSDN博客_hdfs中ack机制
HDFS上读写数据的流程解释
程猿薇茑
于 2015-05-11 18:38:50 发布
2905
收藏
分类专栏:
开源框架/hadoop/hbase/spark
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hellozpc/article/details/45646823
版权
开源框架/hadoop/hbase/spark
专栏收录该内容
15 篇文章
12 订阅
订阅专栏
文件的读取
文件读取的过程如下:
1)解释一  客户端(client)用FileSystem的open()函数打开文件。  DistributedFileSystem用RPC调用元数据节点,得到文件的数据块信息。  对于每一个数据块,元数据节点返回保存数据块的数据节点的地址。  DistributedFileSystem返回FSDataInputStream给客户端,用来读取数据。  客户端调用stream的read()函数开始读取数据。  DFSInputStream连接保存此文件第一个数据块的最近的数据节点。  Data从数据节点读到客户端(client)。  当此数据块读取完毕时,DFSInputStream关闭和此数据节点的连接,然后连接此文件下一个数据块的最近的数据节点。  当客户端读取完毕数据的时候,调用FSDataInputStream的close函数。  在读取数据的过程中,如果客户端在与数据节点通信出现错误,则尝试连接包含此数据块的下一个数据节点。  失败的数据节点将被记录,以后不再连接。
2)解释二  使用HDFS提供的客户端开发库,向远程的Namenode发起RPC请求;  Namenode会视情况返回文件的部分或者全部block列表,对于每个block,Namenode都会返回有该block拷贝的datanode地址;  客户端开发库会选取离客户端最接近的datanode来读取block;  读取完当前block的数据后,关闭与当前的datanode连接,并为读取下一个block寻找最佳的datanode;  当读完列表的block后,且文件读取还没有结束,客户端开发库会继续向Namenode获取下一批的block列表。  读取完一个block都会进行checksum验证,如果读取datanode时出现错误,客户端会通知Namenode,然后再从下一个拥有该block拷贝的datanode继续读。
文件的写入
写入文件的过程比读取较为复杂:
1)解释一  客户端调用create()来创建文件  DistributedFileSystem用RPC调用元数据节点,在文件系统的命名空间中创建一个新的文件。  元数据节点首先确定文件原来不存在,并且客户端有创建文件的权限,然后创建新文件。  DistributedFileSystem返回DFSOutputStream,客户端用于写数据。  客户端开始写入数据,DFSOutputStream将数据分成块,写入data queue。  Data queue由Data Streamer读取,并通知元数据节点分配数据节点,用来存储数据 河北工业大学——软件工程与理论实验室 编辑:虾皮 25 创建时间:2012/3/6 修改时间:2012/3/8 修改次数:0 河北工业大学——软件工程与理论实验室 编辑:虾皮 26 块(每块默认复制3块)。分配的数据节点放在一个pipeline里。  Data Streamer将数据块写入pipeline中的第一个数据节点。第一个数据节点将数据块发送给第二个数据节点。第二个数据节点将数据发送给第三个数据节点。  DFSOutputStream为发出去的数据块保存了ack queue,等待pipeline中的数据节点告知数据已经写入成功。  如果数据节点在写入的过程中失败:  关闭pipeline,将ack queue中的数据块放入data queue的开始。  当前的数据块在已经写入的数据节点中被元数据节点赋予新的标示,则错误节点重启后能够察觉其数据块是过时的,会被删除。  失败的数据节点从pipeline中移除,另外的数据块则写入pipeline中的另外两个数据节点。  元数据节点则被通知此数据块是复制块数不足,将来会再创建第三份备份。  当客户端结束写入数据,则调用stream的close函数。此操作将所有的数据块写入pipeline中的数据节点,并等待ack queue返回成功。最后通知元数据节点写入完毕。 2)解释二  使用HDFS提供的客户端开发库,向远程的Namenode发起RPC请求;  Namenode会检查要创建的文件是否已经存在,创建者是否有权限进行操作,成功则会为文件创建一个记录,否则会让客户端抛出异常;  当客户端开始写入文件的时候,开发库会将文件切分成多个packets,并在内部以”data queue”的形式管理这些packets,并向Namenode申请新的blocks,获取用来存储replicas的合适的datanodes列表,列表的大小根据在Namenode中对replication的设置而定。  开始以pipeline(管道)的形式将packet写入所有的replicas中。开发库把packet以流的方式写入第一个datanode,该datanode把该packet存储之后,再将其传递给在此pipeline中的下一个datanode,直到最后一个datanode,这种写数据的方式呈流水线的形式。  最后一个datanode成功存储之后会返回一个ack packet,在pipeline里传递至客户端,在客户端的开发库内部维护着”ack queue”,成功收到datanode返回的ackpacket后会从”ack queue”移除相应的packet。  如果传输过程中,有某个datanode出现了故障,那么当前的pipeline会被关闭,出现故障的datanode会从当前的pipeline中移除,剩余的block会继续剩下的datanode中继续以pipeline的形式传输,同时Namenode会分配一个新的datanode,保持replicas设定的数量。
参考文献:
http://www.aboutyun.com/forum.php?highlight=hadoop&mod=viewthread&tid=7191
http://blog.sina.com.cn/s/blog_9402246001013ktm.html
http://www.cnblogs.com/xia520pi/archive/2012/05/28/2520813.html
程猿薇茑
关注
关注
点赞
收藏
打赏
评论
HDFS上读写数据的流程解释
HDFS上读写数据的流程解释
复制链接
扫一扫
专栏目录
【HDFS】写数据时,下游Datanode的ack是在落盘时还是在网络收到数据时发出的?
Badme
04-02
137
【HDFS】写数据时,下游Datanode的ack是在落盘时还是在网络收到数据时发出的?
HDFS 从客户端写入到 DataNode 时,ACK 是否三个备份都写成功之后再确认成功操作?
HeatDeath的博客
01-09
2496
ACK 是否三个备份都写成功之后再确认成功操作?
不是的,只要成功写入的节点数量达到dfs.replication.min(默认为1),那么就任务是写成功的
正常情况下:
① 在进行写操作的时候(以默认备份3份为例),DataNode_1接受数据后,首先将数据写入buffer,再将数据写入DatNode_2,写入成功后将 buffer 中的数据写入本地磁盘,并等待ACK信息
② 重复上一个
评论 1
您还未登录,请先
登录
后发表或查看评论
hdfs源码深度解析(四) 文件上传全流程
qq_24186017的博客
02-08
245
目录
client
datanode
namenode
大数据笔记(学习归纳)
qq_33439938的博客
04-10
1561
大数据笔记(学习归纳)大数据架构基础知识题大数据组件概念大数据环境搭建1.介绍一下集群搭建的过程?2.说一两个搭建过程遇到的坑?HDFS1.请介绍一下HDFS?2.HDFS的机制是指什么,它有什么作用?3.请简述下HDFS文件的读写流程4.HDFS存储大量的小文件会发生什么问题?5.block块为什么设置比较大?是不是越大越好?MapReduce分布式计算1.MapReduce的shuffle过程...
Hadoop 学习总结之一:HDFS简介
diebiaosang4496的博客
03-14
222
一、HDFS的基本概念 1.1、数据块(block) HDFS(Hadoop Distributed File System)默认的最基本的存储单位是64M的数据块。 和普通文件系统相同的是,HDFS中的文件是被分成64M一块的数据块存储的。 不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间。 1.2、元数据节点(Namenode)和...
HDFS的读写流程步骤(附图文解析)
最新发布
奇迹虎虎的博客
03-04
1万+
HDFS的写入流程与读取流程,附图文步骤解析
hdfs读取数据的流程
wyqwilliam的博客
11-24
1042
客户端通过调用FileSystem对象的open()来读取希望打开的文件。对于HDFS来说,这个对象是分布式文件系统的一个实例。
DistributedFileSystem通过RPC来调用namenode,以确定文件的开头部分的块位置。对于每一块,namenode返回具有该块副本的datanode地址。此外,这些datanode根据他们与client的距离来排序(根据网络集群的拓扑)。如果该cl...
分布式处理与大数据平台(RabbitMQ&Celery&Hadoop&Spark&Storm&Elasticsearch)
weixin_33929309的博客
03-16
383
热门的消息队列中间件RabbitMQ,分布式任务处理平台Celery,大数据分布式处理的三大重量级武器:Hadoop、Spark、Storm,以及新一代的数据采集和分析引擎Elasticsearch。
RabbitMQ
RabbitMQ是一个支持Advanced Message Queuing Protocol(AMQP)的开源消息队列实现,由Erlan...
HDFS的工作流程分析
那年的坏人的专栏
04-19
3888
HDFS的工作机制概述
HDFS集群分为两大角色:NameNode、DataNode
NameNode负责管理整个文件系统的元数据
DataNode 负责管理用户的文件数据块
文件会按照固定的大小(blocksize)切成若干块后分布式存储在若干台datanode上
每一个文件块可以有多个副本,并存放在不同的datanode上
Datanode会定期向Namenode汇报自身所保存的文件block信
Hadoop之HDFS读写文件过程(流程图+代码)
weixin_44947339的博客
04-03
2539
阅读目录一、HDFS文件读取过程HDFS文件读取的流程图:流程图的说明:代码:二、HDFS文件写入过程HDFS文件写入的流程图流程图的说明:代码:
一、HDFS文件读取过程
当客户端需要读取文件时,首先向NameNode发起读请求, NameNode收到请求后,会将请求文件的数据块在DataNode中的具体位置(元数据信息)返回给客户端,客户端根据文件数据块的位置,直接找到相应的DataNode...
Hadoop中HDFS的存储机制
殇沫流年的专栏
06-29
1万+
Hadoop中HDFS的存储机制
HDFS(Hadoop Distributed File System)是Hadoop分布式计算中的数据存储系统,是基于流数据模式访问和处理超大文件的需求而开发的。下面我们首先介绍HDFS中的一些基础概念,然后介绍HDFS中读写操作的过程,最后分析了HDFS的优缺点。
1. HDFS中的基础概念
Block:HDFS中的存储单元是每个数据块
hdfs读写流程_一篇文章搞清楚 HDFS 基本原理
weixin_39996101的博客
12-01
93
随着互联网的发展,数据日益增多,增长超过了单机能够处理的上线,数据如何存储和处理成为了科技公司的难题,随着google的三篇论文的发布,大家终于找到了一个方案-分布式文件系统+MapReduce。Hadoop是参考google论文实现的,集成了分布式文件系统与分布式批处理平台。hadoop的设计目标是用来解决大文件海量存储和批处理的,为了避免单个节点故障导致数据丢失,设计副本冗余机制。 ...
Celery分布式任务队列快速入门
weixin_30779691的博客
10-12
76
本节内容
1. Celery介绍和基本使用
2. 项目中使用Celery
3. Celery定时任务
4. Celery与Django结合
5.Django中使用计划任务
一 Celery介绍和基本使用
需求场景
1. 对100台命令执行一条批量命令,命令执行需要很长时间,但是不想让主程序等着结果返回,而是给主程序返回一个任务ID,t...
HDFS 读写流程
weixin_33860722的博客
09-01
192
http://blog.endlesscode.com/2010/06/16/hdfs-short-intro/
一、HDFS
HDFS全称是Hadoop Distributed System。HDFS是为以流的方式存取大文件而设计的。适用于几百MB,GB以及TB,并写一次读多次的场合。而对于低延时数据访问、大量小文件、同时写和任意的文件修改,则并不是十分适合。
目前HDFS支持的使用接口除...
《HDFS 3》--IDE集成HDFS的搭建、客户端访问HDFS或读写数据的两种方式
yk_3215123的博客
05-07
119
【IDE集成HDFS的搭建】
(1) IDE作为可视化客户端连接HDFS
第一步:安装插件
将hadoop-eclipse-plugin-2.7.3.jar放入eclipse的plugins目录下
第二步:在窗口 map/reduce location下新建连接
location name:就是昵称,随便...
从hdfs上读取数据到hbase中
yangbosos的博客
03-22
535
hbase 从hdfs上读取数据到hbase中
<dependencies>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<versio...
Celery-4.1 用户指南: Monitoring and Management Guide
李兵的专栏
11-21
5376
简介Celery 提供了监控和探查celery集群的工具。这篇文档描述了一些工具,以及与监控相关的一些特性,例如事件和广播命令。工作单元命令行管理工具(inspect/control)Celery 可以用来探查和管理工作单元节点(以及一定程度上对任务管理)。列出所有可用的命令:$ celery help或者对指定的命令获取帮助:$ celery <command> --help命令
shell: 进
HDFS文件上传流程
热门推荐
Gscsd的博客
04-15
1万+
HDFS运行流程图(图是盗的) 首先用户即客户端想要上传文件,就先要给namenode发个请求,告诉它说我要上传文件了(即写数据),然后namenode会返回一个响应,这个响应是namenode根据自身情况,比如会先查一下namenode里面还能存数据吗?能存多少?有几个datanode能存?(心跳信息)然后返回一个可以存储的节点列表,意思是这些里面能存,但不是能存的datanode全部...
hdfs数据读写流程
Romantic_sir的博客
04-10
1552
hdfs写数据流程
1、客户端通过Distributed FileSystem模块向namenode请求上传文件到/user/atguigu/ss.avi这个路径文件
2、校验文件是否存在,如果存在就会报目录存在这个错误,如果不存在则相应可以上传文件
3、客户端请求第一个Block(0-128M)上传到那几个DataNode服务器上
4、返回dn1,dn2,dn3节点,表示这三个节...
HDFS 读写流程简述
向日的知识小站
06-06
1万+
参考:https://blog.csdn.net/litianxiang_kaola/article/details/70984777 https://blog.csdn.net/zhanglh046/article/details/78547490一、客户端读流程简述1.跟namenode通信查询元数据,找到文件块所在的datanode服务器,HDFS客户端首先调用Distri...
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:书香水墨
设计师:CSDN官方博客
返回首页
程猿薇茑
CSDN认证博客专家
CSDN认证企业博客
码龄12年
Java领域优质创作者
213
原创
9441
周排名
19万+
总排名
194万+
访问
等级
1万+
积分
5833
粉丝
2209
获赞
974
评论
8067
收藏
私信
关注
热门文章
RabbitMQ教程(安装与使用详解,Spring集成)
498861
Mybatis教程(实战看这一篇就够了)
352331
SpringCloud详细教程(上)
191855
常用Linux日志查看命令
72840
SpringBoot教程
44169
分类专栏
作者专栏合集(限时特价)
付费
50篇
消息队列kafka/rabbitmq实战
付费
2篇
JVM面试与调优
付费
15篇
Flink实战教程
付费
17篇
MyBatis从入门到精通
付费
4篇
SpringBoot教程(全)
付费
20篇
SpringCloud从入门到精通
付费
2篇
redis
4篇
web前端
3篇
限流、分布式唯一ID
3篇
JAVA并发编程
7篇
netty实战
3篇
Java
72篇
随笔
11篇
Web
19篇
algorithm
11篇
database
20篇
linux/系统运维
22篇
design pattern
开源框架/hadoop/hbase/spark
15篇
data mining
2篇
python
9篇
支付
4篇
最新评论
RabbitMQ教程(安装与使用详解,Spring集成)
风影莎从:
博主你好,我已经订阅了,跪求教程中的pdf以及代码,谢谢!
1076208637@qq.com
RabbitMQ教程(安装与使用详解,Spring集成)
满眼星辰都是代码:
啊这要这么多钱,跑路看其他的吧
SpringCloud详细教程(上)
lee666_lee:
好文啊!谢谢楼主。概念很清晰呢。
RabbitMQ教程(安装与使用详解,Spring集成)
DuebassLei:
博主你好,我已经订阅了,跪求教程中的pdf以及代码,谢谢!
1130122701@qq.com
Redis教程(全面实战教程)
shanghaijun1982:
非常全面的入门教程!暂!
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
SpringBoot多redis集群配置
websocket 客户端测试工具
Java最新面试题及答案
2022年5篇
2021年45篇
2020年33篇
2019年14篇
2018年14篇
2017年18篇
2016年6篇
2015年45篇
2014年46篇
2013年15篇
2012年2篇
目录
目录
分类专栏
作者专栏合集(限时特价)
付费
50篇
消息队列kafka/rabbitmq实战
付费
2篇
JVM面试与调优
付费
15篇
Flink实战教程
付费
17篇
MyBatis从入门到精通
付费
4篇
SpringBoot教程(全)
付费
20篇
SpringCloud从入门到精通
付费
2篇
redis
4篇
web前端
3篇
限流、分布式唯一ID
3篇
JAVA并发编程
7篇
netty实战
3篇
Java
72篇
随笔
11篇
Web
19篇
algorithm
11篇
database
20篇
linux/系统运维
22篇
design pattern
开源框架/hadoop/hbase/spark
15篇
data mining
2篇
python
9篇
支付
4篇
目录
评论 1
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
打赏作者
程猿薇茑
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值