首页 体育 教育 财经 社会 娱乐 军事 国内 科技 互联网 房产 国际 女人 汽车 游戏

什么是HDFS?算了,告诉你也不懂。

2020-05-16

文本已录入至我的GitHub精选文章,欢迎Star: https://github.com/ZhongFuCheng3y/3y

上一篇现已讲解了「 大数据入门 」的相关根底概念和常识了,这篇咱们来学学HDFS。假如文章有过错的当地,无妨在谈论区友善指出~

上篇文章现已讲到了,跟着数据量越来越大,在一台机器上现已无法存储一切的数据了,那咱们会将这些数据分配到不同的机器来进行存储,可是这就带来一个问题: 不方便办理和保护

所以,咱们就期望有一个体系能够将这些散布在不同操作服务器上的数据进行 统一办理 ,这就有了 散布式文件体系

在运用HDFS的时分是十分简略的:雨过天晴HDFS是将文件存储到不同的机器上,可是我去运用的时分是把这些文件 作为 是存储在一台机器的方法去运用:

清晰一下:HDFS便是一个 散布式文件体系 ,一个文件体系,咱们用它来做什么? 存数据呀 。

下面,咱们来了解一下HDFS的一些常识,能够帮咱们更好地去「运用」HDFS

从上面咱们现已提到了,HDFS作为一个散布式文件体系,那么 它的数据是保存在多个体系上的 。例如,下面的图:一个1GB的文件,会被 切分 成几个小的文件,每个服务器都会寄存一部分。

那肯定会有人会问:那会切分多少个小文件呢?默许以 128MB 的巨细来切分,每个 128MB 的文件,在HDFS叫做 块

PS:老版别默许是64MB

一个用户发出了一个 1GB 的文件恳求给HDFS客户端,HDFS客户端会依据装备,对这个文件进行切分,所以HDFS客户端会切分为8个文件,然后每个服务器都会存储这些切分后的文件。现在咱们假定 每个服务器都存储两份 。

这些寄存 实在数据 的服务器,在HDFS范畴叫做 DataNode

现在问题来了,HDFS客户端依照装备切分完今后,怎样知道往哪个服务器放数据呢?这个时分,就需求另一个人物了,办理者。

NameNode实际上便是 办理文件的各种信息 ,其间包含:文文件路径名,每个Block的ID和寄存的方位等等。

所以,无论是读仍是写,HDFS客户端都会先去找 NameNode ,经过NameNode得知相应的信息,再去找DataNode

作为一个散布式体系,假如没有备份的话,只需有其间的一台机器挂了,那就会导致「数据」是不可用状况的。

的文章或许就懂了。其实思维都是相同的。

Kafka对partition备份,ElasticSearch对分片进行备份,而到HDFS便是对Block进行备份。

尽或许将数据备份到不同的机器上,即使某台机器挂了,那就能够将备份数据拉出来用。

对Kafka和ElasticSearch不了解的同学,能够重视我的 GitHub ,查找关键字即可查询

注:这儿的备份并不需求HDFS客户端去写,只需DataNode之间相互传递数据就好了。

从上面咱们能够看到,NameNode是需求处理hdfs客户端恳求的。。

现在问题就来了,NameNode是怎样寄存元数据的呢?

提到这儿,又想起了Kafka。Kafka也是将partition写到磁盘摧毁的,但人家是怎样写的? 次序IO

NameNode相同也是做了这个事:修正内存中的元数据,然后把修正的信息 append 到一个名为 editlog 的文件上。

因为append是次序IO,所以功率也不会低。现在咱们增修改查都是走内存,只不过增修改的时分往磁盘文件 editlog 摧毁追加一条。这样咱们即使重启了NameNode,仍是能够经过 editlog 文件将元数据康复。

现在也有个问题:假如NameNode一向长时刻运转的话,那 editlog 文件应该会越来越大。重启的时分需求依靠 editlog 文件来康复数据,假如文件特别大,那发动的时分不就特别慢了吗?

的确是如此的,那HDFS是怎样做的呢?为了避免 editlog 过大,导致在重启的时分需求较长的时刻康复数据,所以NameNode会有一个 内存快照 ,叫做 fsimage

提到快照,有没有想起Redis的RDB!!

这样一来,重启的时分只需求加载内存快照 fsimage +部分的 editlog 就能够了。

主意很夸姣,实际还需求处理一些事:我什么时分生成一个内存快照 fsimage ?我怎样知道加载哪一部分的 editlog ?

问题看起来如同杂乱,其实咱们就只需求一个 守时使命 。

假如让我自己做的话,我或许会想:咱们加一份装备,设置个时刻就OK了

热门文章

随机推荐

推荐文章