【大数据】第三章:详解HDFS(送尚硅谷笔记和源码)

news2024/12/24 22:04:19

什么是HDFS

HDFS是(Hadoop Distributed File System)的缩写,也即Hadoop分布式文件系统。它通过目录树定位在分布式场景下 在不同服务器主机上的文件。它适用于一次写入,多次读出的场景。

HDFS的优缺点

优点

1,高容错性,一份文件在多台服务器上都有备份,不存在因为一台服务器宕机而造成文件丢失的情况。
2,存储量大,数据规模:接近TB。数量规模:接近百万。
3,可搭建在廉价的电脑上,不需要专门的服务器。

缺点

1,读取速度慢。
2,无法高效的存储大量的细小文件,大量的小文件,HDFS的查找时间远大于读取时间,违反了HDFS的设计初衷。
3,不支持并发写入,不支持随机修改了。要修改的数据只能追加在文件的末尾。

HDFS的组成

NameNode

HDFS的老大,只操作小弟,不操作具体的数据。

DataNode

HDFS的小弟,负责操作具体的数据。
在这里插入图片描述

Client

客户端,直接打开的hadoop页面是客户端,写的HDFS命令是客户端,后端写的代码也是客户端。

SecondaryNameNode

大哥的秘书,分担老大的工作,比如定时备份数据:操作Fsimage和Edits
在这里插入图片描述

HDFS中的块大小

HDFS文件在物理上采用分块存储,在Hadoop1.x版本中是64M,在Hadoop2.x和3.x版本中采用128M。
其大小可以修改配置 dfs.blocksize来决定。
为什么要采用128M作为大小?
寻址时间为0.01s,按照HDFS的设计思路,数据在传输的时间应为寻址时间的0.01,那么传输时间就为1s,机械硬盘的读写速度为100M/s。所以一个块选择其大小为128M。
总结:块大小取决于服务器硬盘的传输效率。

HDFS的Shell操作

这些百度就有
尚硅谷Hadoop3.x官方文档大全免费下载。
https://pan.baidu.com/share/init?surl=P5JAtWlGDKMAPWmHAAcbyA 提取码:5h60

HDFS的JavaApi操作

源码在GitHub

HDFS的读写流程

HDFS的写数据流程

文件写入流程

在这里插入图片描述
(1)客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在。
(2)NameNode返回是否可以上传。
(3)客户端请求第一个 Block(128M)上传到哪几个DataNode服务器上。
(4)NameNode返回3个DataNode节点,分别为dn1、dn2、dn3。
(5)客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成。
(6)dn1、dn2、dn3逐级应答客户端。
(7)客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位,dn1收到一个Packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答。是第一个应答后传给第二个,再传给第三个
(8)当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务器。(重复执行3-7步)。

节点距离计算

HDFS在写入数据时,NameNode会选择距离最近的DataNode,写入数据,那么他是如何计算距离的呢?
在这里插入图片描述

机架感知(副本存储节点选择)

在“文件写入流程”中d1是数据存储的位置,d2,d3都是d1文件副本(冗余)存储的DataNode。那么HDFS他是如何选择冗余副本应该放在哪的呢?
(1)官方说明

http://hadoop.apache.org/docs/r3.1.3/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html#Data_Replication For the common case, when the replication factor is three, HDFS’splacement policy is to put one replica on the local machine if the writer is on a datanode, otherwise on a random datanode, another replica on a node in a different (remote) rack, and the last on a different node in the same remote rack. This policy cuts the inter-rack write traffic which generally improves write performance. The chance of rack failure is far less than that of node failure; thi policy does not impact data reliability and availability guarantees. However, it does reduce the aggregate network bandwidth used when reading data since a block is placed in only two unique racks rather than three. With this policy, the replicas of a file do not evenly distribute across the racks. One third of replicas are on one node, two thirds of replicas are on one rack, and the other third are evenly distributed across the remaining racks. This policy improves write performance without compromising data reliability or read performance.

(2)Hadoop3.1.3副本节点选择
在这里插入图片描述

HDFS的读数据流程

在这里插入图片描述
(1)Client通过对象:分布式文件系统向NameNode请求下载文件,NameNode进行权限和文件校验。并返回具体的DataNode地址。
(2)挑选一台DataNode(就近原则+负载原则)穿行读数据。!非并行!
(3)DataNode开始传输数据给客户端(以Packet为单位来做校验)。Packet = 64K
(4)客户端以Packet为单位接收,先在本地缓存,然后写入目标文件。

NameNode和2NameNode

NN和2NN工作机制

DataNode中数据又备份,那NameNode中的数据没有备份吗?
当然有,NameNode数据备份类似Redis的AOF和RDB技术,采用FsImage和Edits的合并,合成元数据。并把这个备份程序,交由2NN进行运行。
在这里插入图片描述
1)第一阶段:NameNode启动
(1)第一次启动NameNode格式化后,创建Fsimage和Edits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。
(2)客户端对元数据进行增删改的请求。
(3)NameNode记录操作日志,更新滚动日志。
(4)NameNode在内存中对元数据进行增删改。
2)第二阶段:Secondary NameNode工作
(1)Secondary NameNode询问NameNode是否需要CheckPoint。直接带回NameNode是否检查结果。
(2)Secondary NameNode请求执行CheckPoint。
(3)NameNode滚动正在写的Edits日志。
(4)将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode。
(5)Secondary NameNode加载编辑日志和镜像文件到内存,并合并。
(6)生成新的镜像文件fsimage.chkpoint。
(7)拷贝fsimage.chkpoint到NameNode。
(8)NameNode将fsimage.chkpoint重新命名成fsimage。
要备份数据,就将fsimage和最新的edits_inprogress进行合并。
每次NameNode启动的时候都会将Fsimage文件读入内存,加载Edits里面的更新操作,保证内存中的元数据信息是最新的、同步的,可以看成NameNode启动的时候就将Fsimage和Edits文件进行了合并。

DataNode

DataNode的工作机制

1,DataNode检查是否在正常,
1>DataNode每3秒向NameNode发送心跳,如果在10分钟+20秒NameNode还是没有接收到DataNode的心跳就默认为DataNode挂掉了。
2>一个DataNode中有很多块,NameNode周期性校验节点块的时间为6H,周期性向NameNode汇报节点情况的时间也为6H。
2,数据具体在DataNode中的块中有。数据+数据长度+校验和+时间戳
在这里插入图片描述

校验数据的完整性

在获取数据的API操作中,方法最后一个参数是True或者False。也就是是否要采用CRC校验数据的完整性。
在这里插入图片描述

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

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

相关文章

leaflet 添加zoomslider,控制zoom放大缩小(074)

第074个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中使用zoomslider,相比于普通的zoom控件,这个更加形象,更加具体些。 直接复制下面的 vue+leaflet源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共65行)相关API参考:专栏目…

14_FreeRTOS二值信号量

目录 信号量的简介 队列与信号量的对比 二值信号量 二值信号量相关API函数 实验源码 信号量的简介 信号量是一种解决同步问题的机制,可以实现对共享资源的有序访问。 假设有一个人需要在停车场停车 1.首先判断停车场是否还有空车位(判断信号量是否有资源) 2.停车场正好…

CSS 中的 BFC 是什么,有什么作用?

BFC,即“块级格式化上下文”(Block Formatting Context),是 CSS 中一个重要的概念,它指的是一个独立的渲染区域,让块级盒子在布局时遵循一些特定的规则。BFC 的存在使得我们可以更好地控制文档流&#xff0…

TensorRT中的常见问题

TensorRT中的常见问题 文章目录TensorRT中的常见问题14.1. FAQs14.2.Understanding Error Messages14.3. Code Analysis Tools14.3.1. Compiler Sanitizers14.3.1.1. Issues With dlopen And Address Sanitizer14.3.1.2. Issues With dlopen And Thread Sanitizer14.3.1.3. Iss…

STM32单片机DHT11数字温湿度监测

OLED液晶接口电路图DHT11传感器接口电路图STM32单片机DHT11数字温湿度监测程序源代码#include "sys.h" #define LED_RED PBout(12) //红色发光二极管控制管脚PB12#define LED_GREEN PBout(13) //绿色发光二极管控制管脚PB13#define LED_YELLOW PBout(14) //黄色发光二…

网络编程原理(1)

一.IP地址:标识了网络上设备所在的位置端口号:标识了一个具体的应用程序二.认识协议:发送方和接收方双方进行的一种约定,发送方约好了我发的数据是啥样的,接收方按照这个固定的格式来进行解析。如果这个协议比较大&…

MongoDB 正则表达式

MongoDB 正则表达式 正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。 MongoDB 使用 $regex 操作符来设置匹配字符串的正则表达式。 MongoDB使用PCRE (Perl Compatible Regular Expression) 作为正则表达式语言。 不同于全文检索,我们使…

有趣的HTML实例(十二) 早安、晚安动画(css+js)

这话在我心里已经复习了几千遍。我深恨发明不来一个新鲜飘忽的说法,只有我可以说只有你可以听,我说过,我听过,这说法就飞了,过去、现在和未来没有第二个男人好对第二个女人这样说。 ——《围城》 目录 一、前言 二、…

MySQL中的事务详解

目录 一.什么是事务 二.事务操作 演示 小结 三.事务的特性 四.事务的隔离级别 概述 四种隔离级别 脏读、不可重复读、幻读 操作 一.什么是事务 在MySQL中的事务(Transaction)是由存储引擎实现的,在MySQL中,只有InnoDB存储引擎才支持…

【动态规划】背包问题题型及方法归纳

背包问题的种类 背包问题是在规定背包容量为j的前提下,每个物品对应的体积为v[i],价值为w[i],从物品0到物品i中选择物品放入背包中,找出符合某种要求的价值。 (1)背包问题种类 01背包:每种物…

访学案例|经济学老师加急英签如期出国

N老师是学校资助的公派访学,指定英国,要求年底前出国。经过努力,我们为其落实了经济学学术研究排名位列全英第五的埃塞克斯大学。为保证预留充足的准备时间,N老师选择了超级加急的AV签证,24小时过签,最终如…

基于 VPX 总线的工件台运动控制系统研究与开发-以光刻运动台为例(一)

工件台系统是光刻机的关键子系统之一,工件台运动控制系统对实现光刻机性能指标具有至关重要的作用,因此研发工件台运动控制系统具有极其重要的工程应用价值。论文根据工件台控制系统必须具备的并行性、同步性和实时性等技术需求,建立了基于 V…

【Kubernetes】CI/CD 简介与 ECS 服务规划

一,前言 去年公司上了一个持续集成平台,设计技术组件与开源工具集,大致如下: 使用 Gitlab 作为代码的管理和托管工具;使用 Gitlab CI 持续集成工具;使用 Docker 开源应用容器引擎;使用 Harbor…

ABO溶血症概率

[简介]ABO溶血是由于母亲和胎儿ABO血型不合引起的新生儿溶血,概率不是很大,一般出现在准妈妈是O血,准爸爸是非O血,这次容易发生血型不合,但新生儿ABO溶血概率不高,大多数症状相对较轻。ABO溶血的概率是什么…

2023美赛必须注意事项

文章目录首页部分要求竞赛期间题目查看题目下载论文要求比赛提示控制号提交解决方案更多注意事项首页部分要求 具体如下: 我提取一些关键词如下: 第一页:摘要页字体要求:12点的 Times New Roman 字体请勿在此页面或任何页面上…

几种在Linux/window下查询外网IP的办法。

hello world curl ifconfig.me/ip如下图 1. 纯文本 https://ifconfig.me/ip https://ipinfo.io/ip 或 https://ipecho.net/ip 或 https://ipecho.net/plain https://www.trackip.net/ip https://icanhazip.com 2. JSON格式 https://ifconfig.me/all.json https://ipi…

见微可视化平台研究(一)

1. Python项目部署 使用容器部署 将Dockerfile拷贝道algo目录: # docker build -t algo:v1 . # docker run -d -p 5000:5000 algo:v12. 部署依赖数据库 2.1 MySQL初始化 MySQL安装忽略,初始化脚本: backend/datascience-service/src/mai…

从0到1一步一步玩转openEuler--16 openEuler使用DNF(YUM)管理软件包组

文章目录16.1 列出软件包组清单16.2 显示软件包组信息16.3 安装软件包组16.4 删除软件包组DNF是一款Linux软件包管理工具,用于管理RPM软件包。DNF可以查询软件包信息,从指定软件库获取软件包,自动处理依赖关系以安装或卸载软件包,…

扬帆策略|10万亿市场疯狂反攻,撑爆5万人,大牛市要来了?

今日商场太强了,很多财物都在猛涨,有一种牛市已来的感觉! 首先,来看一向被我们视为核心财物的茅台酒价。据白酒数据渠道“不贰酱”音讯,今日茅台酒行情价全线大涨。飞天方面,全系列又有20元/瓶的涨幅&#…

c++11 标准模板(STL)(std::multimap)(八)

定义于头文件 <map> template< class Key, class T, class Compare std::less<Key>, class Allocator std::allocator<std::pair<const Key, T> > > class multimap;(1)namespace pmr { template <class Key, class T…