Hadoop_08_客户端向HDFS读写(上传)数据流程

1.HDFS的工作机制:

  1. HDFS集群分为两大角色:NameNode、DataNode (Secondary Namenode)
  2. NameNode负责管理整个文件系统的元数据
  3. DataNode 负责管理用户的文件数据块(只管接收保存,不负责切片)
  4. 文件会按照固定的大小(blocksize)128M切成若干块后分布式存储在若干台datanode上
  5. 每一个文件块可以有多个副本,并存放在不同的datanode上
  6. Datanode会定期向Namenode汇报自身所保存的文件block信息,而namenode则会负责保持文件的副本数量
  7. HDFS的内部工作机制对客户端保持透明,客户端请求访问HDFS都是通过向namenode申请来进行

2.HDFS的写数据流程:

2.1.概述

  客户端要向HDFS写数据,首先跟Namenode通信以确认可以写文件并获得接收文件block的datanode(切块在客户端进行),

然后客户端按顺序将文件逐个block传递给相应datanode,并由接收到block的datanode负责向其他datanode复制block副本

2.2.详细步骤流程图:

步骤详细说明

  1. 跟namenode通信请求上传文件,namenode检查目标文件是否已存在,父目录是否存在

  2. namenode返回是否可以上传

  3. client请求第一个 block该传输到哪些datanode服务器上

  4. namenode返回3个datanode服务器ABC

  5. client请求3台dn中的一台A上传数据(本质上是一个RPC调用,建立pipeline),A收到请求会继续调用B,然后B调用C,

将真个pipeline建立完成,逐级返回客户端

  6. client开始往A上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位,A收到一个packet就会传

给B,B传给C;A每传一个packet会放入一个应答队列等待应答

  7.当一个block传输完成之后,client再次请求namenode上传第二个block的服务器。

3.HDFS的读数据流程: 

  客户端将要读取的文件路径发送给namenode,namenode获取文件的元信息(主要是block的存放位置信息)返回给客户端,

客户端根据返回的信息找到相应datanode逐个获取文件的block并在客户端本地进行数据追加合并从而获得整个文件

  读数据流程图:

    

4.3.3 详细步骤解析

  1、跟namenode通信查询元数据,找到文件块所在的datanode服务器

  2、挑选一台datanode(就近原则,然后随机)服务器,请求建立socket流

  3、datanode开始发送数据(从磁盘里面读取数据放入流,以packet为单位来做校验)

  4、客户端以packet为单位接收,现在本地缓存,然后写入目标文件

  

  

  

原文地址:https://www.cnblogs.com/yaboya/p/9192615.html

时间: 2025-01-17 13:04:25

Hadoop_08_客户端向HDFS读写(上传)数据流程的相关文章

_00017 Flume的体系结构介绍以及Flume入门案例(往HDFS上传数据)

博文作者:妳那伊抹微笑 个性签名:世界上最遥远的距离不是天涯,也不是海角,而是我站在妳的面前,妳却感觉不到我的存在 技术方向:hadoop,数据分析与挖掘 转载声明:可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明,谢谢合作! qq交流群:214293307  (期待与你一起学习,共同进步) # 学习前言 想学习一下Flume,网上找了好多文章基本上都说的很简单,只有一半什么的,简直就是坑爹,饿顿时怒火就上来了,学个东西真不容易,然后自己耐心的把这些零零碎碎的东西整理整理,各种

hadoop学习记录--hdfs文件上传过程源码解析

本节并不大算为大家讲接什么是hadoop,或者hadoop的基础知识因为这些知识在网上有很多详细的介绍,在这里想说的是关于hdfs的相关内容.或许大家都知道hdfs是hadoop底层存储模块,专门用于存放数据,那么在进行文件上传的时候hdfs是如何进行的呢?我们按照宏观和微观来进行相关解析工作. 首先需要向大家解释如下几个概念: (1) secondaryNamenode: 其实起初我对SN的理解也和大部分人相同,认为SN是NN(nameNode)的一个实时热备份实现HA,并且在一次笔试的过程中

Amazon MWS 上传数据 (一) 设置服务

Amazon 上传数据的流程为: 通过 SubmitFeed 操作.加密标头和所有必需的元数据(包括 FeedType 的值在内),来提交 XML 或文本型数据文件.正如亚马逊 MWS的所有提交内容一样,您还必须包括验证信息.SubmitFeed 操作可返回 FeedSubmissionId 的值,您可以使用该值,通过 GetFeedSubmissionList 操作,对上传数据状态进行定期检查. 如果亚马逊 MWS仍在处理请求,则 GetFeedSubmissionList 操作的 FeedP

HDFS文件上传:8020端口拒绝连接问题解决!

HDFS文件上传:8020端口拒绝连接问题解决! CopyFromLocal: Call to localhost/127.0.0.1:8020 failed on connection exception:      java.net.ConnectException 问题提示本机的8020端口无法连接. 网络上面找到一篇文章是将core-site.xml里面的配置端口修改成8020,但是我们现在依然用他默认的9000端口,只需要在配置eclipse的时候端口修改为9000就可以了. 我的问题

前端上传数据-图片和视频格式校验

上一篇用 promise 嵌套实现了按 excel 行顺序上传数据,这篇要解决的问题是图片和视频格式校验,图片主要有 jpg png gif 视频 mp4 由于用户选择的资源可能并不是真正的多媒体文件,使用 js 的 file.type 方法获取的文件类型可能不准确,比如将 .xlsx 改为 .jpg, file.type 得到的类型是image/jpeg 客户端拉取资源时,图片和视频的分辨率也一并获取,而上传由前端控制,所以上传时对资源要进行比较准确的判断. 我的判断策略: 判断文件后缀,若不

网络编程 UDP协议 TCP局域网客户端与服务端上传下载电影示例

UDP协议 (了解) 称之为数据包协议. 特点: 1) 不需要建立链接. 2) 不需要知道对方是否收到. 3) 数据不安全 4) 传输速度快 5)能支持并发 6) 不会粘包 7) 无需先启动服务端再启动客户端 优点: - 传输速度快 - 能支持并发 - 不会粘包 缺点: - 数据不安全, 容易丢失 应用场景: 早期的QQ聊天室. # server端 import socket # socket.SOCK_DGRAM ---> UPD协议 server = socket.socket(type=s

iOS开发--http协议 post上传数据

NSDictionary *dic=[NSDictionary dictionaryWithObjectsAndKeys:@"123",@"longitude",@"30",@"latitude",@"上传数据",@"message",nil];    //dictionaryToNSJoson    NSError *err=nil;    NSData *jasonData=[NSJ

Struts , Jsp 上传数据乱码问题

今天拿出以前的代码,想重构.却发现运行起来都是乱码,原来都是好好的.心里一着急,就上网去搜索答案. 看了一大堆的Struts中文乱码解决办法. 我总结一下,(1)Jsp方面,最好写上<%@ page pageEncoding="UTF-8" contentType="text/html;charset=UTF-8"%> (2) Struts.xml配置上,配置i18n.encoding 属性,值也为UTF-8(最好!) (3) 如果还是不行,则就要自己写

ASIHTTPRequest框架使用(4)--上传数据

数据上传是通过ASIFormDataRequest类实现的.相当于HTML的表单,因此ASIFormDataRequest请求对象的作用相当于提交表单数据,默认是Post请求方法. - (IBAction)onClick:(id)sender { NSString *strUrl = @"http://iosbook3.com/service/upload.php"; NSURL *url = [NSURL URLWithString:[strUrl URLEncodedString]