开发者学堂课程【高校精品课-北京理工大学-大数据技术导论:大数据存储与管理(一)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/857/detail/15613
大数据存储与管理(一)
内容介绍:
一、引言
二、分布式文件系统 HDFS
三、主流分布式文件系统
四、HDFS 简介
五、HDFS 的体系结构
六、小结
一、引言
1.存储与管理是始终贯穿处理过程始终
介绍大数据存储与管理的内容,前面的章节中了解到大数据处理的大致的流程。最原始的数据源经过数据的采集、数据存储、数据分析与数据处理到最终结果的可视化,形成报表或图表的形式,输出到用户的终端。
在整个大数据处理的过程中,存储与管理是始终贯穿其中的,无论是新采集的原始的数据源,还是处理的数据源,中间产生的临时结果,亦或是处理最后产生的最终结果,都需要一个强大的高效的存储与管理作为支撑。
2.传统的关系型数据库难以应对大数据挑战
传统的关系型数据库在很长的一段时间内都占据着数据存储与管理的一个市场上主流的地位。在面对很多大数据应用时,传统的关系型数据库就显得有些力不从心。大数据的一个显著的三维特征是 data volume 、data veiocity和data variety。
大数据的数据量非常的大,同时要求对数据做以实时的、快速的处理,同时数据的种类也多种多样,非常的繁杂。传统的关系型数据库在使用时首先对数据做一个结构上的预先定义,处理很多大数据应用时是不可实现的,同时,传统的关系型数据库,在可扩展性方面也有一定的局限性,难以处理大量的数据。在这一章节中,学习到面对大数据的这些挑战,如何用一些新兴的技术手段来处理这些问题。分布式文件系统,分布式数据库以及非关系型数据库。
二、分布式文件系统 HDFS
首先来看分布式文件系统,分布式文件系统的基本概念,会以主流文件系统 HDFS 为例来介绍分布式文件系统的一个设计理念和存储原理。
在介绍分布式文件系统之前,先来看一下计算机集群的一个基本架构。
这张图显示的是一个高度抽象的计算机集群的基本架构,在一个计算机集群中,有成百上千、成千上万的计算节点,这些计算节点被部署在不同的基架上,通过网络互相连接起来。
1. 分布式文件系统 distributed file system,简称 DFS 就是指文件系统管理的物理存储资源,不仅仅存储在本地节点上,还可以通过网络连接存储在非本地节点上。,在这样一个计算机集群里面,文件可以分布式的存储在不同的节点上。
2.分布式的文件系统优势
相比较于本地的文件系统,分布式的文件系统改变了数据存储和管理的方式,通过网络互相连接起来。比较于本地的文件系统,分布式的文件系统改变了数据存储和管理的方式。它有以下优势。首先,它降低了成本,不再需要去购买非常昂贵的存储服务器,可以利用廉价的计算设备来构建一个小型的计算机集群来实现分布式的数据存储,同时它非常容易扩展,需要更多的存储资源的时候,可以简单的向集群中。加入新的硬件设备来实现水平的扩容,它还有强可靠和高可用的特性。通常在分布式的文件系统里面会采用冗余机制,系统会自动的对数据做一个自动的备份,当有一些数据出现错误或丢失的时候。仍然有其他的一部分数据可供用户使用,在用户的这个角度来讲,用户不需要关心数据究竟是存在哪一个计算节点上。可以像使用本地文件系统一样访问分布式的文件系统,所以说对用户来说是很友好的。
3.评价分布式文件系统三个因素
去评价一个分布式文件系统的时候,通常会考虑以下三个因素,首先看数据的存储方式。也就是文件在各个节点之间的分布策略,以保证数据的存储安全和方便获取,其次是数据的读取速率,包括响应用户读取数据文件的请求、定位数据文件所在的节点、读取实际硬盘中数据文件的时间、不同节点间的数据传输时间以及一部分处理器的处理时间等。最后,也是非常重要的,是数据的安全机制。由于数据分散,在各个节点中,必须要采取冗余、备份、镜像等方式来保证节点出现故障的情况下,仍然可以对外提供数据服务,能够进行数据的快速恢复来确保数据的安全。
三、主流分布式文件系统
当前主流的分布式文件系统,包括 GFS,也就是Google 的 file system,是 Google 公司为了满足本公司的需求而开发的。基于 Linux 的专有分布式文件系统
HDFS,也就是 hadoop 的分布式文件系统。hadoop 分布式文件系统是 hadoop 生态圈非常重要的组成部分.
Ceph 开源分布式存储项目
luster 是由 sun 公司开发和维护的具有高可用性的集群文文件系统。TFS 淘宝的 file system,它是面向互联网服务的分布式文件系统,主要针对海量的非结构化数据,为淘宝提供了海量小文件的存储。
四、HDFS 简介
1. hadoop 分布式文件系统 HDFS 是 hadoop 的整个生态圈里面。非常重要的一个基础组件,它为很多hadoop生态圈里面的系统提供了一个底层的存储支持。hadoop 是阿帕奇软件基金会旗下的开源分布式的计算平台,为用户提供了系统底层、细节透明的分布式基础架构。用户在不需要了解分布式系统底层细节的情况下,仍然可以开发分布式的应用程序,充分的利用计算机集群的一个强大的计算能力来实现海量数据的分布式存储与管理。
2. hadoop 框架里面最核心的设计就是 HDFS 和 mapreduce。HDFS 为海量数据提供了存储支持,mapreduce 则为海量数据提供了计算框架。
3. HDFS 是专门为解决大数据存储问题而产生的,有以下几个特点,首先,它向下兼容廉价的硬件设备。在设计之初,HDFS 就把硬件故障看作常态来进行设计。HDFS 中,通过增加数据副本、冗余存储等机制来保证数据的可靠性、安全性和高可用性。
HDFS 中采用流式数据访问的模式,而非随机读写,这是为了满足大批量数据的读写要求,提高整个系统的吞吐量。
HDFS 非常适合存储和管理。超大文件。在 HDFS 中,把数据文件分成大小相同的数据块儿,Data block,以块儿作为基本的存储单位进行管理。默认一个数据块儿的大小是64兆或128兆
在 HDFS 中采用简单的文件模型。适合一次写入,多次读取的情况,文件一旦被写入关闭之后就不允许用户再进行修改,同时它降低了并发控制的要求,也是为了支持系统更高的吞吐量。
HDFS 有非常强大的跨平台兼容性,因为 HDFS 是基于 Java 开发的,Java 有很好的跨平台性,这也是HDFS可以广泛的用作大量应用的首选平台的原因。
五、HDFS 的体系结构
1. HDFS 中采用主从结构模型 Master/ slave 的结构,在一个 HDFS 集群中通常有一个名称节点 Name not和多个数据节点 data note 组成。在这个示意图中,
有一个 name note 和五个 data note 组成 data note 分布在了不同的机架上。
2. 在 HDFS 中它会把文件数据分割成若干的数据块来进行管理,每个 data note 存储一部分的数据块,这样文件就分布式的存储在了整个 HDFS。的集群中,这个示意图中可以看到,
绿色的小方块代表 data block 应用程序,客户端可以并行的对这些数据进行访问,极大的提高了访问速度。
在 HDFS 集群中两类节点,一类是名称节点 name node 主要是整个集群的一个管理者负责整个分布式文件系统,原数据的管理,也就是存储的文件路径名、数据块的 ID 以及存储的位置信息。data node 是具体负责存储文件的地方,负责文件数据的存储和读写,在 name node 的统一调度下进行数据块的创建、删除和复制等操作,并周期性的向name node 报告自己的状态。没有按时报告的数据节点会被标记为宕机,之后 name node 就不会再给它分配读写请求。
冗余数据存储
3. HDFS 中冗余数据存储的机制。为了保证系统的容错性和可用性,HDFS 中采用了多副本方式对数据进行冗余存储。通常一个数据块的多副本会被分布到不同的数据节点,
在这张示意图中,在 name not 中存储了文件名、副本数量以及 block ID 这样的信息我们可以看到,PART0这个文件被分成了 BLOCK1和 BLOCK3,每 个 block 都被冗余存储了两份。PART1文件被分成了 block245三个block,每个block都被冗余存储了三份,我们可以看到在下面的数据节点中。BLOCK1被分布式的存储在了 date note0和 date note2上,同样第二个数据文件 BLOCK2被分布式的存储在了 NOTE0NOTE1和 NOTE3上,这样的冗余数据存储机制可以更快的进行数据的传输。同时更容易的检查数据的错误,保证数据的可靠性。
4. HDFS 中数据的读写过程
首先是数据的读过程,客户端通过open函数来打开一个文件,在 HDFS 中一个数据文件被分成了多个数据块儿,每个数据块儿又被分布式的存储在了多个数据节点上,信息是存储在 name note 上的,所以首先需要远程调用name note。去拿到这个文件存储在了哪些数据节点中。拿到数据块存储的位置信息之后,客户端就可以去访问这些数据节点,来顺序的读取每个数据块的内容,在 HDFS 中每个数据块会被冗余存储,默认的一个数据块会被存储三份,在HDFS 中采用就近原则,也就是会优先去读取离最近的数据块的内容。
当我们要写一个文件的时候。首先通过 create 函数来创建这个文件。创建过程需要在 name node 节点中,在 name no 的管理的命名空间创建这个文件。在创建之前,Name node 会首先做一些检查,例如说这个文件是否存在,客户端是否有权限进行写文件,检查之后在 name name node 中创建了文件的信息。之后就开始写数据了,把代写的数据存在 data q 里面,Data streamer 去读取 data q 里面的内容,同时需要 name node 帮分配文件,具体要存储在哪些数据节点上。
在 HDFS 中需要对数据进行冗余的备份,默认需要备份三份。在这个事例中,Name node 分配了三个数据节点供我们存储数据,这三个数据节点形成了一个Data note pipeline,接下来会进行一个叫做流水线复制的写过程。也就是说,客户端将要写的数据首先写入第一个数据节点,第一个数据节点将收到的数据传到第二个数据节点,第二个数据节点依次去写第三个数据节点。
当写完成的时候会发一个确认包,第三个数据节点发确认包给第二个数据节点,第二个数据节点发回给第一个数据节点,第一个数据节点发回给客户端,这样就完成了第一个数据包的写入,依次去写 dataQ 里面剩下的数据。当整个数据写过程完成后,关闭文件,结束整个写过程。
HDFS 操作的常用命令
可以参考 hadoop 官网的 file system shell 说明文档,去学习如何在 HDFS 中创建文件路径,如何去打印文件目录,如何从本地文件上传文件到 HDFS 中,如何从 HDFS 中下载文件到本地以及如何去显示文件。移动文件、拷贝文件等等。
六、小结
分布式文件系统是大数据时代,解决大规模数据存储问题的有效手段。在这一小节中,介绍了分布式文件系统的基本概念,并以主流文件系统 HDFS 为例,进一步的介绍了分布式文件系统的基本架构、设计思想和数据的读写方法。
了解了 HDFS 采用主从的结构模型,通常在集群中有一个名称节点和若干个数据节点。HDFS 采用了冗余数据存储的机制,保证了系统的容错性和可用性。