Hadoop 是 Apache 旗下的开源的分布式计算平台,它可以运行在计算机集群之上,提供可靠的、可扩展的分布式计算功能。Hadoop 的核心是分布式文件系统(HDFS)和并行编程框架 MapReduce。
Hadoop 与三篇论文密不可分:
- 2003年,谷歌发布的分布式文件系统 GFS 的论文,可以用于解决海量数据存储的问题。
- 2004年,谷歌发布了 MapReduce 的论文,可以用于解决海量数据计算的问题。
- 2006年,谷歌发布了 BigTable 的论文,它是以 GFS 为底层数据存储的分布式存储系统。
GFS、MapReduce、BigTable 就是我们经常说的“三辆马车”。Hadoop 与这三篇论文的关系是这样的:
- Hadoop 中的 HDFS 是 GFS 的开源实现;
- Hadoop 中的 MapReduce 是谷歌 MapReduce 的开源实现;
- Hadoop 中的 Hbase 是谷歌 BigTable 的开源实现。
Hadoop 特点有:
- 跨平台性:hadoop是基于java语言开发的,有很好的跨平台性,可以运行在Linux平台上;
- 高可靠性:hadoop中的HDFS是分布式文件系统,可以将海量数据分布冗余存储在不同的机器节点上,即使是某个机器副本上发生故障,其他的机器副本也能正常运行;
- 高容错性:HDFS把文件分布存储在很多不同的机器节点上,能实现自动保存多个副本,因此某个节点上的任务失败后也能实现自动重新分配;
- 高效性:hadoop的核心组件HDFS和MapReduce,一个负责分布式存储一个负责分布式处理,能够处理PB级别的数据;
- 低成本与高扩展:hadoop在廉价的计算机集群上就可以运行,因此成本比较低,并且可以扩展到几千个计算机节点上,完成海量数据的存储和计算。
Hadoop 生态体系包含了很多子系统,下面介绍一些常见的子系统,具体如下:
HDFS:分布式文件系统
HDFS是Hadoop分布式文件系统,它是Hadoop生态系统中的核心项目之一,是分布式计算中数据存储管理基础。HDFS具有高容错性的数据备份机制,它能检测和应对硬件故障,并在低成本的通用硬件上运行。另外,HDFS具备流式的数据访问特点,提供高吞吐量应用程序数据访问功能,适合带有大型数据集的应用程序。
MapReduce:分布式计算框架
MapReduce是一种计算模型,用于大规模数据集(大于1TB)的并行运算。“Map”对数据集上的独立元素进行指定的操作,生成键值对形式中间结果;“Reduce”则对中间结果中相同“键”的所有“值”进行规约,以得到最终结果。MapReduce这种“分而治之”的思想,极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。
Yarn:资源管理框架
Yarn(Yet Another Resource Negotiator)是Hadoop 2.0中的资源管理器,它可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。
Sqoop:数据迁移工具
Sqoop是一款开源的数据导入导出工具,主要用于在Hadoop与传统的数据库间进行数据的转换,它可以将一个关系型数据库(例如,MySQL、Oracle等)中的数据导入到Hadoop的HDFS中,也可以将HDFS的数据导出到关系型数据库中,使数据迁移变得非常方便。
Mahout:数据挖掘算法库
Mahout是Apache旗下的一个开源项目,它提供了一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout包含许多实现,包括聚类、分类、推荐过滤、频繁子项挖掘。此外,通过使用 Apache Hadoop 库,Mahout 可以有效地扩展到云中。
Hbase:分布式存储系统
Hbase是Google Bigtable克隆版,它是一个针对结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。和传统关系数据库不同,Hbase采用了BigTable的数据模型:增强的稀疏排序映射表(Key/Value),其中,键由行关键字、列关键字和时间戳构成。Hbase提供了对大规模数据的随机、实时读写访问,同时,Hbase中保存的数据可以使用MapReduce来处理,它将数据存储和并行计算完美地结合在一起。
Zookeeper:分布式协作服务
Zookeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等用于构建分布式应用,减少分布式应用程序所承担的协调任务。
Hive:基于 Hadoop 的数据仓库
Hive 是基于 Hadoop 的一个分布式数据仓库工具,可以将结构化的数据文件映射为一张数据库表,将SQL语句转换为MapReduce任务进行运行。其优点是操作简单,降低学习成本,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
Flume:日志收集工具
Flume 是 Cloudera 提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
Pig:MapReduce 的一个抽象
可以使用Apache Pig在Hadoop中执行所有的数据处理操作。要编写数据分析程序,Pig提供了一种称为 Pig Latin 的高级语言。该语言提供了各种操作符,程序员可以利用它们开发自己的用于读取,写入和处理数据的功能。可以让不太擅长编写Java程序的程序员来进行大数据分析处理。
Spark:通用计算引擎
Spark不依赖于MapReduce,它使用了自己的数据处理框架。Spark使用内存进行计算,速度更快。Spark本身就是一个生态系统,除了核心API之外,Spark生态系统中还包括其他附加库,可以在大数据分析和机器学习领域提供更多的能力,如Spark SQL,Spark Streaming,Spark MLlib,Spark GraphX,BlinkDB,Tachyon等。
Impala:新型查询系统
Impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和Hbase中的PB级大数据。已有的Hive系统虽然也提供了SQL语义,但由于Hive底层执行使用的是MapReduce引擎,仍然是一个批处理过程,难以满足查询的交互性。相比之下,Impala的最大特点也是最大卖点就是它的快速。Impala可以Hive结合使用,它可以直接使用Hive的元数据库 metadata。
Kafka:分布式消息队列
Kafka是一种分布式的,基于发布/订阅的消息系统,类似于消息队列的功能,可以接收生产者(如webservice、文件、hdfs、hbase等)的数据,本身可以缓存起来,然后可以发送给消费者(同上),起到缓冲和适配的作。
Ambari:大数据集群管理系统
Ambari是一个开源的大数据集群管理系统,可以用来就是创建、管理、监视 Hadoop 的集群,并提供WEB可视化的界面来让用户进行管理。