超详细的HDFS读写流程详解(最容易理解的方式)
HDFS采用的是master/slaves这种主从的结构模型管理数据,这种结构模型主要由四个部分组成,分别是Client(客户端)、Namenode(名称节点)、Datanode(数据节点)和SecondaryNameNode。HDFS作为hadoop的分布式储存框架,最重要的莫过于数据流的读写过程了,下面就HDFS得数据流的读写流程做个详细的剖析。
HDFS的写流程
首先写操作的shell命令:
hdfs dfs -put ./file02 /file02
hdfs dfs -copyFromLocal ./file02 /file02
FSDataOutputStream fsout = fs.create(path);fsout.write(byte[])
fs.copyFromLocal(path1,path2)
具体流程详解:
如下图所示是整个写流程及原理(上传)
1.客户端向namenode发出请求上传数据;
2.namenode在接到请求之后,开始查找元数据(查找是否存在这个目录以及查询上传者是否有这个权限),查询后向客户端响应是否可以上传数据。
3.客户端接到响应之后,再开始请求上传第一块数据(数据分块是由客户端操作的),例如图中的0-128m为第一块数据。
4.namenode接到请求后,向客户端返回datanode节点信息(副本放在哪个节点上,例如放在DN1,DN2,DN3这三台机器上)。一般规则有近远远,近远近
5.客户端根据返回的副本信息向datanode请求建立传输通道,以级联的方式进行请求
6.datanode向客户端响应,若都应答成功,则传输通道建立成功。
7.开始传输数据,以packet方式传输,以chunk为单位进行校验,默认1m。
8.第一块上传成功,第二块开始从3-7步骤继续传输
9.待传输完成之后,客户端向namenode报告数据传输远程,由namenode更新元数据
在hdfs的写流程有几个核心问题:
1.传输blk1的过程中,dn3如果死了,集群会怎么处理?
不做任何处理,错误会想nn报告
2.接1,如果dn3又启动了,集群会如何处理?
dn3启动时,会向nn发送块报告,然后nn指示dn3删除blk1(因为传输数据不完整)
3.客户端建立通道时,发现dn3连接不上,会怎么办?
nn会重新分配三个节点
4.传输过程中,packet出错,会如何处理?
会重新上传,但是重传次数只有4次,超过限制则提示传输失败
5.如果bk1上传成功,blk2坏了,或者blk2上传时,dn1挂了,如何处理?
nn会将整个文件标记为无效,下次dn向nn发送块报告时,nn会通知这些块所在的节点删除
HDFS的读操作
首先读操作的shell命令(下载)
hdfs dfs -get /file02 ./file02
hdfs dfs -copyToLocal /file02 ./file02
FSDataInputStream fsis = fs.open(path);
fsis.read(byte[] a)
fs.copyToLocal(path1,path2)
具体流程详解
由图可知HDFS的读流程要比写流程简单很多,主要步骤:
1.客户端请求下载数据
2.nn检测数据是否存在,给客户端响应
3.客户端请求下载第一块数据
4.nn返回目标文件的元数据
5.客户端请求dn建立传输通道
6.dn响应
7.开始传输数据
注意点:
在读操作中在客户端和dn建立传输通道时不是采用级联方式,而是首先寻找离自己最近的副本(dn1)下载,如果数据不完整或者没有找到,就再向dn2建立传输通道,然后传输数据,依次往下,直到下载到目标文件为止。
hdfs的重要知识点,建议收藏哦
超详细的HDFS读写流程详解(最容易理解的方式)的更多相关文章
- 一看你就懂,超详细java中的ClassLoader详解
本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 ClassLoader翻译过来就是类加载器,普通的Java开发者其实用到的不多,但对于某些框架开发者来说却非常常见.理解ClassL ...
- 【转】一看你就懂,超详细java中的ClassLoader详解
http://blog.csdn.net/briblue/article/details/54973413 ClassLoader翻译过来就是类加载器,普通的java开发者其实用到的不多,但对于某些框 ...
- 一看你就懂,超详细java中的ClassLoader详解(转)
转载地址 http://blog.csdn.net/briblue/article/details/54973413 目录(?)[-] Class文件的认识 你还记得java环境变量吗 J ...
- (转)超详细java中的ClassLoader详解
转:https://blog.csdn.net/briblue/article/details/54973413 ClassLoader翻译过来就是类加载器,普通的java开发者其实用到的不多,但对于 ...
- JuiceFS 数据读写流程详解
对于文件系统而言,其读写的效率对整体的系统性能有决定性的影响,本文我们将通过介绍 JuiceFS 的读写请求处理流程,让大家对 JuiceFS 的特性有更进一步的了解. 写入流程 JuiceFS 对大 ...
- Hadoop(四)HDFS集群详解
前言 前面几篇简单介绍了什么是大数据和Hadoop,也说了怎么搭建最简单的伪分布式和全分布式的hadoop集群.接下来这篇我详细的分享一下HDFS. HDFS前言: 设计思想:(分而治之)将大文件.大 ...
- adoop(四)HDFS集群详解
阅读目录(Content) 一.HDFS概述 1.1.HDFS概述 1.2.HDFS的概念和特性 1.3.HDFS的局限性 1.4.HDFS保证可靠性的措施 二.HDFS基本概念 2.1.HDFS主从 ...
- C++的性能C#的产能?! - .Net Native 系列《二》:.NET Native开发流程详解
之前一文<c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATIVE初窥> 获得很多朋友支持和鼓励,也更让我坚定做这项技术的推广者,希望能让更多的朋友了解这项技术,于是先从官方 ...
- git概念及工作流程详解
git概念及工作流程详解 既然我们已经把gitlab安装完毕[当然这是非必要条件],我们就可以使用git来管理自己的项目了,前文也多多少少提及到git的基本命令,本文就先简单对比下SVN与git的区别 ...
随机推荐
- day21-双下eq方法
class Goods: def __init__(self,name): self.name = name def __eq__(self,other): #self = apple1, other ...
- Java IO: 序列化与ObjectInputStream、ObjectOutputStream
作者:Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本小节会简要概括Java IO中的序列化以及涉及到的流,主要包括ObjectInputStream和O ...
- 隐藏windows7/8“卸载或更改程序”里的软件
隐藏windows7/8“卸载或更改程序”里的软件 通过修改注册表即可隐藏电脑中已安装的软件,这个方法会造成卸载列表无法加载已安装的软件,请谨慎操作!提示:删除注册表后windows自带的卸载程序.其 ...
- python3之urllib代理池
1.常见状态吗 301:重定向到新的URL,永久性302:重定向到临时URL,非永久性304:请求的资源未更新400:非法请求401:请求未经授权403:禁止访问404:没找到对应页面500:服务器内 ...
- Win32下双缓冲绘图技术
一:双缓冲原理 为了解决窗口刷新频率过快所带来的闪烁问题,利用双缓冲技术进行绘图.所谓双缓冲技术,就是将资源加载到内存,然后复制内存数据到设备DC(这个比较快),避免了直接在设备DC上绘图(这个比较慢 ...
- VRRP笔记二:配置keepalived为实现haproxy高可用的配置文件示例
! Configuration File for keepalived global_defs { notification_email { linuxedu@foxmail.com mageedu@ ...
- 使用内网映射工具Holer将本地的Web应用映射到公网上访问
Holer exposes local servers behind NATs and firewalls to the public internet over secure tunnels. Su ...
- python 有关堡垒机的那些事
堡垒机为了保证系统或服务器的安全性,防止运维和开发人员胡乱操作服务器,导致不必要的损失,使用堡垒机来完成对运维和开发人员的授权.用户统一登录堡垒机账号来操作系统或服务器.堡垒机等于成了生产系统的SSO ...
- [SDOI2008] 洞穴勘测 (LCT模板)
bzoj 2049 传送门 洛谷P2147 传送门 这个大佬的LCT详解超级棒的! Link-Cut Tree的基本思路是用splay的森林维护一条条树链. splay的森林,顾名思义,就是若干spl ...
- 查询优化基础知识 - chendh blog
概述 处理一个给定的查询,尤其是复杂查询,通常会有许多种策略,查询优化就是从这许多策略中找出最有效的查询执行计划的处理过程. 查询执行计划的步骤 产生逻辑上与给定表达式等价的表达式: 估计每个执行计划 ...