学习大数据技术的直接目的是解决大数据环境下的问题,或者说是为了处理集群中的数据,要处理数据,就得先有数据并获取到数据,那么在集群中,数据存在哪?我们应该去哪里获取?问题的答案就是HDFS。
1️⃣HDFS的定义和设计
HDFS是Hadoop Distributed File System,即Hadoop分布式文件系统的简称,讲完。
😦啥?就这?
😎对,没有必要扯太多太学术的东西,我又不是来背诵概念的
😫但面试我总得跟面试官掰扯掰扯啊
😶啊这,那就再扯巴扯巴
定义
当数据集的大小超过一台独立的物理机的存储能力时,我们就有必要将其进行分区存储至多台机器上,管理网络中跨多台机器存储的文件系统就叫做分布式文件系统,HDFS就是属于Hadoop生态系统的分布式文件系统,全称Hadoop Distributed File System,即Hadoop分布式文件系统,它作为Hadoop的存储组件,是Hadoop生态系统中的最重要最基础的组成部分之一,负责大数据的存储工作。
设计
HDFS是一个被设计来存储可以流式访问数据的超大文件,且运行在商用硬件集群上的文件系统。
这里使用了三个修饰词来描述HDFS:
-
超大文件
超大文件指的是有几百MB、GB甚至TB大小的文件。目前甚至已经有了可以存储PB级别数据的Hadoop集群了
-
流式数据访问
HDFS是基于一次写入、多次读取是最高效的访问模式这个思路来构建的。我们利用大数据技术要处理的数据集通常是由数据源生成或从数据源生成副本而来,接着长时间地在此数据集上进行各种分析,每次分析都需要数据集中的大部分乃至全部数据。在这种场景下才会选择使用HDFS:更关注读取整个数据集的时间,而不是更关注读取数据集中某一条数据的时间延迟。
-
商用硬件
HDFS强调可以作用在商用硬件上,搭建HDFS集群无需购买昂贵且高可靠的硬件,在各种零售店都能买到的普通硬件就可以满足要求。如果HDFS集群很庞大的话,因为使用的是普通商用硬件而不是高可靠硬件(比如超级计算机),节点故障的几率还是非常高的,但是没关系,HDFS被设计得可以在发生这种少数节点故障的情况时仍然继续运行且不让用户感知到明显的中断。
小扩展:
流式数据访问是将磁盘寻址的开销最小化,对读取一个完整文件的态度是“一点一点一直读,读到一点是一点”,在具体工作中就表现得像一个勤奋的小伙子,有数据来了,就来一点处理一点,与之相反的是非流式数据访问。
非流式数据访问对读取一个完整文件的态度则是“除非读完,否则不处理”,和流式数据访问这个勤奋的小伙子不一样,非流式数据访问更像是个职场老油条,有数据来了,来了一点懒得处理,非要等一套完整的数据全到手了再处理。
用实际场景来举例:
现在几乎所有的视频点播网站的视频播放方式采用的都是流式数据访问技术,点开视频就可以播放,不用等到整个视频都加载完成,迅雷下载视频时的边下边播也是同理;而视频网站的视频下载功能,就是非流式数据访问技术实现的了,必须整个视频下载完成,才能播放或者复制到别的地方。
另外,HDFS的作者在设计HDFS也表示,有一些场景是不适合HDFS介入的:
- 需要低时间延迟地进行数据访问的场景
- 充斥着大量小文件的场景
- 允许多用户写入,且任意修改文件的场景
看过前面文章的读者应该能想起来,这三点不就是Hadoop的缺点吗?没有错,Hadoop的这三个不足在它的好大儿HDFS中就有所体现,具体怎么表现会在后续剖析HDFS时解释到的~