hdfs读写流程_hdfs读写文件的基本原理

hdfs读写流程_hdfs读写文件的基本原理HDFS采用的是master/slaves这种主从的结构模型管理数据,这种结构模型主要由四个部分组成,分别是Client(客户端)、Namenode(名称节点)、Datanode(数据节点)和Seco

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

HDFS采用的是master/slaves这种主从的结构模型管理数据,这种结构模型主要由四个部分组成,分别是Client(客户端)、Namenode(名称节点)、Datanode(数据节点)和SecondaryNameNode。HDFS作为hadoop的分布式储存框架,最重要的莫过于数据流的读写过程了,下面就HDFS得数据流的读写流程做个详细的剖析。

HDFS的写流程

首先写操作的代码操作:

hdfs dfs -put ./file02 /file02   

代码100分

代码100分hdfs dfs -copyFromLocal ./file02 /file02 FSDataOutputStream fsout = fs.create(path);fsout.write(byte[]) 
fs.copyFromLocal(path1,path2)

具体流程详解:

如下图所示是整个写流程及原理(上传)

hdfs读写流程_hdfs读写文件的基本原理

 

 

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的读操作

首先读操作的代码(下载)

 

hdfs dfs -get /file02 ./file02    
hdfs  dfs -copyToLocal  /file02 ./file02 FSDataInputStream fsis = fs.open(path); fsis.read(byte[] a) fs.copyToLocal(path1,path2) 

 

具体流程详解

hdfs读写流程_hdfs读写文件的基本原理

 

 由图可知HDFS的读流程要比写流程简单很多,主要步骤:

1.客户端请求下载数据

2.nn检测数据是否存在,给客户端响应

3.客户端请求下载第一块数据

4.nn返回目标文件的元数据

5.客户端请求dn建立传输通道

6.dn响应

7.开始传输数据

注意点:

在读操作中在客户端和dn建立传输通道时不是采用级联方式,而是首先寻找离自己最近的副本(dn1)下载,如果数据不完整或者没有找到,就再向dn2建立传输通道,然后传输数据,依次往下,直到下载到目标文件为止。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/9660.html

(0)
上一篇 2023-02-03
下一篇 2023-02-03

相关推荐

  • 用户画像系统架构——从零开始搭建实时用户画像(二)「终于解决」

    用户画像系统架构——从零开始搭建实时用户画像(二)「终于解决」​ ​ 在《 "什么的是用户画像" 》一文中,我们已经知道用户画像对于企业的巨大意义,当然也有着非常大实时难度。那么在用户画像的系统架构中都有哪些难度和重点要考虑的问题呢? 挑战

    2023-03-04
    144
  • Redis简介与部署 – Linux[通俗易懂]

    Redis简介与部署 – Linux[通俗易懂]一、简介 Redis是什么?redis是一款基于BSD协议,开源的非关系型数据库(nosql数据库),作者是意大利开发者Salvatore Sanfilippo在2009年发布,使用C语言编写;red

    2023-03-27
    145
  • sql server怎么导入数据库文件_sqlserver数据库导出数据成.sql

    sql server怎么导入数据库文件_sqlserver数据库导出数据成.sql在不同类型的数据库之间迁移数据并非易事。在本文中,我们将比较几种从 SQL Server 转换到 PostgreSQL 的方法。Microsoft SQL Server 是一个很棒的数据库引擎,但在某

    2023-05-12
    140
  • Python结束进程的方法

    Python结束进程的方法在Python中,有时候需要结束某个进程或者线程,比如在开发爬虫程序的时候,爬取某些网站的时候可能遇到了反爬虫机制,或者请求过多出现异常等情况,需要结束进程或线程,否则会占用系统资源。

    2024-08-20
    30
  • 数据库游标_sql游标的作用

    数据库游标_sql游标的作用
    DECLARE rs CURSOR LOCAL SCROLL FOR SELECT RowIndex,Name FROM Real_CIU_VesselGe…

    2023-04-06
    176
  • MySQL8.0其他新特性[亲测有效]

    MySQL8.0其他新特性[亲测有效]MySQL8.0其他新特性 MySQL8.0新特性概述 MySQL8.0新增特性 MySQL8.0移除的旧特性 新特性1:窗口函数 窗口函数的分类 MySQL8.0版本开始支持窗口函数,窗口函数的作用

    2023-05-10
    137
  • Python绘图教程

    Python绘图教程Python作为一种高级编程语言,被广泛应用于各个领域,其中,Python绘图也成为了其重要应用之一。Python绘图能够直观地展示数据,使得用户可以更加直观地了解数据分布和数据趋势。同时,Python绘图还可以被用来制作信息图、展示统计数据等。Python绘图能够操作的图像类型包括可视化、绘制区域、控制坐标轴和标签等众多操作。

    2024-06-10
    53
  • Python GUI编程:安装使用Tkinter进行界面设计

    Python GUI编程:安装使用Tkinter进行界面设计Graphical User Interface(图形用户界面)是现代软件中不可缺少的一部分,它提供了一种更亲近、直观的界面,使用户能够以更方便的方式与程序交互。而Python Tkinter(Toolkit Interface)是Python标准库中内置的一款GUI工具包,它提供了创建基本GUI应用程序所需的组件和控件,并且容易学习和使用。

    2024-03-10
    99

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注