Hadoop大数据生态概述
Hadoop大数据生态概述
Hadoop大数据生态系统是一个由多个组件构成的完整技术体系,涵盖了分布式文件系统、资源管理、数据处理、数据分析等多个方面。本文将详细介绍Hadoop生态系统中的主要组件及其功能,帮助读者全面了解这一重要的大数据技术框架。
HDFS分布式文件系统
Hadoop Distributed File System(HDFS)是一个分布式文件系统,源自Google的GFS论文,该论文发表于2003年10月,HDFS是Google GFS的实现版。
它是指被设计成适合运行在通用硬件上的分布式文件系统,它和现有的分布式文件系统有很多共同点,但同时,它和其他的分布式文件系统的区别也是很明显的。
HDFS是一个高度容错性的系统,适合部署在廉价的机器上,它可以提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的,它在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的。
YARN分布式资源管理器
YARN是一种通用的资源管理系统和调度平台,理论上支持多种资源,目前支持CPU和内存两种资源。
它的基本思想是将资源管理和作业调度和监视的功能划分为单独的守护进程。其想法是拥有一个全局资源管理器ResourceManager和每个应用程序一个的应用程序管理员ApplicationMaster。应用程序可以是单个作业,也可以是多个作业组成的DAG图(有向无环图)。
YARN分为ResourceManager、NodeManager和ApplicationMaster。首先ResourceManager是全局的,负责对于系统中的所有资源有最高的支配权,它作为资源的协调者有两个主要的组件:Scheduler和ApplicationsManager。其次NodeManager主要负责启动ResourceManager分配给ApplicationsManager的container以及代表ApplicationsManager的container,并且会监视container的运行情况。最后由于NodeManager的执行和监控任务需要资源,所以通过ApplicationMaster与ResourceManager沟通,获取资源。
Mapreduce分布式计算框架
Mapreduce是一个分布式运算程序的编程框架,是用户开发基于hadoop的数据分析应用的核心框架,用于大规模数据集(大于1TB)的并行运算。
概念Map(映射)和Reduce(归约)是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。
Mapreduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。
Zookeeper分布式协调服务
ZooKeeper是一个分布式的、开放源码的应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和HBase的重要组件。
ZooKeeper是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
它的主要目标是解决分布式环境下的数据管理问题,如统一命名、状态同步、集群管理、配置同步等。Hadoop大数据生态系统中的许多组件依赖于ZooKeeper,运行在计算机集群上,用于管理Hadoop操作。
Hive数据仓库
Hive是基于Hadoop构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop分布式文件系统中的数据:可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能。
它可以将SQL语句转换为MapReduce任务运行,通过自己的SQL查询分析需要的内容,这套SQL简称Hive SQL,使不熟悉mapreduce的用户可以很方便地利用SQL语言查询、汇总和分析数据。
而Mapreduce开发人员可以把自己写的Mapper和Reducer作为插件来支持Hive做更复杂的数据分析。它与关系型数据库的SQL略有不同,但支持了绝大多数的语句如DDL、DML以及常见的聚合函数、连接查询、条件查询。
它还提供了一系列的工具进行数据提取转化加载,用来存储、查询和分析存储在Hadoop中的大规模数据集,并支持UDF(User-Defined Function)、UDAF(User-Defined AggregateFunction)和UDTF(User-Defined Table-Generating Function),也可以实现对map和reduce函数的定制,为数据操作提供了良好的伸缩性和可扩展性。
Pig大数据分析引擎
Pig由Yahoo开源,其设计动机是提供一种基于MapReduce的ad-hoc脚本(计算在查询时进行)数据分析工具。
Pig是Apache项目的一个子项目,它提供了一个支持大规模数据分析的平台。Pig包括用来描述数据分析程序的高级程序语言,以及对这些程序进行评估的基础结构,它突出的特点就是结构经得起大量并行任务的检验,这使得它能够处理大规模数据集。
Pig定义了一种数据流语言——Pig Latin,它是MapReduce编程复杂性的抽象,Pig平台包括运行环境和用于分析Hadoop数据集的Pig Latin。
HBase分布式数据库
HBase是一个分布式的、面向列的开源数据库,该技术来源于Fay Chang所撰写的Google论文Bigtable:一个结构化数据的分布式存储系统。
HBase是Apache的Hadoop项目的子项目,它不同于一般的关系数据库,而是一个适合于非结构化数据存储的数据库,另一个不同的是HBase基于列的而不是基于行的模式。
Spark分布式经并行计算框架
Spark是一个Apache项目,也被称为快如闪电的集群计算,它拥有一个开源社区,是目前最活跃的Apache项目。
最早的Spark是加州大学伯克利分档AMPLa所开源的、类似于Hadoop MapReduce的通用并行计算框架,它提供了一个更快更通用的数据处理平台。和Hadoop相比,Spark 可以让程序在内存中运行时的速度提升100倍,或者在磁盘上运行时的速度提升10倍。
Kafka分布式发布订阅消息系统
Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写,它是一种高吞吐量的分布式发布订阅消息系统,可以处理消费者在网站中的所有动作流数据。
它的主要设计目标是:时间复杂度为O(1)的方式提供消息持久化能力,并保证即使对TB级以上数据也能保证常数时间的访问性能;高吞吐率:使在非常廉价的商用机器上能做到单机支持每秒100K条消息的传输;支持Kafka Server间的消息分区及分布式消息消费,同时保证每个partition内的消息顺序传输;同时支持离线数据处理和实时数据处理。
参考文献
[1] 黄东军. Hadoop大数据实战权威指南(第2版):电子工业出版社,2019(8): 16-18
[2] https://baike.baidu.com/item/hdfs/4836121
[3] https://blog.csdn.net/weixin_43172032/article/details/117759068
[4] https://www.pianshen.com/article/7677329076
[5] https://baike.baidu.com/item/MapReduce/133425
[6] https://blog.csdn.net/lyy_5201314/article/details/109435474
[7] https://baike.baidu.com/item/zookeeper/4836397
[8] https://baike.baidu.com/item/hive/67986
[9] 万川梅,谢正兰. HADOOP应用开发实战详解(修订版):中国铁道出版社, 2014.08
[10] https://blog.csdn.net/baolibin528/article/details/39783025
[11] https://baike.baidu.com/item/HBase/7670213