Apache Hadoop是一种著名的大数据技术。通过在Hadoop社区添加模块,用户可以根据自己的目标和应用需求形成满足自己所需的个性化的Hadoop生态系统。本文从数据存储、数据处理、数据查询、数据访问、数据分析等几个方面对Hadoop及其组件组成的生态系统进行了分析,为用户在进行大数据分析工具进行选择时提供帮助和支持。
关键词:Hadoop;生态系统;HDFS;HBase;
1 Hadoop简介
Apache Hadoop是一种著名的大数据技术,并行集群和分布式文件系统的架构使得它能够快速处理大型数据集。Hadoop平台的强大功能基于两个主要的子组件:Hadoop分布式文件系统(HDFS)和MapReduce框架。在Hadoop社区,用户可以根据自己的目标和应用需求,如容量、性能、可靠性、可扩展性、安全性等在Hadoop之上添加模块从而丰富其生态系统,而IT供应商也可以在Hadoop分布中提供特殊的企业强化特性。上述这些特色,使得Hadoop拥有强大的大数据处理能力,并且具有蓬勃的生命力。
下面我们将从数据存储、数据处理、数据查询、数据访问、数据分析等几个方面,对Hadoop生态系统进行介绍。
2数据存储层:HDFS和HBase
Hadoop依赖于它的文件系统HDFS和一个名为Apache HBase的非关系数据库进行数据存储。
2.1 Hadoop分布式文件系统(HDFS)
HDFS[1]是为高延迟操作批处理而设计的一种数据存储系统,支持一个集群中几百个节点的管理,可以处理结构化和非结构化数据,能保存大小大于1 TB的文件,支持跨异构硬件和软件平台的移植,通过将计算操作移到数据存储附近来减少网络拥塞和提高系统性能。但HDFS不构成通用文件系统,也不提供文件中的快速记录查找。
HDFS基于主从架构,将大量数据分布在集群中,由一个唯一的主节点管理文件系统操作,许多的从节点来管理和协调单个计算代码上的数据存储。
2.2 HBase
HBase是一个建立在HDFS之上的分布式非关系数据库,为低延迟操作而设计。HBase基于面向列的键/值数据模型,支持高表更新率,在分布式集群中具有横向扩展潜力。HBase的表将数据逻辑地存储在行和列中[1],可处理十亿行和百万列的数据量。HBase允许用户引入更新以应对不断变化的应用程序需求,但HBase不支持结构化查询语言。HBase提供了很多功能,如实时查询、自然语言搜索、对大数据源的一致访问、自动和可配置的表分片等。与HDFS类似,HBase有一个管理集群的主节点,和存储部分表并对数据执行操作的从节点。表1总结了HDFS和HBase之间的差异。
表1 HDFS和HBase特性的比较
3 数据处理层
MapReduce和YARN是Hadoop上的数据处理工具,被用来管理作业调度、资源和集群。
3.1 MapReduce编程模型
MapReduce是一个由编程模型及其实现组成的框架,通过编写支持并行处理的程序达到高效处理海量数据的目的。MapReduce编程模型主要依靠Map和Reduce两个函数处理数据计算,具体的数据处理流程如下:
(1)Map函数将输入数据划分为独立的数据分区构成键值对;(2)MapReduce框架将所有键值对发送到映射器中供集群中的多个并行映射任务分别处理,并得到中间结果;(3)Reduce根据预定义的程序聚集与键相关联的值,生成一个或多个输出键值对;(4)框架将所有输出键值对存储在输出文件中。
通常,Hadoop集群由客户机服务器、多个数据节点和两种类型管理节点(主节点和次节点)组成。客户机服务器的角色是首先加载数据,然后将MapReduce作业提交到专用于协调和管理存储和计算的主节点,辅助节点处理数据复制和可用性。
3.2 YARN
YARN与MapReduce相比,提供了更好的可扩展性、增强的并行性和高级的资源管理功能。YARN通过YARN Resource Manager运行在HDFS上,允许并行执行多个应用程序、批处理和实时交互。
与MapReduce不同,YARN通过将Job Tracker的主要功能拆分为两个单独的守护进程来提高效率:(1)Resource Manager(RM),它在集群中分配和管理资源;(2)带库的应用程序主(AM)框架,它旨在安排任务,使任务与任务跟踪程序匹配,并监视任务的进度。AM与RM和节点管理器进行资源协商。
4 数据查询层:Pig、JAQL和Hive
Apache Pig是一个开源框架,采用Pig Latin高级脚本语言作为其编程语言,通过支持作业和工作流的并行执行来降低MapReduce的复杂性。其交互式环境Pig-like Hive,简化了使用HDFS在并行海量数据集中的探索和处理。Pig还允许与外部程序,如shell脚本、二进制文件和其他编程语言进行交互。
JAQL是Hadoop之上的一种声明性语言,可支持查询和大量数据处理。JAQL基于JSONs(Java脚本对象表示法)格式来查询半结构化数据,将高级查询转换为MapReduce作业,也可用于查询其他数据格式或类型,如XML、逗号分隔值(CSV)数据、平面文件等。通过内置的函数、核心操作符和I/O适配器,确保了数据在处理、存储、转换中支持JSON格式。
Apache Hive是一个数据仓库系统,旨在简化Apache Hadoop的使用。与通过HDFS管理文件内数据的MapReduce不同,Hive允许在结构化数据库中表示数据。Hive提供了一种类SQL的语言HiveQL,使用户能够访问和操作HDFS或HBase中的数据。因此,Hive适用于许多商业应用程序[2]。
表2 Hive, Pig 和 JAQL 的特点
5 数据访问层
5.1 数据提取: Flume和Chukwa
Flume用于从外部机器收集、聚合和传输数据到HDFS。尽管Flume是对Hadoop的补充,但它是一个独立的组件,可在其他平台上工作,以能运行各种进程而闻名。通过Flume,用户可以将来自各种大容量源的数据流到sink(如HDFS和HBase)中进行实时分析。
Chukwa是一个建立在Hadoop之上的数据收集器,其目标是监视大型分布式系统。它使用HDFS从各种数据提供者进行数据收集,并使用MapReduce分析收集的数据,并以一个界面显示监视和分析的结果。Chukwa具有门户网站风格。
虽然Flume和Chukwa有着相似的目标和特性,但它们在表3中有一些不同之处。
表3 Flume 和Chukwa 的比较
5.2数据流: Storm 和 Spark
Storm是一个开源的分布式系统,与Hadoop相比,它具有实时处理数据的优势。Storm由Spouts、Bolts和Steams组成了完整的网络拓扑结构,Spouts是Steams的源头,Bolts用于处理输入流以产生输出流。Storm的ISpout接口接收来自各种实时同步或异步系统的数据。基于Bolts,Storm能将数据写入任何输出系统,且支持任何类型的输出。Storm可用于实时分析、在线机器学习、连续计算和分布式RPC等。与MapReduce一样,Storm提供了一个简化的编程模型,隐藏了开发分布式应用的复杂性。
Apache Spark是由UC Berkeley AMPLab创建的开源分布式处理框架。Spark类似于Hadoop,基于内存系统来提高处理性能,其运行程序的速度比Hive和Apache Hadoop快100倍。Spark基于Apache Hive代码库,但为了提高系统性能,替换了Hive的物理执行引擎。Spark提供了API来支持各种语言的快速应用程序开发[3],能够处理Hadoop支持的所有文件存储系统。
6 数据分析
Apache Mahout是一个开源机器学习软件库。Mahout可以添加到Hadoop之上,通过MapReduce执行算法,也可以在其他平台上工作。Mahout本质上是一组Java库,能确保大规模机器学习应用程序和算法在大型数据集上的可扩展和高效实现。Hsieh以及Acharjya和Ahmed等人证实,通过集成Mahout,用户不必担心算法开发。相反,他们可以专注于他们的主要分析问题,并为他们的应用选择合适的分析模型。像Apache Hive一样,Mahout将用Java表示的机器学习任务转换成MapReduce作业。
R是一种用于统计计算、机器学习和图形处理的编程语言,其功能包括:数据存储和处理系统;数组运算工具;完整连贯的统计分析工具;优秀的统计制图功能;简便而强大的编程语言:可操纵数据的输入和输出,可实现分支、循环,用户可自定义功能。但是,由于单节点内存限制,R处理超大数据集的能力有限。虽然R提供了一套更完整的分类模型(关于算法的类型和深度),但由于内存管理问题,使用Mahout、Spark、SAS或其他框架来确保更高的广泛计算性能可能更为实际。
7管理层
7.1协调和管理:Zookeeper、Avro和Oozie
Zookeeper是一个开源的,用于协调Hadoop环境中的应用程序和集群的服务,它用Java实现,为基于Java和C的程序提供API。Zookeeper是一个基于客户机-服务器架构的分布式应用程序,其服务器可跨多个集群运行,为分布式系统提供快速、可扩展和可靠的集群协调服务。Zookeeper被用于Hadoop中,为Resource Manager提供高可用性。HBase也使用它来确保服务器管理、引导和协调。
Apache Avro是一个用于建模、序列化和进行远程过程调用(RPC)的框架,它定义了一种紧凑且快速的二进制数据格式,以支持数据压缩应用程序,并在各种编程语言中提供对这种格式的支持,确保在Apache Hadoop的各个节点上高效地压缩和存储数据。
Apache Oozie是一个工作流调度系统,旨在运行和管理Hadoop集群中的任务,可支持各种类型Hadoop任务,包括MapReduce、Pig、Hive、Sqoop和Distcp任务[4]。Oozie的主要组件之一是Oozie服务器,此服务器基于两个主要组件:存储和运行不同类型工作流作业的工作流引擎,以及运行由预定义计划触发的重复工作流作业的协调器引擎。Oozie提供了一组API库和一个基于客户端组件的命令行界面(CLI)。
7.2系统部署:Ambari、Whirr、BigTop和Hue
Apache Ambari是为了简化Hadoop管理而设计的,通过Web用户界面提供对Hadoop集群的管理和监视,使用Kerberos身份验证协议提供安全性,通过基于角色的用户身份验证、授权和审核功能,管理集成的LDAP和活动目录。
Apache Whirr简化了云环境中集群的创建和部署,提供了运行云服务的库集合。操作员可以将Whirr作为命令行工具在本地或云中运行。Whirr用于启动实例以及部署和配置Hadoop。此外,Apache Whirr支持在云环境中提供Hadoop、Cassandra、ZooKeeper、HBase、Valdemort(键值存储)和Hama集群。
BigTop旨在开发打包和验证与Hadoop相关的项目,目标是评估和确保整个系统的完整性和可靠性,而不是单独评估每个子模块。
Hue[36]是一个用于与Hadoop及其生态系统交互的web应用程序,它将最常见的Hadoop组件聚合到单个界面中,通过简单的操作使程序员能够使用Hadoop,而不必担心底层的复杂性和记忆大量命令。
8总结
综上所述, Hadoop生态系统包括Hadoop分布式文件系统(HDFS)、HBaseNoSQL数据库、Hive数据存储解决方案和用于特殊分析需求的Pig查询语言,以及Hadoop环境的其他组件,包括Hcatalog、Zookeeper、Avro、Oozie、Flume、Sqoop等。
上述的分析,能够帮助我们在各种可用的大数据分析工具中进行仔细选择。选择可基于以下原则:数据集的性质(如容量、流、分布)、分析问题的复杂性、所使用的算法和分析解决方案、系统能力、安全和隐私问题、除了可用预算之外所需的性能和可扩展性等。
参考文献:
[1] Coronel, C., Morris, S., 2016. Database Systems: Design, Implementation, & Management. Cengage Learning.
[2] Bansal, H., Mehrotra, S., Chauhan, S., 2016. Apache Hive Cookbook. Packt Publ..
[3] Karau, H., 2013. Fast Data Processing with Spark. Packt Publishing Ltd..
[4] Kamrul Islam, M., Srinivasan, A., 2014. Apache Oozie The Work?ow Scheduler for Hadoop. O’Reilly Media Inc..
论文作者:钱其汀 张文博
论文发表刊物:《科学与技术》2019年第17期
论文发表时间:2020/3/4
标签:数据论文; 是一个论文; 集群论文; 节点论文; 分布式论文; 系统论文; 作业论文; 《科学与技术》2019年第17期论文;