zoukankan      html  css  js  c++  java
  • HDFS写数据流程

    HDFS中的文件在物理上是分块存储(Block),块的大小可以通过配置参数(dfs.blocksize)来规定,默认大小,2.X/3.X版本中是128M,1.X版本中是64M。128M指的是上限。

    (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都上传完毕。

  • 相关阅读:
    @slf4j 使用方法
    spark入门简单介绍
    spring boot 的简单实用和spring cloud 概念
    nginx与Tomcat
    python27+百度文字识别api
    python27+opencv2.4.10+pytesseract0.2.0图片识别
    学习vue的核心功能
    使用vscode +vue的初始环境搭建
    excel的vlookup,第一次用
    pyautogui键盘鼠标控制,python27
  • 原文地址:https://www.cnblogs.com/danyuzhu11/p/15712863.html
Copyright © 2011-2022 走看看