大数据系列1:一文初识Hdfs

最近有位同事经常问一些Hadoop的东西,特别是Hdfs的一些细节,有些记得不清楚,所以趁机整理一波。

会按下面的大纲进行整理:

简单介绍Hdfs

简单介绍Hdfs读写流程

介绍Hdfs HA实现方式

介绍Yarn统一资源管理器

追一下Hdfs读写的源码

同时也有其他方面的整理,有兴趣可以看看:

罗拉的好奇 对话记录

罗拉

八哥,最近我们不是在建立数据仓库嘛
有个叫做Hdfs 的东西,好像很厉害,你给我讲讲这是啥玩意呗
 

八哥

额,你先说说你对Hdfs了解多少?

 
 
 

罗拉

我只是听说这个使用分布式存储的框架,可以存储海量的数据,在大数据领域很常用
 

八哥

就这?那就有点尴尬,看来我得从头开始给你介绍了,所以今晚的碗你洗

 
 
 

罗拉

如果你说的我都懂了,那没问题
 

八哥

行,成交

 
查个户口

要想了解Hdfs,就得先查一下他的户口。
Hdfs全名叫做Hadoop分布式文件系统(Hadoop Distributed File System)这货跟Hadoop还有关系。
那没办法,先去看看Hadoop又是啥玩意。

Hadoop是一个由Apache基金会所开发的分布式系统基础架构
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的优势进行高速运算和存储。

目前的Hadoop有一个强大的生态系统,如下:

Hadoop生态

其中有几个为核心的组件,如下:

Hdfs(Hadoop Distributed File System):可提供高吞吐量的分布式文件系统

Yarn:用于任务调度和集群资源管理的框架(这玩意是2.0后的重大突破)

MapReduce:基于Yarn上,用于大数据集群并行处理的系统。(现在更多的被当作思想来看,或者高手才手撸这玩意)

核心组件随着Hadoop更新,在1.x与2.x有显著的区别,如下:

大数据系列1:一文初识Hdfs

大数据系列1:一文初识Hdfs

从上面两图中我们可以发现,Hadoop1.x和Hadoop2.x的主要区别就是2.x引入了Yarn。
之所以说这是一个大的突破主要是因为以下几点:

在1.x中MapReduce不仅负责数据的计算,还负责集群作业的调度和资源(内存,CPU)管理(自己即是也是工人,全能型人才),拓展性差,应用场景单一。

在2.x中,引入了Yarn,负责集群的资源的统一管理和调度。 MapReduce则运行在Yarn之上,只负责数据的计算。分工更加明确。

由于Yarn具有通用性,可以作为其他的计算框架的资源管理系统, 比如(Spark,Strom,SparkStreaming等)。

而Yarn作为统一的资源管理和调度,带来了三个显著的效益:

提高资源利用率:通过统一资源管理和调度,各个不同的组件可以共享集群资源,提高资源的利用率,避免各自为战出现资源利用不充分甚至资源紧张的情况。

降低运维成本:只需对集群进行统一的管理,降低工作量。

数据共享:共享集群通过共享集群之间的数据和资源,有效提高数据移动的效率和降低时间成本

共享集群资源架构图:

大数据系列1:一文初识Hdfs

以后会专门写一篇Yarn的文章,此处不再详细展开。

有了上面的介绍,我们就看看Hdfs是到底做了什么。

Hdfs Hdfs的设计目标

在大数据我们经常会通过分布式计算对海量数据进行存储和管理。
Hdfs就是在这样的需求下应运而生,它基于流数据模式访问和能够处理超大的文件。
并且可以在在廉价的机器上运行并提供数据容错机制,给大数据的处理带来很大便利。

Hdfs设计之初,就有几个目标:

目标 实现方式或原因
硬件故障   硬件故障是常态
需要有故障检测,并且快速自动的从故障中恢复的机制
 
流式访问   Hdfs强调的是数据访问高吞吐量,而不是访问的低延迟性  
大型数据集   支持大型数据集的文件系统
为具有数百甚至更多阶段的集群提供数据的存储与计算
 
简单一致性   一次写入,多次读取
一旦文件建立,写入,关闭就不能从任意的位置进行改变
ps:在2.x后可以在文件末尾追加内容
 
移动计算比移动数据容易   利用数据的本地性,提高计算的效率  
平台可移植性   使用Java语言构建
任何支持Java的计算机都可以运行Hdfs
 
Hdfs框架构设计

接下来我们看看Hdfs集群的框架

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpjxgw.html