当今互联网发展迅速,大型网站系统的日志量呈指数级增长,而日志对于互联网公司是非常重要的,可以通过分析用户操作日志来获取用户行为,从而有针对性地对用户进行推荐,提高产品的价值。假如一天产生的日志量为300GB,则一年产生的日志量为300GB×365=107TB,这么大的数据量如何进行备份和容错?又如何进行分析呢?
Apache Hadoop是大数据开发所使用的一个核心框架,是一个允许使用简单编程模型跨计算机集群分布式处理大型数据集的系统。使用Hadoop可以方便地管理分布式集群,将海量数据分布式地存储在集群中,并使用分布式并行程序来处理这些数据。它被设计成由单个服务器扩展到数千台计算机,每台计算机都提供本地计算和存储功能。Hadoop本身的设计目的不是依靠硬件来提供高可用性,而是在应用层检测和处理故障。
Hadoop的生态系统主要组成架构,如图3-1所示。
随着Hadoop生态系统的成长,出现了越来越多新的项目,这些项目有的需要依赖于Hadoop,有的可以独立运行,有的对Hadoop提供了很好的补充。
图3-1 Hadoop生态系统主要组成架构
下面对Hadoop生态系统架构中的关键技术进行简要介绍,本书后续章节将对每一项技术进行详细讲解。
Hadoop的核心主要包含以下模块:
·HDFS(Hadoop Distributed File System):可提供高吞吐量访问的分布式文件系统。
·YARN:用于任务调度和集群资源管理的框架。
·MapReduce:基于YARN之上,用于大型数据集并行处理的系统。
其他Hadoop相关的系统:
·ZooKeeper:一个高性能的分布式应用程序的协调服务。
·Flume:一个日志收集系统,用于将大量日志数据从许多不同的源进行收集、聚合,最终移动到一个集中的数据中心进行存储。
·Sqoop:用于在关系数据库与Hadoop平台之间进行数据导入和导出的工具。
·Kafka:一个高吞吐量的分布式发布订阅消息系统。
·HBase:一个可伸缩的分布式数据库,支持大型表的结构化数据存储。底层使用HDFS存储数据,同时依赖ZooKeeper进行集群协调服务。
·Elasticsearch:一个基于Lucene的分布式全文搜索引擎。
·Hive:基于Hadoop的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务运行。
·Storm:一个分布式的实时计算系统。
·Spark:一种快速通用的Hadoop数据计算引擎。Spark提供了一个简单而有表现力的编程模型,该模型支持广泛的应用程序,包括ETL、机器学习、流处理和图形计算。
Hadoop 1.x与Hadoop 2.x的架构对比如图3-2所示。
图3-2 Hadoop 1.x与Hadoop 2.x架构对比
Hadoop 1.x的主要核心组成是MapReduce和HDFS。MapReduce不仅负责数据的计算,而且负责集群作业调度和资源(内存、CPU)管理;HDFS负责数据的存储。
Hadoop 2.x在Hadoop 1.x的基础上引入了新的框架YARN(Yet Another Resource Negotiator)。YARN负责集群资源管理和统一调度,而MapReduce的功能变得单一,其运行于YARN之上,只负责数据的计算。由于YARN具有通用性,因此YARN也可以作为其他计算框架(例如,Spark、Storm等)的资源管理系统,不仅限于MapReduce。
Hadoop 3.x的组成架构与Hadoop 2.x相同,但有些功能得到了非常显著的增强。
Hadoop这种基于YARN的共享集群方式有以下优点:
·提高了资源利用率。如果不同框架组成的集群相互独立,必然会导致资源的利用不充分,甚至出现资源紧张的情况,而共享集群的方式可以使多个框架共享集群资源,提高了资源利用率。
·降低了运维成本。使用共享集群的方式,往往只需要少数的运维人员进行集群的统一管理,从而降低了运维成本。
·数据可以共享。如果不同框架组成的集群相互独立,随着数据的增长,跨集群间的数据移动需要耗费更长时间,而共享集群方式通过共享集群间的数据和资源,大大节省了数据移动时间并降低了成本。
以YARN为中心的共享集群资源架构如图3-3所示。
图3-3 以YARN为中心的共享集群资源
说到底,YARN其实是一个通用的资源管理系统。所谓资源管理,就是按照一定的策略将资源(内存、CPU)分配给各个应用程序使用,并且采取一定的隔离机制防止应用程序之间彼此抢占资源而相互干扰。