最近在答疑工作中,有很多小伙伴都在问HDFS的读写原理是什么,小编其实在刚开始学习大数据的时候,也对此有所困惑。

可见,同一个知识,同一个困惑啊~

为了让更多的小伙伴能够彻底解决这一困惑,小编下面就为大家介绍一下HDFS文件的读写原理。

敲黑板了啊,仔细听讲!

假设有一个文本文件1.txt,大小为300M,划分为3个数据块,即block_01、block_02、block_03。(这是我为大家举的例子)

1.HDFS写数据原理

在我们把文件上传到HDFS系统中,HDFS究竟是如何存储到集群中去的,又是如何创建备份的?

这就是流程图:

看完了是不是一脸懵,其实呢HDFS中的写数据流程主要分为12个步骤。

(1)客户端发起文件上传请求,通过RPC(远程过程调用)与NameNode建立通讯。

(2)NameNode检查元数据文件的系统目录树。

(3)若系统目录树的父目录不存在该文件相关信息,返回客户端可以上传文件。

(4)客户端请求上传第一个Block数据块,以及数据块副本的数量(可以自定义副本数量,也可以使用集群规划的副本数量)。

(5)NameNode检测元数据文件中DataNode信息池,找到可用的数据节点(DataNode_01,DataNode_02,DataNode_03)。

(6)将可用的数据节点的IP地址返回给客户端。

(7)客户端请求3台节点中的一台服务器DataNode_01,进行传送数据(本质上是一个RPC调用,建立管道Pipeline),DataNode_01收到请求会继续调用服务器DataNode_02,然后服务器DataNode_02调用服务器DataNode_03。

(8)DataNode之间建立Pipeline后,逐个返回建立完毕信息。

(9)客户端与DataNode建立数据传输流,开始发送数据包(数据是以数据包形式进行发送)。

(10)客户端向DataNode_01上传第一个Block数据块,是以Packet为单位(默认64K),发送数据块。当DataNode_01收到一个Packet就会传给DataNode_02,DataNode_02传给DataNode_03;DataNode_01每传送一个Packet都会放入一个应答队列等待应答。

(11)数据被分割成一个个Packet数据包在Pipeline上依次传输,而在Pipeline反方向上,将逐个发送Ack(命令正确应答),最终由Pipeline中第一个DataNode节点DataNode_01将Pipeline的 Ack信息发送给客户端。

(12)DataNode返回给客户端,第一个Block块传输完成。客户端则会再次请求NameNode上传第二个Block块和第三块到服务器上,重复上面的步骤,直到3个Block都上传完毕。

2.HDFS读数据原理

HDFS中的读数据流程可以分为4个步骤,具体如下:

(1)客户端向NameNode发起RPC请求,来获取请求文件Block数据块所在的位置。

(2)NameNode检测元数据文件,会视情况返回Block块信息或者全部Block块信息,对于每个Block块,NameNode都会返回含有该Block副本的DataNode地址。

(3)客户端会选取排序靠前的DataNode来依次读取Block块(如果客户端本身就是DataNode,那么将从本地直接获取数据),每一个Block都会进行CheckSum(完整性验证),若文件不完整,则客户端会继续向NameNode获取下一批的Block列表,直到验证读取出来文件是完整的,则Block读取完毕。

(4)客户端会把最终读取出来所有的Block块合并成一个完整的最终文件(例如:1.txt)。

至此,小编为大家讲解了HDFS文件的读写原理,相信大家对HDFS文件的读写原理能够有更深入地理解了。

获取hdfs_收好!Hadoop-HDFS读写原理的超详细教程相关推荐

  1. Hadoop 2.0集群配置详细教程

    Hadoop 2.0集群配置详细教程 前言 Hadoop2.0介绍 Hadoop是 apache 的开源 项目,开发的主要目的是为了构建可靠,可拓展 scalable ,分布式的系 统, hadoop ...

  2. 条件随机场(CRF)极简原理与超详细代码解析

    条件随机场(CRF)极简原理与超详细代码解析 1. 原理 1.1 从名称说起 1.2 优化的目标 1.3 如何计算 2. 代码 2.1 基本结构 2.2 模型初始化 2.3 BERT提取的特征如何输入 ...

  3. 【大数据】Hadoop完全分布式配置(超详细)

    文章目录 概述 1.准备Linux 2.安装JDK 3.克隆两台虚拟机 4.免密登陆 5.安装Hadoop 6.配置Hadoop配置文件 7.启动服务 8.在集群上测试一个jar包-单词统计的功能 问 ...

  4. hadoop的HA实现,超详细

    网上的转载,但超详细http://blog.csdn.net/xiaojin21cen/article/details/42611073 我主要关注第三个问题,他们是主.备关系,但是datanode必 ...

  5. 基于Python的Excel读写操作--内容超详细,值得排排坐

    今日份超详细的解读,Excel文件基础操作,让你以学就会. 写这个的原因是,一位群友问了很久,然后网上的教程写的又不是很详细,看的有些犯迷糊,所以我今日份写一份超详细的基本操作,让你打下良好的基础. ...

  6. 大数据培训:Hadoop HDFS 实现原理

    一.HDFS体系结构 1.1 HDFS 简介 Hadoop分布式文件系统 (HDFS) 是运行在通用硬件(commodity hardware)上的分布式文件系统(Distributed File S ...

  7. 深入Hbase原理(超详细)

    目录 Hbase概述 Hbase中的核心概念 原理加强之Region拆分 HMaster的作用   主节点 Region的拆分 负载均衡 1.1 自动负载均衡流程 1.2 强制执行负载均衡 1.3 人 ...

  8. kettle同步数据到hive 巨慢_超详细教程,kettle ETL mysql到hadoop hive数据抽取,值得收藏...

    那么如何将mysql数据导入到hive里呢,kettle里有自带方法,可以通过表输入和表输出来实现,不过自带的方法载入数据极其缓慢,不推荐使用这种方法. 1.hive建表 注意hive表使用" ...

  9. Hadoop分布式集群搭建完全详细教程

    Hadoop分布式集群环境搭建步骤如下 实验环境: 系统:win7 内存:8G(因要开虚拟机,内存建议不低于8G) 硬盘:建议固态 虚拟机:VMware 12 Linux:Centos 7 jdk1. ...

最新文章

  1. 63万张!旷视发布最大物体检测数据集Objects365 | 技术头条
  2. 阿里云专家手把手教你重塑 IT 架构!
  3. Android中使用Handler和异步任务(AsyncTack)来为UI线程执行费时操作
  4. go语言中go+select的理解
  5. nodejs+webpack+vue以及npm安装对应的库
  6. [html] 制作一个页面时,需要兼容PC端和手机端,你是要分别做两个页面还是只做一个页面自适应?为什么?说说你的理由
  7. [剑指offer][JAVA][第62题][约瑟夫环][LinkedList vs ArrayList]
  8. Fast-SCNN:多分支结构共享低级特征的语义分割网络
  9. 你踩过dataguard的哪些坑?
  10. 由脚本创建的新元素事件不触发和用的easyUI插件中的多选框不起作用的解决方法...
  11. Maven报错Please ensure you are using JDK 1.4 or above and not a JRE解决方法!
  12. 腾讯2016实习生招聘有感
  13. 当系统中存在多个浏览器,如何设置IE为自己的默认浏览器
  14. 毕业设计 高校排课系统
  15. 可穿戴市场掘金:VC如何看上小小的ZEPP公司
  16. 解决linux的-bash: ./xx: Permission denied/tensorflow 运行cpu还是gpu的方法
  17. iOS 制作framework(SDK)的流程
  18. 家庭教育机构如何线上线下灵活结合?
  19. gaussdb200 理论
  20. 中职计算机英语教师教学总结,中职教师工作总结

热门文章

  1. UE4 FBX静态网格物体通道
  2. MySQL数据库 --基础
  3. IntelliJ IDEA + Maven环境编写第一个hadoop程序
  4. 内核下枚举进程 (二)ZwQuerySystemInformation
  5. JDBC、ODBC、OLE DB、ADO、ADOMD区别与联系
  6. TensorFlow基本原理,入门教程网址
  7. Gartner:CIO需破解建立数字化领导力的四大障碍
  8. jquery动态插入行,不用拼写html,简洁版
  9. date、clock、hwclock时间命令解释
  10. dreamcast游戏_《Dreamcast Collection》开箱及游戏介绍