HDFS04 HDFS的读写流程
HDFS的读写流程(面试重点)
HDFS写数据流程
客服端把D://ss.avi文件传送到集群
1.首先需要创建一个Distributed FileSystem(分布式文件系统)客服端。向NameNode请求上传文件。上传到/user/atguigu/ss.avi路径。
2.NameNode 检查用户是否有权限,检查目标路径/user/atguigu是否可行,检测目标文件ss.avi是否存在。检查完毕后返回结果,是否可以上传文件。
3.客户端请求第一个 Block 上传到哪几个 DataNode 服务器上。
4.NameNode根据选择策略返回 DataNode 节点。
5.客户端创建FSDataOutPutStream,请求 dn1建立Block传输通道,dn1 收到请求会继续传给dn2,然后 dn2 传给 dn3,将这个通信管道建立完成。
6.dn3、dn2、dn1应答客户端。
7.dn1在磁盘中写的过程中,同时把数据传给dn2。以Packet(64k)为单位,dn1收到一个 Packet就会传给dn2,dn2 传给 dn3。每个dn都有ACK队列,应答成功后,缓存的数据才会清空,如果失败,缓存数据用于重发。
(8)当一个 Block 传输完成之后, 客户端再次请求 NameNode 上传第二个 Block。(重复执行 3-7 步)


补充:选择策略
节点距离最近与负载均衡
4.1优先本地节点
4.2其他机架A一个节点
4.3其他机架A另一个节点
网络拓扑-节点距离计算
在HDFS写数据的过程中,NameNode会选择距 离待传上传数据最近距离 的DataNode接收。那么这个最近距离怎么计算?
节点距离:两个节点到达最近的共同祖先的距离总和。
例如,假设有数据中心 d1 机架 r1 中的节点 n1。该节点可以表示为/d1/r1/n1。以下给出了四种类型距离描述。

案例
计算节点5与节点9之间的节点距离是多少 -3
计算节点2与节点10之间的节点距离是多少 -3

机架感知(副本存储节点的选择)

第一个副本考虑的是节点距离最近,上传速度最快。
第二个副本保证数据可靠性。
第三个副本兼顾效率与速度。
查看源码
Crtl + n 查找 BlockPlacementPolicyDefault类,在该类中查找 chooseTargetInOrder 方法。


HDFS的读数据流程
把HDFS的数据读到本地
1.客户端通过 DistributedFileSystem 向 NameNode 请求下载文件。
2.NameNode先判断权限再通过查询元数据,找到文件块所在的 DataNode 地址,返回目标文件的元数据。
3.客户端创建FSDataInputStream流对象,挑选一台 DataNode服务器(就近原则与负载能力),请求读取数据。 假设DN1负载能力到了极限,串行读,先读第一块,再读第二块
(3)DataNode 开始传输数据给客户端(从磁盘里面读取数据输入流,以 Packet 为单位来做校验)。
(4)客户端以 Packet 为单位接收,先在本地缓存,然后写入目标文件。

HDFS04 HDFS的读写流程的更多相关文章
- HDFS的读写流程——宏观与微观
HDFS的读写流程--宏观与微观 HDFS:分布式文件系统,负责存放数据 分布式文件系统:就是将我们的数据放到多台电脑上存储. 写数据:就是将客户端上的数据上传到HDFS 宏观过程 客户端向HDFS发 ...
- HDFS文件读写流程
一.HDFS HDFS全称是Hadoop Distributed System.HDFS是为以流的方式存取大文件而设计的.适用于几百MB,GB以及TB,并写一次读多次的场合.而对于低延时数据访问.大量 ...
- 【Hadoop】二、HDFS文件读写流程
(二)HDFS数据流 作为一个文件系统,文件的读和写是最基本的需求,这一部分我们来了解客户端是如何与HDFS进行交互的,也就是客户端与HDFS,以及构成HDFS的两类节点(namenode和dat ...
- HDFS文件读写流程 (转)
文件读取的过程如下: 使用HDFS提供的客户端开发库Client,向远程的Namenode发起RPC请求: Namenode会视情况返回文件的部分或者全部block列表,对于每个block,Namen ...
- HDFS的读写流程
1.2. 客户端向NameNode发起创建文件的请求,在NameNode上创建一个文件名,并且返回一个输出流 3.客户端向输出流发起写入数据的请求 4.输出流向NameNode请求写数据,NameNo ...
- Hadoop---HDFS读写流程
Hadoop---HDFS HDFS 性能详解 HDFS 天生是为大规模数据存储与计算服务的,而对大规模数据的处理目前还有没比较稳妥的解决方案. HDFS 将将要存储的大文件进行分割,分割到既定的存储 ...
- 大数据系列文章-Hadoop的HDFS读写流程(二)
在介绍HDFS读写流程时,先介绍下Block副本放置策略. Block副本放置策略 第一个副本:放置在上传文件的DataNode:如果是集群外提交,则随机挑选一台磁盘不太满,CPU不太忙的节点. 第二 ...
- 【转】HDFS读写流程
概述开始之前先看看其基本属性,HDFS(Hadoop Distributed File System)是GFS的开源实现. 特点如下: 能够运行在廉价机器上,硬件出错常态,需要具备高容错性流式数据访问 ...
- 超详细的HDFS读写流程详解(最容易理解的方式)
HDFS采用的是master/slaves这种主从的结构模型管理数据,这种结构模型主要由四个部分组成,分别是Client(客户端).Namenode(名称节点).Datanode(数据节点)和Seco ...
随机推荐
- SQL Server 插入、更新和删除数据
1.主要内容 ● 通过SSMS,插入.更新和删除表数据 ● 通过INSERT语句向表中插入数据 ● 通过UPDATE语句更新表内数据 ● 通过DELETE语句删除表内数据 ● 使用INSERT.UPD ...
- hdu 1709 The Balance(母函数)
题意: 有一个天平.有N个砝码.重量分别是A1...AN. 问重量[1..S]中有多少种重量是无法利用这个天平和这些砝码称出来的. S是N个砝码的重量总和. 思路: 对于每一个砝码来说,有三种:不放, ...
- c#复制数组的多种方法
方法一:使用for循环 int []pins = {9,3,7,2} int []copy = new int[pins.length]; for(int i =0;i!=copy.length;i+ ...
- 三. 为什么要用Promise
# 三. 为什么要用Promise /* 1.指定回调函数的方式更加灵活: 旧的:必须在启动异步任务前指定 promise:启动异步任务 => 返回promie对象 => 给promise ...
- 通俗易懂的HTML全知识梳理笔记(第一部分)
文章目录 什么是HTML 块级元素和内联元素 属性 给`a`元素添加属性 布尔属性 HTML的空白 实体引用: 在HTML中包含特殊字符 head中的元数据 meta元素 在你的站点中增加自定义的图标 ...
- CentOS7 hadoop3.3.1安装(单机分布式、伪分布式、分布式)
@ 目录 前言 预先设置 修改主机名 关闭防火墙 创建hadoop用户 SSH安装免密登陆 单机免密登陆--linux配置ssh免密登录 linux环境配置Java变量 配置Java环境变量 安装Ha ...
- c++学习笔记1(引用)
引用 格式:类型名&引用名=某变量名: 概念 实例:编写交换整型变量的函数对比 不用引用 实机操作 使用引用 实机操作 实例2:用作函数的返回值 可对函数返回值赋值 常引用 使用格式,在引用前 ...
- Ubuntu安装BCC
Ubuntu安装BCC 教程 官方文档 安装 这里官方文档中首先讲到的是二进制文件的安装,直接通过apt进行安装 sudo apt-get install bpfcc-tools linux-head ...
- Windows漏洞:MS08-067远程代码执行漏洞复现及深度防御
摘要:详细讲解MS08-067远程代码执行漏洞(CVE-2008-4250)及防御过程 本文分享自华为云社区<Windows漏洞利用之MS08-067远程代码执行漏洞复现及深度防御>,作者 ...
- Alpine容器安装运行ssh
写在前面 本文介绍了在Alpine容器(docker)上安装运行ssh并保证外界(宿主机)能通过ssh登录的方法,给出了相应的命令.在下在探索过程中借鉴了许多前人的经验,在此先行谢过,所有参考内容都会 ...