1.3 流行的大数据技术

流行的大数据技术涉及大数据处理的各个阶段,包括:架构、采集、存储、计算处理和可视化等,而Hadoop则是一个集合了大数据不同阶段技术的生态系统。下面重点对Hadoop生态做介绍。

Hadoop的核心是Yarn、HDFS和MapReduce。Hadoop生态系统如图1.5所示,其中集成了Spark生态圈,在未来一段时间内,Hadoop将与Spark共存,Hadoop与Spark都能部署在Yarn和Mesos的资源管理系统之上。Hadoop由许多元素构成,其中,分布式文件系统HDFS、MapReduce分布式计算框架,以及数据仓库工具Hive和分布式数据库Hbase,基本涵盖了Hadoop分布式平台的所有技术核心。

图1.5 Hadoop生态系统

下面分别对图1.5中的各元素进行简要介绍。

1.HDFS(Hadoop分布式文件系统)

HDFS是Hadoop体系中数据存储管理的基础,它是一个高度容错的系统,能检测和应对硬件故障,用于在低成本的通用硬件上运行。HDFS简化了文件的一致性模型,通过流式数据访问,提供高吞吐量数据访问能力,适合带有大型数据集的应用程序。HDFS提供了一次写入多次读取的机制,数据以块的形式,同时分布在集群的不同物理机器上。HDFS的架构是基于一组特定的节点构建的,这是由它自身的特点决定的。这些节点包括NameNode(仅一个),在HDFS内部提供元数据服务;若干个DataNode为HDFS提供存储块。

2.MapReduce(分布式计算框架)

MapReduce是一种分布式计算模型,用于大数据计算,它屏蔽了分布式计算框架细节,将计算抽象成Map和Reduce两部分。其中,Map对数据集上的独立元素进行指定的操作,生成键-值对形式的中间结果;Reduce则对中间结果中相同“键”的所有“值”进行规约,以得到最终结果。MapReduce非常适合在大量计算机组成的分布式并行环境里进行数据处理。

MapReduce提供了以下的主要功能:

(1)数据划分和计算任务调度;

(2)数据/代码互定位;

(3)系统优化;

(4)出错检测和恢复。

3.HBase(分布式列存储数据库)

HBase是一个建立在HDFS之上,面向列的针对结构化数据的可伸缩、高可靠、高性能、分布式数据库。HBase采用了BigTable的数据模型:增强的稀疏排序映射表(Key/Value),其中,键由行关键字、列关键字和时间戳构成。HBase提供了对大规模数据的随机、实时读写访问,同时,HBase中保存的数据可以使用MapReduce来处理,它将数据存储和并行计算完美地结合在一起。与FUJITSU Cliq等商用大数据产品不同,HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用HDFS作为其文件存储系统,并利用MapReduce来处理HBase中的海量数据,利用Zookeeper提供协同服务。

4.Zookeeper(分布式协同服务)

Zookeeper是一个为分布式应用提供协同服务的软件,提供包括配置维护、域名服务、分布式同步、组服务等功能,用于解决分布式环境下的数据管理问题。Hadoop的许多组件依赖于Zookeeper,用于管理Hadoop操作。Zoo Keeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

5.Hive(数据仓库)

Hive是基于Hadoop的一个数据仓库工具,由Facebook开源,最初用于解决海量结构化日志数据的统计问题。Hive使用类SQL的HiveQL来实现数据查询,并将HQL转化为在Hadoop上执行的MapReduce任务。Hive用于离线数据分析,可让不熟悉MapReduce的开发人员,使用HQL实现数据查询分析,降低了大数据处理的应用门槛。Hive本质上是基于HDFS的应用程序,其数据都存储在Hadoop兼容的文件系统(如Amazon S3、HDFS)中。

Hive可以将结构化的数据文件映射为一张数据库表,并且提供简单的SQL查询功能,具有学习成本低,快速实现简单的MapReduce统计的优点,十分适合数据仓库的统计分析。Hive提供了一系列的工具,可以用来进行数据的提取转化加载。Hive将在6.3节重点讲解。

6.Pig(ad-hoc脚本)

Pig是由Yahoo!提供的开源软件,设计动机是提供一种基于MapReduce的ad-hoc(计算在Query时发生)数据分析工具。Pig定义了一种叫做Pig Latin的数据流语言,是MapReduce编程复杂性的抽象,其编译器将Pig Latin翻译成MapReduce程序序列,将脚本转换为MapReduce任务在Hadoop上执行。Pig是一种编程语言,它简化了Hadoop常见的工作任务,Pig可加载数据、表达转换数据以及存储最终结果。Pig内置的操作使得半结构化数据变得有意义(如日志文件),同时Pig可扩展使用Java中添加的自定义数据类型并支持数据转换。与Hive类似,Pig通常用于进行离线分析。

7.Sqoop(数据ETL/同步工具)

Sqoop是SQL-to-Hadoop的缩写,是一个Apache项目,主要用于传统数据库和Hadoop之间传输数据,可以将一个关系型数据库(如MySQL、Oracle、Postgres等)中的数据导入到Hadoop的HDFS中,也可以将HDFS的数据导入到关系型数据库中。Sqoop利用数据库技术描述数据架构,并充分利用了MapReduce的并行化和容错性。

8.Flume(日志收集工具)

Flume是Cloudera公司提供的开源日志收集系统,具有分布式、高可靠、高容错、易于定制和扩展等特点。它将数据从产生、传输、处理并最终写入目标路径的过程抽象为数据流,在具体的数据流中,Flume支持在数据源中定制数据发送方,从而支持收集各种不同协议的数据。同时,Flume数据流提供对日志数据进行简单处理的能力,如过滤、格式转换等。此外,Flume还具有将日志写往各种数据目标(可定制)的能力。总的来说,Flume是一个可扩展、适合复杂环境的海量日志收集系统,当然也可以用于收集其他类型数据。

9.Mahout(数据挖掘算法库)

Mahout最初是Apache Lucent的子项目,在极短的时间内取得了长足的发展,现在是Apache的顶级项目。Mahout的主要目标是创建一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout现在已经包含了聚类、分类、推荐引擎(协同过滤)和频繁集挖掘等广泛使用的数据挖掘方法。除了算法,Mahout还包含数据的输入/输出工具、与其他存储系统(如关系数据库、MongoDB或Cassandra)集成等数据挖掘支持架构。

10.Oozie(工作流调度器)

Oozie是一个可扩展的工作体系,集成于Hadoop的堆栈,用于协调多个MapReduce作业的执行,它能够管理一个复杂的系统,基于外部事件来执行。Oozie工作流是放置在控制依赖有向无环图(Direct Acyclic Graph,DAG)中的一组动作(例如,Hadoop的MapReduce作业、Pig作业等),其中指定了动作执行的顺序。Oozie工作流通过h PDL定义(h PDL是一种XML的流程定义语言),工作流操作通过远程系统启动,当任务完成后,远程系统会进行回调来通知任务已经结束,然后再开始下一个操作。

11.Yarn(分布式资源管理器)

Yarn是下一代MapReduce,即MR V2,是在第一代经典MapReduce调度模型基础上演变而来的,主要是为了解决原始Hadoop扩展性较差,不支持多计算框架而提出的。Yarn是一个通用的运行时框架,用户可以在该运行环境中运行自己编写的计算框架。用户自己编写的框架作为客户端的一个库,在提交作业时打包即可。

12.Mesos(分布式资源管理器)

Mesos诞生于UC Berkeley的一个研究项目,现已成为Apache项目,当前有一些公司使用Mesos管理集群资源,比如Twitter。与Yarn类似,Mesos是一个资源统一管理和调度的平台,同样支持MapRedcue、Steaming等多种运算框架。Mesos作为数据中心的内核,其设计原则是资源分配和任务调度的分离,为大量不同类型的负载提供可靠服务。

13.Tachyon(分布式内存文件系统)

Tachyon是以内存为中心的分布式文件系统,拥有高性能和容错能力,并具有类Java的文件API、插件式的底层文件系统、兼容Hadoop MapReduce和Apache Spark等特点,能够为集群框架(如Spark、MapReduce)提供可靠的内存级速度的文件共享服务。Tachyon充分使用内存和文件对象之间的血统(Lineage)信息,因此速度很快,官方号称最高比HDFS吞吐量高300倍。

14.Tez(DAG计算模型)

Tez是Apache开源的支持DAG作业的计算框架,它直接源于MapReduce框架,核心思想是将Map和Reduce两个操作进一步拆分,即Map被拆分成Input、Processor、Sort、Merge和Output,Reduce被拆分成Input、Shuffle、Sort、Merge、Processor和Output等,这些分解后的元操作可以任意灵活组合,产生新的操作,这些操作经过一些控制程序组装后,可形成一个大的DAG作业。

15.Spark(内存DAG计算模型)

Spark是一个Apache项目,它被标榜为“快如闪电的集群计算”,拥有一个繁荣的开源社区,并且是目前最活跃的Apache项目之一。Spark提供了一个更快、更通用的数据处理平台。和Hadoop相比,Spark可以让程序在内存中运行时速度提升100倍,或者在磁盘上运行时速度提升10倍。我们将在第8章进一步介绍Spark及Spark有关组件的知识。

16.Giraph(图计算模型)

Apache Giraph是一个可伸缩的分布式迭代图处理系统,基于Hadoop平台,并得到Facebook的支持,获得多方面的改进。

17.MLlib(机器学习库)

MLlib是一个机器学习库,它提供了各种各样的算法,这些算法在集群上针对分类、回归、聚类、协同过滤等。MLlib是Spark对常用的机器学习算法的实现库,同时包括相关的测试和数据生成器。Spark的设计初衷就是为了支持一些迭代的作业,这正好符合很多机器学习算法的特点。MLlib基于弹性分布式数据集(Resilient Distributed Datasets,RDD),可以与Spark SQL、GraphX、Spark Streaming无缝集成,以RDD为基石,4个子框架可联手构建大数据计算中心。

18.Spark Streaming(流计算模型)

Spark Streaming支持对流数据的实时处理,以“微批”的方式对实时数据进行计算,它是构建在Spark上处理Stream数据的框架,基本原理是将Stream数据分成小的片段,以类似Batch(批量处理)的方式来处理每个片断数据。Spark的低延迟执行引擎(100ms+)虽然比不上专门的流式数据处理软件,但也可以用于实时计算,而且相比基于Record的其他处理框架(如Storm),一部分窄依赖的RDD数据集可以从源数据重新计算达到容错处理的目的。此外小批量处理的方式使得Spark Streaming可以同时兼容批量和实时数据处理的逻辑和算法,方便了一些需要历史数据和实时数据联合分析的特定应用场合。

19.Kafka(分布式消息队列)

Kafka是Linkedin于2010年开源的消息系统,它主要用于处理活跃的流式数据。活跃的流式数据在Web网站应用中非常常见,包括网站的点击量、用户访问内容、搜索内容等。这些数据通常以日志的形式记录下来,然后每隔一段时间进行一次统计处理。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的处理。

20.Phoenix(HBase SQL接口)

Apache Phoenix是HBase的SQL驱动,Phoenix使得Hbase支持通过JDBC的方式进行访问,并将SQL查询转换成HBase的扫描和相应的动作。Phoenix是构建在HBase上的一个SQL层,能让用户使用标准的JDBC API而不是HBase客户端API来操作HBase,例如创建表、插入数据和查询数据等。

21.Kylin+Druid

Kylin是一个开源的分布式分析引擎,它提供Hadoop之上的SQL查询接口及多维分析(Online Analytical Processing,OLAP)能力以支持大规模数据,能够处理TB乃至PB级别的分析任务,能够在亚秒级查询巨大的Hive表,并支持高并发。

Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、Bone CP、Proxool和JBoss Data Source。

22.Superset

Superset是Airbnb开源的数据挖掘平台,最初是在Druid的基础上设计的,能快速创建可交互的、直观形象的数据集合,有丰富的可视化方法来分析数据,具有灵活的扩展能力,与Druid深度结合,可快速地分析大数据。6.4节将介绍Super Set的使用。

23.Storm

Storm是一个分布式实时大数据处理系统,用于在容错和水平可扩展方法中处理大量数据,它是一个流数据框架,具有较高的摄取率。类似于Hadoop,Apache Storm是用Java和Clojure编写的。