兄弟,这种思路讲解HDFS你肯定没见过,快速入门Hadoop必备

那让我们回到老话题。hadoop的组件解释不能每天都即兴发挥。今天我们将讨论分布式文件系统HDFS。

兄弟,这种思路讲解HDFS你肯定没见过,快速入门Hadoop必备

从RAID说起

大数据技术主要解决大规模数据计算和处理的问题,所以首先要解决的是大规模数据存储的问题。大规模数据存储有三个核心问题需要解决:“在大数据技术出现之前,人们需要面对这些存储问题,相应的解决方案就是磁盘阵列技术。

数据存储容量问题,既然大数据是解决PB的数据计算问题,而一般服务器磁盘容量通常是1-2TB,那么如何存储这样的大规模数据呢。对于数据读写速度的问题,一般磁盘的连续读写速度是几十兆字节。以这种速度,数十PB的数据可能必须被读写到荒地。数据可靠性的问题是磁盘可能是计算机设备中最易受攻击的硬件。网站上磁盘的使用寿命约为一年。如果磁盘损坏,数据怎么办?

RAID(独立磁盘冗余阵列)技术主要用于提高磁盘的存储容量、读写速度以及可用性和容错能力。目前,服务器级计算机都支持插入多个磁盘(8个或更多)。通过使用磁盘阵列技术,实现了多个磁盘上数据的并发读写和数据备份。

常见的磁盘阵列技术包括如下,如图所示。

常用磁盘阵列技术示意图

兄弟,这种思路讲解HDFS你肯定没见过,快速入门Hadoop必备@

假设服务器有N个磁盘。当

RAID0

RAID1

RAID10

RAID3

RAID5

RAID6

HDFS架构原理

HDFS应用

将数据写入磁盘时,将数据分成N-1个副本,同时将数据写入N-1个磁盘,并将验证数据记录在第N个磁盘上。任何损坏的磁盘(包括验证数据磁盘)都可以使用其他N-1磁盘的数据进行修复。

但是,在数据修改较多的场景中,任何磁盘修改数据都会导致第n个磁盘重写验证数据。由于频繁写入,第n个磁盘比其他磁盘更容易损坏,需要频繁更换,所以RAID3在实践中很少使用。

RAID5和RAID3非常相似,但是验证数据不是写入第n个磁盘,而是螺旋写入所有磁盘。这样,验证数据的修改也会在所有磁盘上进行平均,以避免RAID3频繁写入坏磁盘。

RAID6类似于RAID5,但数据只写入N-2个磁盘,检查信息螺旋写入两个磁盘(使用不同的算法生成)。

对于相同数量的磁盘(n),各种磁盘阵列技术的比较如下表所示。

几种磁盘阵列技术的比较

磁盘阵列技术在硬件中实现,例如专用磁盘阵列卡或主板的直接支持,或者可以通过软件实现。多个磁盘在操作系统级别被分组到磁盘阵列中,并在逻辑上被视为访问目录。磁盘阵列技术广泛应用于传统的关系数据库和文件系统,是改善计算机存储特性的重要手段。

RAID技术仅在单个服务器的多个磁盘上形成阵列。大数据需要更大的存储空间和访问速度。将磁盘阵列技术原理应用于分布式服务器集群,形成了HDFS Hadoop分布式文件系统的体系结构思想。

与在多个磁盘上进行文件存储和并行读写的RAID概念相同。HDFS在大规模分布式服务器集群上执行并行读写和冗余存储。因为HDFS可以部署在相对较大的服务器群集中,群集中所有服务器的磁盘都可以被HDFS使用,所以整个HDFS的存储空间可以达到PB级容量。HDFS建筑如图所示。“HDFS架构”HDFS有两个关键组件,一个是名称节点,另一个是数据节点。

兄弟,这种思路讲解HDFS你肯定没见过,快速入门Hadoop必备@

DataNode负责文件数据的存储和读写操作。HDFS将文件数据分成几个块,每个数据节点存储一部分块,因此文件分布并存储在整个HDFS服务器集群中。应用客户端可以并行访问这些数据块,因此HDFS可以在服务器集群规模上实现并行数据访问,大大提高了访问速度。实际上,HDFS集群中会有许多数据节点服务器,通常规模在几百到几千之间。每台服务器都配有几个磁盘,整个集群的存储容量约为几个PB到几百个PB。

NameNode负责整个分布式文件系统的元数据管理,即文件路径名、数据块标识、存储位置等信息,并承担操作系统中文件分配表(FAT)的角色。HDFS将一个数据块复制到多个副本中(默认为3个副本),并将三个相同的数据块存储在不同的服务器上,以确保数据的高可用性。这样,当磁盘损坏或数据节点服务器停机且无法访问其存储块时,客户端将查找其备份块进行访问。

block如下图所示存储多个副本。对于文件/用户/samerep/data/part-0,拷贝数设置为2,存储的块id为1,3。块1的两个备份存储在数据节点0和数据节点2服务器上,块3的两个备份存储在数据节点4和数据节点6服务器上。上述任何服务器停机后,每个数据块至少有一个备份,这不会影响对文件/用户/samerep/data/part-0的访问。

HDFS的块拷贝备份策略

事实上,数据节点将通过心跳与命名节点保持通信。如果数据节点无法随着时间的推移发送心跳,名称节点将认为数据节点已经失败,并立即找出哪些块存储在数据节点上,以及这些块也存储在哪些服务器上。然后通知这些服务器将另一个数据块副本复制到其他服务器,以确保HDFS存储的数据块备份数量与用户设置的数量一致,即使有另一个服务器停机,数据也不会丢失。

Hadoop分布式文件系统可以像普通文件系统一样访问:使用命令行或编程语言应用编程接口读写文件。让我们以HDFS写文件为例来看看HDFS的理,如下图所示。

HDFS尽管它提供了应用编程接口,但实际上,我们很少在HDFS编程直接读取数据,因为正如开始时提到的,在大数据场景中,移动计算比移动数据更具成本效益。最好将程序分发到数据节点以访问其上的块数据,而不是编写程序来读取分布在这么多数据节点上的数据。但是如何分发程序呢?分布式程序如何访问HDFS的数据?如何处理计算结果?如果结果需要合并,应该如何合并?

Hadoop为存储在HDFS的大规模数据的并行计算提供了一个框架,正如我们前面提到的,这就是MapReduce。

极牛网精选文章《兄弟,这种思路讲解HDFS你肯定没见过,快速入门Hadoop必备》文中所述为作者独立观点,不代表极牛网立场。如若转载请注明出处:https://geeknb.com/3563.html

(36)
打赏 微信公众号 微信公众号 微信小程序 微信小程序
主编的头像主编认证作者
上一篇 2019年11月4日 下午6:52
下一篇 2019年11月5日 上午10:26

相关推荐

发表回复

登录后才能评论
扫码关注
扫码关注
分享本页
返回顶部