您当前的位置:首页 > 电脑百科 > 电脑知识

一文理解HDFS

时间:2020-07-25 12:53:23  来源:  作者:

一、架构原理

HDFS 是Hadoop Distributed File System的简称,是HADOOP抽象文件系统的一种实现。Hadoop抽象文件系统可以与本地系统、Amazon S3等集成,甚至可以通过Web协议(webhsfs)来操作。

HDFS是由一个NAMENODE与多个DATANODE构成,如下图。

其中NAMENODE负责管理分布式文件系统的命名空间(Namespace)。

DATANODE 数据节点,用来具体的存储文件,维护了blockId 与 datanode本地文件的映射。

换个理解方法就是MASTER WORKER 模式,其中NAMENODE 对应是master,进所有datanode的datanode mate 信息的关联以及监控等相关事情。而DATANODE只负责存储数据。

一文理解HDFS

 

HDFS基础知识思维导图如下:

一文理解HDFS

 

二、写文件过程

一文理解HDFS

 

  1. Client 调用 DistributedFileSystem 对象的 create 方法,创建一个文件输出流(FSDataOutputStream)对象;
  2. 通过 DistributedFileSystem 对象与集群的 NameNode 进行一次 RPC 远程调用,在 HDFS 的 Namespace 中创建一个文件条目(Entry),此时该条目没有任何的 Block,NameNode 会返回该数据每个块需要拷贝的 DataNode 地址信息;
  3. 通过 FSDataOutputStream 对象,开始向 DataNode 写入数据,数据首先被写入 FSDataOutputStream 对象内部的数据队列中,数据队列由 DataStreamer 使用,它通过选择合适的 DataNode 列表来存储副本,从而要求 NameNode 分配新的 block;
  4. DataStreamer 将数据包以流式传输的方式传输到分配的第一个 DataNode 中,该数据流将数据包存储到第一个 DataNode 中并将其转发到第二个 DataNode 中,接着第二个 DataNode 节点会将数据包转发到第三个 DataNode 节点;
  5. DataNode 确认数据传输完成,最后由第一个 DataNode 通知 client 数据写入成功;
  6. 完成向文件写入数据,Client 在文件输出流(FSDataOutputStream)对象上调用 close 方法,完成文件写入;
  7. 调用 DistributedFileSystem 对象的 complete 方法,通知 NameNode 文件写入成功,NameNode 会将相关结果记录到 editlog 中。

三、读文件过程

一文理解HDFS

 

  1. Client 通过 DistributedFileSystem 对象与集群的 NameNode 进行一次 RPC 远程调用,获取文件 block 位置信息;
  2. NameNode 返回存储的每个块的 DataNode 列表;
  3. Client 将连接到列表中最近的 DataNode;
  4. Client 开始从 DataNode 并行读取数据;
  5. 一旦 Client 获得了所有必须的 block,它就会将这些 block 组合起来形成一个文件。

四、问题

1、数据错误,hdfs是怎么解决的呢?

原因 :由于网络传输与磁盘错误等因素。

解决办法:在客户端读取到数据后,会采用MD5和sha1对数据块进行校验,以确定读取到正确的数据。

具体流程:

  • 在文件被创建的时候,客户端对文件进行摘录,并把这些信息写入数据的同一路径隐藏文件中。
  • 当客户端读取文件的时候,会先读取该信息文件,然后利用该信息文件对每个读取的数据块进行校验,如果校验出错,客户端就会请求到另外一个数据接地那读取该文件快,并且向NAMENODE报告这个文件块有错误,NAMENODE会定期检查并且重新复制这个块。

2、数据节点出错

DATANODE 难免会造成不可用

解决思路主要是通过心跳的方式

解决流程:

  1. 每个数据节点会定期向NAMEnode 节点发送心跳,向namenode报告自己的状态。
  2. 当数据节点发生故障或者网络发生断网时,namenode节点就无法收到来自以下数据节点的心跳信息。这些数据节点就会被标记为宕机,节点上面的所有数据都会标记为不可读,namenode不会再给他们发送任何的IO请求。
  3. 这时,有可能出现一种情况,由于一些数据节点的不可用,会导致一些数据块的副本量小于冗余因子。
  4. namenode 会定期检查这些数据情况,一旦发现某些数据块的副本数量小于冗余因子,就会启动数据冗余复制,为它生产新的副本。
  5. HDFS和其他分布式文件系统最大的区别就是可以调整冗余数据的位置。

3、namenode 节点出错(单点故障问题)

namenode节点保存了所有的元数据信息,其中最核心的两大数据结构是FsImage 合Editlog,如果这两个文件发生了损坏,那么整个HDFS实例降 失效。

因此,HDFS设置了备份机制,把这些核心文件同步复制到备份服务器SecondaryNameNode上。当namenode出错时,就可以根据备份服务器SecondaryNameNode中的FsImage和Editlog数据进行恢复。

4、小文件问题以及DATANODE水平扩展极限问题

Hadoop中每个目录、文件和block都会以对象的形式保存在NameNode的内存中。根据经验每个对象在内存中大概占用150个字节。HDFS中保存2000万个文件,每个文件都在同一个文件夹中,而且每个文件都只有一个block,则NameNode需要6GB内存。

小文件问题:

1、当NameNode重启时,它都需要从本地磁盘读取每个文件的元数据,意味着你要读取300GB数据到内存中,不可避免导致NameNode启动时间较长。

2、一般来说,NameNode会不断跟踪并检查每个数据块的存储位置。这是通过DataNode的定时心跳上报其数据块来实现的。数据节点需要上报的block越多,则也会消耗越多的网络带宽/时延。即使节点之间是高速网络(万兆/光纤),但不可避免的会带来一些不好的影响。

3、NameNode本身使用300G内存,相当于JVM你需要配置300GB的heap,对于JVM来说本来就存在稳定性的风险,比如GC时间较长。

另外大量小文件意味着大量的随机磁盘IO,磁盘IO通常是MapReduce性能的最大瓶颈之一,在HDFS中对于相同数量的数据,一次大的顺序读取往往优于几次随机读取的性能。

5、HDFS为什么是128M这么大的一个数据块呢?

在文件系统中,系统存储文件时,需要定位该数据在磁盘中的位置,再进行传输处理。

定位在磁盘的位置需要时间,同样文件传输也是需要时间的。

 

T(存储时间)=T(定位时间)+T(传输时间)

如果每个要传输的块设置得足够大,那么从磁盘传输数据的时间可以明显大于定位这个块开始位置的时间。

一文理解HDFS

 

假如文件太小,在namenode 的映射列表就会非常大,影响寻址时间,寻址时间如果大于传输时间,就没有意义了。

但如果block 设置过太大,在MapReduce 任务中,Map或者Reduce任务的个数小于集群机器数量,会使得作业运行效率很低。

6、namenode还存在哪些问题以及怎么解决?

存在问题:

  • 单点故障问题
  • 不可以水平扩展(是否可以通过纵向扩展来解决?)
  • 系统整体性能受限于单个名称节点的吞吐量
  • 单个名称节点难以提供不同程序之间的隔离性

解决方案

热备份 (HDFS HA)

HDFS HA(High Availability)是为了解决单点故障问题

HA集群设置两个名称节点,“活跃(Active)”和“待命(Standby)”

两种名称节点的状态同步,可以借助于一个共享存储系统来实现

一旦活跃名称节点出现故障,就可以立即切换到待命名称节点

Zookeeper确保一个名称节点在对外服务

名称节点维护映射信息,数据节点同时向两个名称节点汇报信息

一文理解HDFS

 

存在的问题就有可能出现脑裂的问题。

Federation

多个命名空间。为了处理一个namenode的局限性,搞了几个namanode大家一起来管理。就像编程中的命名空间一样

一文理解HDFS

 

在HDFS Federation中,设计了多个相互独立的名称节点,使得HDFS的命名服务能够水平扩展,这些名称节点分别进行各自命名空间和块的管理,相互之间是联盟(Federation)关系,不需要彼此协调。并且向后兼容

HDFS Federation中,所有名称节点会共享底层的数据节点存储资源,数据节点向所有名称节点汇报

属于同一个命名空间的块构成一个“块池

HDFS Federation设计可解决单名称节点存在的以下几个问题:

1. HDFS集群扩展性。多个名称节点各自分管一部分目录,使得一个集群可以扩展到更多节点,不再像HDFS1.0中那样由于内存的限制制约文件存储数目

2. 性能更高效。多个名称节点管理不同的数据,且同时对外提供服务,将为用户提供更高的读写吞吐率

3. 良好的隔离性。用户可根据需要将不同业务数据交由不同名称节点管理,这样不同业务之间影响很小

参考文章

https://developer.ibm.com/zh/articles/os-cn-hadoop-name-node/

https://blog.csdn.net/xjz729827161/article/details/79463140



Tags:HDFS   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
背景相比较于个人PC,服务器一般可以通过挂载多块磁盘来扩大单机的存储能力。服务器和磁盘在Hadoop HDFS中,DataNode负责最终数据block的存储,在所在机器上的磁盘之间分配数据块...【详细内容】
2021-12-10  Tags: HDFS  点击:(22)  评论:(0)  加入收藏
前言我们可以从java.io.InputStream类中看到,抽象出一个read方法,用来读取已经打开的InputStream实例中的字节,每次调用read方法,会读取一个字节数据,该方法抽象定义,如下所示:publ...【详细内容】
2021-04-09  Tags: HDFS  点击:(161)  评论:(0)  加入收藏
Hadoop作为大数据主流的基础架构选择,至今仍然占据着重要的地位,而基于Hadoop的分布式文件系统HDFS,也在大数据存储环节发挥着重要的支撑作用。今天的大数据入门分享,我们就主要...【详细内容】
2020-12-29  Tags: HDFS  点击:(123)  评论:(0)  加入收藏
一、HDFS介绍上篇文章已经讲到了,随着数据量越来越大,在一台机器上已经无法存储所有的数据了,那我们会将这些数据分配到不同的机器来进行存储,但是这就带来一个问题:不方便管理和...【详细内容】
2020-08-13  Tags: HDFS  点击:(56)  评论:(0)  加入收藏
一、架构原理HDFS 是Hadoop Distributed File System的简称,是HADOOP抽象文件系统的一种实现。Hadoop抽象文件系统可以与本地系统、Amazon S3等集成,甚至可以通过Web协议(webhs...【详细内容】
2020-07-25  Tags: HDFS  点击:(89)  评论:(0)  加入收藏
本章大纲4.1 HDFS写数据流程4.1.1 剖析文件写入HDFS写数据流程,如图所示。HDFS写数据流程1)客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文...【详细内容】
2020-06-26  Tags: HDFS  点击:(80)  评论:(0)  加入收藏
> Photo by Mr Cup / Fabien Barral on Unsplash 随着技术的快速变化,越来越多的数据一直在生成。据最新的全球数据领域估计,到2025年,全世界产生的数据量将增长到175 ZB。公...【详细内容】
2020-05-21  Tags: HDFS  点击:(119)  评论:(0)  加入收藏
分布式文件系统是分布式领域的一个基础应用,其中最著名的毫无疑问是 HDFS/GFS 。如今该领域已经趋向于成熟,但了解它的设计要点和思想,对我们将来面临类似场景/问题时,具有借鉴意义。...【详细内容】
2020-04-03  Tags: HDFS  点击:(58)  评论:(0)  加入收藏
flume hdfs 大数据 数据采集以下是关于一个agent的exec-hdfs.properties采集配置文件 # 定义这个agent中各组件的名字a1.sources = r1a1.sinks = k1a1.channels = c1#【Sou...【详细内容】
2019-12-02  Tags: HDFS  点击:(151)  评论:(0)  加入收藏
一.常用命令实操(1)-help:输出这个命令参数bin/hdfs dfs -help rm(2)-ls: 显示目录信息hdfs dfs -ls /(3)-mkdir:在hdfs上创建目录hdfs dfs -mkdir -p /aaa/bbb/cc/dd(4)-moveFromLoc...【详细内容】
2019-12-02  Tags: HDFS  点击:(143)  评论:(0)  加入收藏
▌简易百科推荐
回答这个问题前首先要了解一度电的定义一度电= 1000W·h ,是一个能量单位,一个功率为1000w的设备持续运作一小时就会消耗1度电。所以台式机多少时间一度电完全取决于台...【详细内容】
2021-12-20  数码榜    Tags:台式电脑   点击:(5)  评论:(0)  加入收藏
你是不是很多时候都会紧急冲向电源插座以拯救笔记本电脑的电量?很多时候由于附近没有方便的插座,一是会误事,二是会导致尴尬。幸运的是,现代笔记本电脑比前辈高效得多。如今,即...【详细内容】
2021-12-16  趣玩公社    Tags:电池   点击:(17)  评论:(0)  加入收藏
电脑在我们生活中的重要性不言而喻。如何保证自己的电脑流畅好用,对于很多用户来说都非常重要。作为一个理科男和IT从业者,对于自己的电脑还是非常在意的,会定期的进行整理,保持...【详细内容】
2021-12-09  小伊评科技    Tags:电脑   点击:(13)  评论:(0)  加入收藏
大家好,我是良许。不管我们使用什么操作系统,无论是 Windows、macOS 还是 Linux ,里面都安装了许多软件、驱动程序和固件。但是,这三者概念有区别呢?我在朋友圈做了个小调查,发现...【详细内容】
2021-11-30  良许Linux    Tags:固件   点击:(10)  评论:(0)  加入收藏
澎湃问吧世界著名密码史学家戴维·卡恩曾说:“人类使用密码的历史几乎与使用文字的时间一样长”,这意味着人类密码领域的较量已近五千年。提及“密码”一词,大多数人会想...【详细内容】
2021-11-24    澎湃新闻  Tags:密码   点击:(16)  评论:(0)  加入收藏
由于去中心化域名和账户体系可以承载应用、网站和用户身份,因此有理由相信,这是 Web3 世界中不可或缺的一环。撰文:潘致雄如果回忆一下初次进行的加密货币转账时的体验,特别是在...【详细内容】
2021-11-03  链闻ChainNews    Tags:ENS   点击:(26)  评论:(0)  加入收藏
 文件系统(File System)是计算机系统必不可少的组成部分,可以说除了部分结构简单的单片机系统之外,文件系统是支撑每一个计算机系统运行的最重要的支撑,无论是操作系统、应用程...【详细内容】
2021-11-01  欧工玩转嵌入式  CSDN  Tags:FAT32   点击:(30)  评论:(0)  加入收藏
SDS 2.0时代进化达尔文的《进化论》认为,地球上现存的所有生物都是自然选择的结果,生物只有适应环境的变化,才能得到生存和进化。回望到企业存储,一个常做常新的行业,从上古结绳...【详细内容】
2021-10-28  ExponTech   企鹅号  Tags:SDS   点击:(35)  评论:(0)  加入收藏
在昨天的微信《远程办公危机四伏,到底该pick谁给你保驾护航?》中介绍了远程员工应该具备的四大安全工具,今天继续分享干货:05 双因子令牌在理想的情况下,每个人都会对所有的关键...【详细内容】
2021-10-26    计算机世界  Tags:远程办公   点击:(32)  评论:(0)  加入收藏
今天几乎所有的数字显示设备都基于某种类型的 RGB(红、绿、蓝)颜色模型。RGB 是表示人类可以看到的大多数颜色的最有效方式(有一些颜色不能很好地产生,但这是另一个讨论)。相机...【详细内容】
2021-10-09  懒懒散散的程序员    Tags:RGB   点击:(49)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条