【大数据】分布式文件系统HDFS

目录

1.什么是分布式文件系统

2.HDFS的特点

3.HDFS的核心概念

4.HDFS的体系结构

5.HDFS的配置建议

6.HDFS的局限性

7.HDFS的存储机制

7.1.数据冗余机制

7.2.错误与恢复

8.HDFS数据读写过程


1.什么是分布式文件系统

分布式文件系统是整个大数据技术的基础,是大数据技术栈的核心组件,其解决了海量数据的管理问题,可以说没有分布式文件系统就没有大数据技术。分布式文件系统是起源于Google,Google的分布式文件系统GFS奠定了分布式文件系统的设计思想,市面上目前所有的分布式文件系统都是参照GFS来设计实现的,包括HDFS也是。之前作者有一篇文章专门聊过GFS其中有分布式文件系统的来龙去脉,有兴趣可以移步:

【GFS】大数据技术的基石,分布式文件系统的鼻祖-CSDN博客

2.HDFS的特点

HDFS有以下特点:

  • 能用廉价的设备来搞定

  • 实现流数据读写(因为跑计算任务的时候,往往需要一次性把全部或者绝大多数数据读完,而不是只读一部分,所以HDFS实现了数据的顺序读写,从而实现了流数据读写)

  • 支持各种量级的数据

  • 只支持简单的数据操作,即只支持顺序读写、追加。不支持进行修改!

  • 跨平台,因为是用JAVA开发的

HDFS存在的局限性:

  • 不适合低延迟的数据访问,因为是顺序写入的,要读某一条具体的数据需要先顺序读出之前的数据。

  • 无法高效存储大量小文件

  • 不支持修改文件

3.HDFS的核心概念

块:

一个块默认64MB,其大小可以调整,但是不能调的过大,因为块过大后执行计算任务时计算引擎的并行性就没意义了,因为文件根本就没被分成几块,没被怎么分散的进行存储,可能就一两个子任务去跑一两个块去了,根本就并行计算不起来。

当客户端完成所有数据写入后,会通知NameNode所有的数据块都已经成功写入DataNode,并完成文件关闭操作,也就是说在逻辑上HDFS中一个块中存放的一定是一个文件,不可能一个块儿中存放着来自两个文件的内容。

名称节点和数据节点:

名称节点上面负责维护整个集群中块儿的详细信息,块儿被存在哪儿?各自的顺序是什么?节点的状态和信息等内容。

数据节点什么负责进行具体的数据存储。

名称节点中记录的最核心的两大块内容:

  • FsImage,以树型的方式来记录整个集群中的文件相关信息,树上的每个节点包含文件的复制等级、修改和访问时间、访问权限、块大小以及组成文件的块。要注意,这颗树里面不包含哪些块存储在哪颗树上的这种对应关系。这种映射关系存放在内存中的另一种数据结构中的。

  • editLog,对文件的操作记录。

这两个东西拿来做什么喃?

HDFS中去名称节点上拿块儿所在位置的时候,先通过FsImage来定位文件由哪些块儿组成,然后再去找块儿和数据节点的对应关系,FsImage的存在加速了在NameNode上检索文件块位置的过程。FsImage当然是不能频繁更新的,因为其一定是要保持强一致性的,一旦进行更新,更新期间就会对外拒绝服务,影响系统的可用性。所以就需要editLog来记录集群中文件的操作,为了避免过大的EditLog对NameNode性能的影响,会有定期checkpoint(检查点)操作,将EditLog的部分内容合并到FsImage中,以此来减小EditLog的大小并刷新FsImage。

换句话说HDFS选择了最终一致性,而没有选择强一致性。

这会存在一个问题:万一在最终一致性发生之前,我要访问的文件有操作记录未被记录入FsImage中而是只存在于editLog中时怎么办?这种操作记录可能是这个文件就是新存入集群的,或者这个文件被删除了。

HDFS用了一种补偿机制来解决这种问题,首先我要访问的文件大概率是存在FsImage中的,在editlog中还没合过去只是小概率事件。所以HDFS会现在FsImage中找文件存在哪些块中,如果FsImage中没有,再去editLog中找有没有,这样就不会出现漏网之鱼。就是说当我们访问一个文件时一定是要走FsImage以及editLog的,要两份文件合起来才能确定文件的最终状态,只是说小概率会出现我们要访问的文件操作在editLog中,但是不在FsImage中对吧,所以其实没必要发现这种情况就立即进行合并,而是仍然可以在固定的时间再进行合并。

第二名称节点:

在早期版本的Hadoop中存在一个第二名称节点,在Hadoop 2.x及更高版本中,第二名称节点的功能已经被更加完善的组件取代。

第二名称节点是对名称节点的一个冷备,之所以说是冷备,是因为其并不同步名称节点的内存状态,也就是说并没有完整的元数据,其只负责定期从主NameNode下载FsImage和EditLog文件,合并FsImage和EditLog中的最新变更,然后将新的FsImage文件上传回主NameNode,以此来帮助主NameNode减少合并FsImage和EditLog所需的时间,减轻主NameNode的压力,防止EditLog过大,进而优化系统性能和稳定性。

元数据:

元数据的核心组成部分包括:

  • 文件和目录的元数据:包括文件和目录的名称、路径、权限、所有权、创建时间、修改时间等基本属性信息。

  • 块信息:不在fsimage上,而是在内存中,包括每个文件被切分成的块的数据块ID、块的大小以及块的副本数量等信息,以及每个数据块的所有副本在哪些DataNode上的映射关系,即块到节点的映射关系。

  • 命名空间管理:维护整个文件系统的目录结构,即文件和目录的层级关系。

FsImage 和 EditLog 则是用于持久化和管理这些元数据的两种关键机制。

4.HDFS的体系结构

5.HDFS的配置建议

DataNode用来存数据和跑计算任务,因此其需要一定扽内存用来跑任务和大量的硬盘存储来存放数据,一般企业级应用建议DataNode的配置为:

NameNode用来存元数据,元数据是经常要用到的,所以存在内存中,所以NameNode的内存要够大,一般企业应用建议NameNode的配置为:

secondNameNode的配置和NameNode对齐。

6.HDFS的局限性

  • 因为名称节点的元数据都是保存在内存中的,因此,名称节点能容纳的块的个数是有上限的。

  • 集群的吞吐量受名称节点的吞吐量限制。

  • 隔离问题,集群中只有一个名称节点,一个命名空间,无法对不同应用进行隔离。

  • 容错性不高,因为名称节点是单点的,一旦故障,集群就崩了。

以上局限性完整存在于1.0版本中,2.0版本已经优化掉了一些。

7.HDFS的存储机制

7.1.数据冗余机制

因为是用廉价机器搭建起来的,出故障是常态,所以需要数据冗余机制来存储数据。HDFS中采用副本机制来进行冗余,默认副本数量为3个。

数据块进集群来,先复制成三个副本,副本一会被放在最优节点(磁盘占用最少)的节点上,然后副本二、副本三被放到不同的节点上。

那么数据读取的时候会先读哪个喃?

HDFS提供了一个API来确定数据节点所在的机架ID,客户端可以调用API来获取自己所属的机架ID。当客户端读数据的时候可以通过这个API来决定要去读哪一个副本。这个机架ID不一定是物理上存在的,数据节点和机架ID之间的映射关系是可以配置的,就是个逻辑的代号,一般来说机架ID越小表示距离越近。

7.2.错误与恢复

HDFS中会出哪些错误?无非就三类:

  • 名称节点出错

  • 数据节点出错

  • 数据本身出错

名称节点出错:

名称节点宕机,整个集群将对外拒绝提供服务,然后在1.0版本中需要重新将名称节点恢复正常,启动然后同第二名称节一起合作将元数据正确的恢复过来。在2.0版本中存在热备,直接会切热备,然后集群恢复工作。

数据节点出错:

数据节点是通过心跳来和名称节点上报自己还存活的,所以名称节点是能感知到数据节点是否存活的,如果名称节点发现有数据节点宕机了,会将其上面存储的数据复制到其它节点,注意不是从宕机的那台机器上复制,而是宕机那台机器上存储的数据在其他节点上一定还有备份,从其它节点上拉出来存到另外的节点上,维持数据副本的基数。

数据本身出错:

由于是用廉价机器组的集群,磁盘出错的概率是存在的,因此存在数据校验机制。每个数据块在被创建的时候都有一个校验码,读块数据的时候会通过校验码进行校验,要是发现不对,名称节点会从其它备份中将出问题的数据恢复过来。

8.HDFS数据读写过程

本文侧重于介绍HDFS的理论,所以这里只是简单结合JAVA API来过一下数据的读写过程,后面有文章会详细聊HDFS的操作和JAVA API。

读数据:

写数据:

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

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

相关文章

京东AI数字人“采销东哥”首秀观看量破2000万;天工 SkyMusic 音乐大模型开放公测

🦉 AI新闻 🚀 京东AI数字人“采销东哥”首秀观看量破2000万 摘要:京东AI数字人“采销东哥”由京东云言犀打造,在其直播首秀中亮相并迅速吸引超2000万观看量。尽管“采销东哥”的外形和口音与创始人刘强东相似,但其直…

C语言的OJ判题机设计与实现

1. 接收判题入参 判题需要作答代码、测试输入和期望输出、编译器名称、时空限制。对于支持special judge的还需要传入是否为sj和sj代码。推荐使用消息队列,应对高并发的比赛情况会比较好。 但是消息队列是异步的,我为了快点实现能提交后在当前页面获得判…

Linux: security: sudo 的一个隐藏问题

说这个隐藏是根据一般的知识,肯定是想不到它会读取本机的ip地址和mask。 这个命令在执行的时候会读取本地地址列表。是下面这个commit引进来的一个plugin https://github.com/sudo-project/sudo/commit/1009d7a3e6ed2b7811473c91d90082cfe4dd2db9 /* Load local IP…

量子密钥分发系统的设计与实现(二):光路子系统初步讨论

通过上一篇文章,我们对量子密钥分发系统的基本架构、硬件结构以及密钥分发流程进行了初步的总体介绍,从本文开始,我们就基于系统顶层的架构设计,开始从模块到器件,从硬件到软件开始详细讨论QKD系统的设计与实现。本文主…

双向链表详解

目录 带头双向循环链表带头双向循环链表的实现带头双向循环链表的功能实现创造新节点LTNode* CreateLTNode(LTDataType x)代码 初始化链表LTNode*LTInit(LTNode* phead)代码 打印链表void LTPrint(LTNode* phead)代码 链表尾插void LTPushBack(LTNode* phead, LTDataType x)代码…

C#语法知识之运算符

3、运算符 1、算数运算符 1、赋值符号 //把右侧的值赋给左侧的变量2、算数运算符 _ * / float f 1 / 2f; %3、算数运算符的优先级 //乘除余优先级高于加减 括号可以改变优先级,优先计算括号内的内容4、算数运算符的复合运算 复合运算符是用于自己 自己进行运算…

2024-04-17 学习笔记(李宏毅AI基础课,图像预处理)

1.Hung-yi Lee 摘要:这篇文章介绍了李宏毅教授的课程内容和作业安排,涵盖了深度学习的理论、优化、泛化、特殊网络结构、特殊训练技术、生成对抗网络(GAN)以及深度强化学习等主题。 Raiden说:基础知识,常学常新 2.软包装锂离子电…

源码解读——SplitFed: When Federated Learning Meets Split Learning

源码地址 1. 源码概述 源码里一共包含了5个py文件 单机模型(Normal_ResNet_HAM10000.py)联邦模型(FL_ResNet_HAM10000.py)本地模拟的SFLV1(SFLV1_ResNet_HAM10000.py)网络socket下的SFLV2(SF…

51单片机入门_江协科技_33~34_OB记录的自学笔记_LED呼吸灯与PWM直流马达调速

33. 直流电机驱动(PWM) 33.1. 直流电机介绍 •直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极,当电极正接时,电机正转,当电极反接时,电机反转 •直流电机主要由永磁体(定子)、线圈&…

笔记本触摸板的使用

使用电脑很多面年了,但很少使用触摸板,最近公司配置了台新笔记本触摸板很丝滑,像着改变一下多年使用电脑的习惯,做个笔记,使用它,适应它! 单手指: 单击→左键 两次单击→打开文件夹&…

MySQL 死锁案例解析一则

原文链接:https://www.modb.pro/db/448666 一、问题背景某业务模块反馈数据库最近出现过几次死锁告警的情况,本文总结了这次死锁排查的全过程,并分析了导致死锁的原因及解决方案。希望给大家提供一个死锁的排查及解决思路。基础环境&#xff…

绩效考核管理:激发潜力,实现双赢

绩效考核管理是现代企业管理中不可或缺的一环,它不仅关乎员工的个人发展,更影响着企业的整体战略目标实现。本文将从绩效考核管理的意义、目标设定、考核方法、激励措施以及持续改进等方面展开论述,探讨如何通过有效的绩效考核管理激发员工潜…

Win10系统WSL2烧录SD卡(USB储存设备)

众做周知在嵌入式开发中经常需要制作SD卡系统来启动开发板,最近从虚拟机转到WSL发现不能像以前那样对SD卡进行操作了,记录下解决方法(我的系统环境是Win10WSL2) 编译WSL2内核 由于WSL2的内核默认没有添加USB存储设备的驱动的支持…

一.NODE MCU(ESP8285,ESP8286)开发环境搭建

一.序言: 1.esp8285长什么样? 2.esp8285是什么,能做什么? 通过上面图片,看到上面的芯片,是带有多个阵脚的单片机。实际上,看着该芯片很小,但是却具有完整的wifi无线蓝牙功能,它本身可以运行一个极简的linux小系统,并且该极简的小linux系统具备无线蓝牙功能。。它同…

Linux: 性能: sysctl vs echo vs直接使用fopen

简介 在实际的生产中,需要对系统参数做修改,有三种方式可以实现,一个是sysctl命令来修改,一个是使用echo 命令来写入,另一个是使用fopen/write接口函数来操作配置文件。 这个对比也是相当的明显,echo要比s…

54岁前港姐与好友因一事反目成仇,20年后方破冰

现年54岁的前「金牌司仪」陈淽菁(前名:陈芷菁)是1994年落选港姐,之后加入TVB参演电视剧《天地男儿》、《壹号皇庭》入屋,后因口齿伶俐而转战主持界。2017年陈淽菁离巢,外出以个人名义成立「陈芷菁工作室」&…

每日学习笔记:C++ STL算法之容器元素转换、结合、互换

本文API 转换元素 transform(sourceBeg,sourceEnd,destBeg, op) 结合元素 transform(source1Beg,source1End,source2Beg,destBeg, op) 互换元素 swap_ranges(sourceBeg,sourceEnd,destBeg) 转换元素 结合元素 互换元素

聚焦ChatGPT:让论文写作更高效更精准

ChatGPT无限次数:点击直达 html 聚焦ChatGPT:让论文写作更高效更精准 引言 在当今信息爆炸的时代,撰写高质量论文变得越发重要。然而,许多研究者和学者在论文写作过程中常常遇到困难,例如构思内容、整合观点和确保表达准确。…

什么是Cookies?请求Cookies和响应 Cookies的关系

一、什么是cookies 在早期的网络发展中,如何管理状态一直是一个棘手的问题。由于HTTP协议的无状态特性,服务器无法判断连续的两个请求是否来自同一个浏览器。为了解决这个问题,最初的方案是在请求时将一些参数嵌入到页面中,并在…

深度学习驱动的流体力学计算与应用

在深度学习与流体力学深度融合的背景下,科研边界不断拓展,创新成果层出不穷。从物理模型融合到复杂流动模拟,从数据驱动研究到流场智能分析,深度学习正以前所未有的力量重塑流体力学领域。近期在Nature和Science杂志上发表的深度学…