Hadoop Distributed System (HDFS) 写入和读取流程

news2024/11/23 9:36:47

一、HDFS

HDFS全称是Hadoop Distributed System。HDFS是为以流的方式存取大文件而设计的。适用于几百MB,GB以及TB,并写一次读多次的场合。而对于低延时数据访问、大量小文件、同时写和任意的文件修改,则并不是十分适合。

目前HDFS支持的使用接口除了Java的还有,Thrift、C、FUSE、WebDAV、HTTP等。HDFS是以block-sized chunk组织其文件内容的,默认的block大小为64MB,对于不足64MB的文件,其会占用一个block,但实际上不用占用实际硬盘上的 64MB,这可以说是HDFS是在文件系统之上架设的一个中间层。之所以将默认的block大小设置为64MB这么大,是因为block-sized对于 文件定位很有帮助,同时大文件更使传输的时间远大于文件寻找的时间,这样可以最大化地减少文件定位的时间在整个文件获取总时间中的比例 。

二、HDFS的体系结构

构成HDFS主要是Namenode(master)和一系列的Datanode(workers)。Namenode是管理HDFS的目录树和相 关的文件元数据,这些信息是以"namespace image"和"edit log"两个文件形式存放在本地磁盘,但是这些文件是在HDFS每次重启的时候重新构造出来的。Datanode则是存取文件实际内容的节 点,Datanodes会定时地将block的列表汇报给Namenode。

由于Namenode是元数据存放的节点,如果Namenode挂了那么HDFS就没法正常运行,因此一般使用将元数据持久存储在本地或远程的机器 上,或者使用secondary namenode来定期同步Namenode的元数据信息,secondary namenode有点类似于MySQL的Master/Salves中的Slave,"edit log"就类似"bin log"。如果Namenode出现了故障,一般会将原Namenode中持久化的元数据拷贝到secondary namenode中,使secondary namenode作为新的Namenode运行起来。

​三、读写流程

GFS论文提到的文件读取简单流程:

​详细流程:

​文件读取的过程如下:

  1. 使用HDFS提供的客户端开发库Client,向远程的Namenode发起RPC请求;

  2. Namenode会视情况返回文件的部分或者全部block列表,对于每个block,Namenode都会返回有该block拷贝的DataNode地址;

  3. 客户端开发库Client会选取离客户端最接近的DataNode来读取block;如果客户端本身就是DataNode,那么将从本地直接获取数据.

  4. 读取完当前block的数据后,关闭与当前的DataNode连接,并为读取下一个block寻找最佳的DataNode;

  5. 当读完列表的block后,且文件读取还没有结束,客户端开发库会继续向Namenode获取下一批的block列表。

  6. 读取完一个block都会进行checksum验证,如果读取datanode时出现错误,客户端会通知Namenode,然后再从下一个拥有该block拷贝的datanode继续读。

GFS论文提到的写入文件简单流程:

​详细流程:

写入文件的过程比读取较为复杂:

  1. 使用HDFS提供的客户端开发库Client,向远程的Namenode发起RPC请求;

  2. Namenode会检查要创建的文件是否已经存在,创建者是否有权限进行操作,成功则会为文件创建一个记录,否则会让客户端抛出异常;

  3. 当 客户端开始写入文件的时候,开发库会将文件切分成多个packets,并在内部以数据队列"data queue"的形式管理这些packets,并向Namenode申请新的blocks,获取用来存储replicas的合适的datanodes列表, 列表的大小根据在Namenode中对replication的设置而定。

  4. 开始以pipeline(管道)的形式将packet写入所 有的replicas中。开发库把packet以流的方式写入第一个datanode,该datanode把该packet存储之后,再将其传递给在此 pipeline中的下一个datanode,直到最后一个datanode,这种写数据的方式呈流水线的形式。

  5. 最后一个datanode成功存储之后会返回一个ack packet,在pipeline里传递至客户端,在客户端的开发库内部维护着"ack queue",成功收到datanode返回的ack packet后会从"ack queue"移除相应的packet。

  6. 如 果传输过程中,有某个datanode出现了故障,那么当前的pipeline会被关闭,出现故障的datanode会从当前的pipeline中移除, 剩余的block会继续剩下的datanode中继续以pipeline的形式传输,同时Namenode会分配一个新的datanode,保持 replicas设定的数量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/631003.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTTP协议【网络基础/应用层】

文章目录 1. 网络基础 TCP/IP2. 与HTTP密切相关的协议2.1 负责传输的 IP 协议路由选择 2.2 确保可靠性的 TCP 协议三次握手 2.3 负责域名解析的 DNS 服务2.4 各种协议和 HTTP 协议的关系 3. URL和编码问题3.1 介绍格式 3.2 编码问题 4. 初识 HTTP 协议4.1 C-S 模式4.2 通过响应…

vue中开发包、生产包、全局包的区别以及安装语法

目录 开发包 (devDependencies) 安装方法 生产包 (dependencies) 安装方法 全局包 (Global build) 安装方法 vue中有三种不同类型的包:开发包 (Development build),生产包 (Production build) 和全局包 (Global build)。下面我们分别解释它们的区别…

EVE-NG 平台搭建以及发布“Ruijieroute”“Ruijieswitch”

下载相关资源 1、锐捷模拟器镜像文件:锐捷镜像官方下载链接 2、VMware虚拟化平台:可以是VMware vSphere、也可以是VMware Workstation:VMware Workstation Pro官方下载链接 当然,我们也可以使用其他虚拟化平台:Orac…

什么,你还在用 momentJs 处理相对时间

我想&#xff0c;下面这段代码&#xff0c;你是不是在开发中常常这样使用来计算距离现在过去了多长时间&#xff1a; import moment from moment // 61k (gzipped:19.k) function Relative(props) {const timeString moment(props.date).fromNow()return <>{timeString…

Tomcat实现ThreadPoolExecutor和JDK线程池区别

1.1 tomcat线程池和juc线程池流程 jdk 线程池策略&#xff1a; 当线程池中线程数量小于 corePoolSize&#xff0c;每来一个任务&#xff0c;就会创建一个线程执行这个任务当前线程池线程数量大于等于 corePoolSize&#xff0c;则每来一个任务&#xff0c;会尝试将其添加到任务…

深入理解深度学习——注意力机制(Attention Mechanism):位置编码(Positional Encoding)

分类目录&#xff1a;《深入理解深度学习》总目录 相关文章&#xff1a; 注意力机制&#xff08;AttentionMechanism&#xff09;&#xff1a;基础知识 注意力机制&#xff08;AttentionMechanism&#xff09;&#xff1a;注意力汇聚与Nadaraya-Watson核回归 注意力机制&#…

【CSS---定位基础篇】

CSS---定位基础篇 CSS-----基础定位:一 、 学习定位原因&#xff1a;&#xff08;定位的作用&#xff09;二 、定位组成&#xff1a;2.1 四种定位模式&#xff1a;&#xff08;1&#xff09;静态定位&#xff08;了解&#xff09;&#xff1a;&#xff08;2&#xff09;相对定位…

8.1 正弦波振荡电路(1)

正弦波振荡电路是在没有外加输入信号的情况下&#xff0c;依靠电路自激振荡而产生正弦波输出电压的电路。它广泛地应用于测量、遥控、通讯、自动控制、热处理和超声波电焊等加工设备之中&#xff0c;也作为模拟电子电路的测试信号。 一、概述、 1、产生正弦波振荡的条件 在负…

“不擅长开发,所以选择测试”,软件测试面试时这么说就凉了...

见过不少软件测试岗位&#xff0c;在面试时&#xff0c;问到选择软件测试作为职业的原因时 有不少测试工程师会回答&#xff1a;因为不擅长或不喜欢开发的工作。 这个想法&#xff0c;这个回答&#xff0c;就已经在面试官眼里打低分了。 现在网上也有不少类似观点 “不喜欢开…

TiDB亿级数据亚秒响应查询将MySql数据同步到TiDB

目录 1 MySQL环境准备1.1 MySQL测试数据库1.1.1 导入数据1.1.2 验证是否成功 2 DM数据迁移2.1 TiUP DM 组件简介2.1.1 基本功能2.1.2 使用限制 2.2 TiUP安装 DM组件2.2.1 安装TiUP DM 组件2.2.2 更新 TiUP DM 组件 2.3 TiUP部署 DM组件2.3.1 编辑初始化配置2.3.2 部署命令格式2…

PID算法:增量式PID 位置式PID

前面的文章已经介绍过什么是pid了&#xff0c;现在再回顾一下&#xff1a; PID&#xff1a;是过程控制中常用的一种针对某个对象或者参数进行自动控制的一种算法。 这一篇分享不打算再深究pid的理论知识&#xff0c;如果有不懂或者对pid感兴趣的朋友&#xff0c;可以自行查阅资…

【docker桌面版】windows使用docker搭建nginx

1.拉取nginx镜像 docker pull nginx 2.运行容器 docker run -d -p 80:8081 --name nginx nginx 3.本地磁盘创建nginx目录 D:\Docker\project\nginx 4.复制docker中的nginx配置文件 查看运行的容器docker ps -a docker cp 8f18d58bc77b:/etc/nginx/nginx.conf D:\Docker…

【Leetcode】DP | 打家劫舍,当一个机灵的小偷

198 打家劫舍 令 D [ i ] D[i] D[i]表示前 i i i间房子的最大收益&#xff1a; D [ i ] max ⁡ ( D [ i − 1 ] , D [ i − 2 ] n u m s [ i ] ) D [ 0 ] n u m s [ 0 ] D [ 1 ] max ⁡ ( n u m s [ 0 ] , n u m s [ 1 ] ) D[i] \max(D[i -1], D[i-2]nums[i]) \\ D[0] …

软件测试工程师如何从功能测试转成自动化测试?

功能测试转成自动化测试&#xff0c;答案就三个字&#xff1a;“靠学习”。 学习自动化的方法无非是三种&#xff1a; 一、靠培训&#xff08;下方有如何选择培训机构&#xff09; 在相对有氛围的学习环境中来学习自动化测试&#xff0c;这是一个较快学习的方法。二、靠自学自…

js文件引入vue $notify组件,自定义添加按钮功能!

import Vue from vue; //新创建一个vue实例 let v new Vue(); const h v.$createElement console.log(h) v.$notify({ dangerouslyUseHTMLString: true, message: h( div, {}, [ h(p, {}, [ h(p, {style:"font-size: 15px;"}, 车架号&#xff1a;${res.rows[0].…

C# Winform 多个程序之间的通信(非Scoket)

效果 功能&#xff1a;打开窗体自动连接主程序&#xff0c;并自动添加到列表&#xff0c;可以向子程序群发消息 可以向单个程序单独发送消息 在退出程序后&#xff0c;添加的程序列表会自动移除 一、概述 参考&#xff1a;C# Winfrom程序之间通讯_c# sendmessege copydatastr…

x宝评论抓取

#某宝评论接口sign参数逆向 1.接口速览 多次请求发现&#xff0c;t为时间戳&#xff0c;sign为加密参数&#xff0c;盲猜和data、t有关&#xff0c;sign为32位&#xff0c;盲猜是字符串的32位的MD5 2.搜索js代码 这里为搜索的是appKey&#xff0c;就找到了sign&#xff0c;然…

如何实现APP自动化测试?

APP测试&#xff0c;尤其是APP的自动化测试&#xff0c;在软件测试工程师的面试中越来越会被问到了。为了更好的回答这个问题&#xff0c;我今天就给大家分享一下&#xff0c;如何进行APP的自动化测试。 一、为了实现JavaAppiumJunit技术用于APP自动化测试&#xff0c;所以需要…

使用AIGC工具提升论文阅读效率

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

接口测试实战工具如何选择?这6个工具首选(建议收藏)

常见接口类型 • HTTP/HTTPS 类型接口 基于HTTP协议开发的接口现在应用是最为广泛的&#xff0c;这类API使用起来简单明了&#xff0c;因为它是轻量级的、跨平台、跨语言的&#xff0c; 但凡是第三方提供的API都会有HTTP版本的接口。 RESTful API也是基于HTTP协议的&#xff0c…