购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第二节
Hadoop生态系统

Hadoop是对大数据进行分布式处理的开源软件框架,是事实上的大数据平台标准。其由多个项目构成,经过不断丰富发展形成完整的Hadoop生态系统,如图2-4所示。其中分布式文件系统HDFS和分布式并行编程模型MapReduce是Hadoop的两大核心项目。HDFS负责大数据的分布式存储,MapReduce实现大数据的分布式计算。

一、Hadoop分布式文件系统HDFS

(一)HDFS的系统结构

HDFS是Hadoop中负责管理大数据存储的分布式文件系统,由一个名称节点(NameNode)和若干数据节点(DataNode)组成,这些节点通常放到不同的机架(Rack)上,如图2-5所示。名称节点类似于计算机上的根目录,负责管理文件系统的命名空间,执行命名空间操作,如打开、关闭、重命名文件或目录,同时管理数据块与数据节点之间的对应关系。数据节点负责存储数据,其接收客户端的文件读写请求,在名称节点的统一管理下进行数据块的创建、删除和复制。

图2-4 Hadoop生态系统

图2-5 HDFS系统架构

(二)HDFS的分块存储

HDFS存储文件时,会根据一定标准将文件切分成若干数据块(block)。数据块是HDFS读写数据的基本单位,默认大小是128MB(Hadoop1.0是64MB)。采用分块存储的优点是数据块可以保存在多个存储设备上,从而支持超大规模数据的存储;有利于数据复制,便于快速备份;同时有利于数据的分布式计算。

为避免文件丢失或损坏,每个数据块默认复制3个副本分别保存到3个数据节点上。如果某个数据块被损坏,名称节点会自动寻找位于其他数据节点上的副本来恢复数据。名称节点上保存了文件的元数据,包含文件存储路径、文件与数据块的关系以及数据块和数据节点的关系等信息。例如图2-6中名称节点的元数据内容如下:

/data/File1,3,[B1],{[B1:D1,D2,D3]}

/data/File2,3,[B2,B3],{[B2:D1,D3,D4},[B3:D1,D2,D3]}

/data/File3,3,[B4,B5,B6],{[B4:D2,D3,D4],[B5:D1,D3,D4],[B6:{D1,D2,D4}

如果由于各种原因丢失名称节点,则存储在数据节点上的数据块将无法识别和访问,因此名称节点的高可用性和元数据的备份在HDFS中非常重要。

图2-6 HDFS写数据流程

(三)HDFS数据读写流程

大型HDFS通常运行在由多个机架组成的集群上。每个机架上有多个数据节点服务器。如图2-6所示,假设HDFS有1个名称节点NN和6个数据节点DN1~DN6,分布在3个机架上。要在HDFS上存储3个文件File1(100MB)、File2(150MB)和File3(300MB),流程如下:

1.文件分块

客户端首先将3个文件切分成数据块:文件File1小于默认块大小,被切分为1个数据块B1(100MB);文件File2被切分为2个数据块B2(128MB)和B3(22MB);文件File3被切分为3个数据块B4(128MB)、B5(128MB)和B6(44MB)。

2.获取数据块副本存放位置

客户端向名称节点发送写数据请求,名称节点记录数据块信息,并返回可用的数据节点。在默认3个副本的情况下,数据块副本的放置策略是:若客户端是数据节点,数据块的副本1写在客户端所在机架的其他节点上,副本2写在不同机架的节点上,副本3写在与副本2同机架的其他节点上,如果还有其他副本则随机选择数据节点存放。若客户端不是数据节点,则数据块的副本1随机选择一个节点,副本2写在不同机架的节点上,副本3写在与副本2同机架的另一个节点上,其他副本随机挑选数据节点存放。根据该策略,图2-6中各数据块副本存储位置结果是:B1:DN1,DN3,DN4;B2:DN1,DN3,DN4;B3:DN2,DN5,DN6;B4:DN2,DN3,DN4;B5:DN1,DN5,DN6;B6:DN2,DN5,DN6。

3.写入数据块

客户端采用流水线方式将数据块依次写入数据节点。写入数据块B1时,先将其分成若干个64k的packet,然后将第一个packet发送给DN1;DN1接收后,将第一个packet发送给DN3,同时客户端向DN1发送第二个packet;DN3接收第一个packet后,发送给DN4,同时接收DN1发来的第二个packet。以此类推,直到将B1发送完毕。DN1向客户端发送“数据发送完毕”通知,客户端收到DN1发来的消息后向名称节点发送消息,结束B1的发送过程。发送完B1后,重复上述过程,依次发送B2、B3等,直至全部数据块发送完毕。

用户从HDFS读取文件的流程比较简单。例如读取文件File2,客户端先向名称节点发送读取请求,名称节点查看元数据信息,返回B2和B3的数据块位置DN1,客户端按顺序从DN1读取B2和B3。

二、Hadoop分布式计算框架MapReduce

MapReduce是一种面向大数据的分布式并行编程模型和计算框架,核心思想是“任务的分解与结果归并”。如图2-7所示,其将计算任务抽象成Map和Reduce两部分,其中Map将一个计算任务分割成更小的Map任务,就近分配到附近的数据节点,使数据和数据计算在同一节点上,节省数据传输时间,提高计算速度。Map任务结束后产生的中间结果被分发到多个Reduce任务中进行归并汇总得到最终的计算结果,并输出到HDFS中。

图2-7 MapReduce运行示意图

三、Hadoop的其他功能组件

(一)分布式资源管理器YARN

YARN是第二代MapReduce,即MRv2,是在第一代MapReduce基础上演变而来的,主要是为了解决原始Hadoop扩展性差、不支持多计算框架而提出的。YARN是一套资源管理框架,支持用户同时用多种方式处理数据,对共享数据集进行批处理、交互式分析或实时分析。类似于Hadoop的操作系统。

(二)分布式列存数据库HBase

HBase是建立在HDFS之上的面向结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。HBase采用了BigTable的数据模型,即增强的稀疏排序映射表(Key/Value)。其中键由行关键字、列关键字和时间戳构成。HBase提供了对大规模数据的随机、实时读写访问,同时HBase中保存的数据可以使用MapReduce处理,将数据存储和并行计算完美地结合在一起。

(三)Hive

Hive(数据仓库)最初用于解决海量结构化的日志数据统计问题。Hive定义了一种类似SQL的查询语言(HQL),将HQL转化为MapReduce任务在Hadoop上执行,通常用于离线分析。HQL用于运行存储在Hadoop上的查询语句,Hive使不熟悉MapReduce的开发人员也能编写数据查询语句,这些数据会被翻译成Hadoop上面的MapReduce任务。

(四)Spark

Spark(内存DAG计算模型)提供了一个更快、更通用的数据处理平台。和Hadoop相比,Spark平台可以在内存中运行速度提升100倍,或在磁盘上运行时速度提升10倍。 fKfc9eNqrpaFCn+WQ//BrIblnOEf0CgoQwQMNH3Dj9Bs+8/OR+3bAN7wjWLrQq/n

点击中间区域
呼出菜单
上一章
目录
下一章
×