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的读写流程的更多相关文章

  1. HDFS的读写流程——宏观与微观

    HDFS的读写流程--宏观与微观 HDFS:分布式文件系统,负责存放数据 分布式文件系统:就是将我们的数据放到多台电脑上存储. 写数据:就是将客户端上的数据上传到HDFS 宏观过程 客户端向HDFS发 ...

  2. HDFS文件读写流程

    一.HDFS HDFS全称是Hadoop Distributed System.HDFS是为以流的方式存取大文件而设计的.适用于几百MB,GB以及TB,并写一次读多次的场合.而对于低延时数据访问.大量 ...

  3. 【Hadoop】二、HDFS文件读写流程

    (二)HDFS数据流   作为一个文件系统,文件的读和写是最基本的需求,这一部分我们来了解客户端是如何与HDFS进行交互的,也就是客户端与HDFS,以及构成HDFS的两类节点(namenode和dat ...

  4. HDFS文件读写流程 (转)

    文件读取的过程如下: 使用HDFS提供的客户端开发库Client,向远程的Namenode发起RPC请求: Namenode会视情况返回文件的部分或者全部block列表,对于每个block,Namen ...

  5. HDFS的读写流程

    1.2. 客户端向NameNode发起创建文件的请求,在NameNode上创建一个文件名,并且返回一个输出流 3.客户端向输出流发起写入数据的请求 4.输出流向NameNode请求写数据,NameNo ...

  6. Hadoop---HDFS读写流程

    Hadoop---HDFS HDFS 性能详解 HDFS 天生是为大规模数据存储与计算服务的,而对大规模数据的处理目前还有没比较稳妥的解决方案. HDFS 将将要存储的大文件进行分割,分割到既定的存储 ...

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

    在介绍HDFS读写流程时,先介绍下Block副本放置策略. Block副本放置策略 第一个副本:放置在上传文件的DataNode:如果是集群外提交,则随机挑选一台磁盘不太满,CPU不太忙的节点. 第二 ...

  8. 【转】HDFS读写流程

    概述开始之前先看看其基本属性,HDFS(Hadoop Distributed File System)是GFS的开源实现. 特点如下: 能够运行在廉价机器上,硬件出错常态,需要具备高容错性流式数据访问 ...

  9. 超详细的HDFS读写流程详解(最容易理解的方式)

    HDFS采用的是master/slaves这种主从的结构模型管理数据,这种结构模型主要由四个部分组成,分别是Client(客户端).Namenode(名称节点).Datanode(数据节点)和Seco ...

随机推荐

  1. Vue:Vue的介绍以及组件剖析

    介绍 现在,随着基于JavaScript的单页应用程序(SPA)和服务器端渲染(SSR)的兴起,可以用JavaScript编写整个前端应用程序,并整洁地管理和维护该应用程序的前端代码.诸如Angula ...

  2. 用STM32定时器中断产生PWM控制步进电机

    控制步进电机可以使用PWM.定时器中断.延时,这里用的就是定时器中断来让它转动. 一.硬件部分1.使用的硬件板子用的是正点原子的STM32F103 mini板,驱动器是DM420(DM420驱动器资料 ...

  3. Loto实践干货(8) 实测 保险丝 用示波器带电流探头

    本文用LOTO示波器和5A的电流探头来实验两种常见类型的保险丝的保护曲线.一种是熔断型的,另一种是自恢复型的.我们通常需要在一些电路中对电流过大的情况做保护,比如防止用户把输出源短路,比如防止用户对电 ...

  4. 怎么将本地已有的一个项目上传到新建的git仓库的方法

    将本地已有的一个非git项目上传到新建的git仓库的方法一共有两种. 一. 克隆+拷贝 第一种方法比较简单,直接用把远程仓库拉到本地,然后再把自己本地的项目拷贝到仓库中去.然后push到远程仓库上去即 ...

  5. css 跑马灯加载特效

    css 跑马灯加载特效 <!DOCTYPE html> <html lang="en"> <head> <meta charset=

  6. WebJar的打包和使用  

    前言 WebJar官网:https://www.webjars.org/,对于任何与Servlet 3兼容的容器,WEB-INF/lib目录中的webjar都会自动作为静态资源提供.这是因为WEB-I ...

  7. Java 初始化与清理

    用构造器确保初始化 如何自定义构造器(constructor)? 构造器方法的名称与类名相同,并且没有返回值. 需要注意,在定义构方法时,方法名前面不要添加任何的类型说明符,格式:类名(){},构造方 ...

  8. SpringCloud微服务实战——搭建企业级开发框架(十九):Gateway使用knife4j聚合微服务文档

      本章介绍Spring Cloud Gateway网关如何集成knife4j,通过网关聚合所有的Swagger微服务文档 1.gitegg-gateway中引入knife4j依赖,如果没有后端代码编 ...

  9. CTF入门学习4->前端HTML基础

    Web安全基础 02 前端开发-HTML基础 浏览器对于上网者来说是一种直观.可视化的呈现.服务器发送数据到客户端,客户端需要处理这些数据,互联网就造就了这种数据语言--HTML. 02-00 概述 ...

  10. 正则表达式&&Java文本复杂操作

    正则表达式1.正则表达式的优势和用途? 一种强大而灵活的文本处理工具: 大部分编程语言 .数据库.文本编辑器.开发环境都支持正则表达式.2.正则表达式定义: 正如他的名字一样是描述了一个规则,通过这个 ...