Hadoop 是 Apache 软件基金会旗下的一个分布式计算开源软件。Hadoop 项目起源于 Apache Nutch(爬虫系统),项目自身是 Lucene(全文搜索引擎)项目的一部分。2002年,Lucene 项目引入 Nutch 项目作为其子项目,可用于网页抓去工具和搜索引擎系统,但是不能很好地处理一定量级(数十亿级)的网页搜索。2003年10月Sanjay Ghemawat 等在19届ACM Symposium on Operating System Principles 上公开发表论文,描述了谷歌产品架构 GFS(谷歌分布式文件系统),该架构可以帮助 Nutch 项目解决超大文件的存储问题。2004年12月,Google在第6届 USENIX Operating Systems Design and Implementation 会议上发表论文,描述了其 MapReduce系统。2005年,Nutch项目组实现了一个 MapReduce系统,并将主要搜索算法进行移植,运行到 NDFS 和 MapReduce 的开源系统中。
2006年2月,NDFS 和 MapReduce 从 Nutch 项目分离出来,形成一套完整而独立的软件,起名为 Hadoop。2008年初,Hadoop成了 Apache 的顶级项目。2008年2月,雅虎构建了当时规模最大的 Hadoop应用,在2000个节点上运行拥有1万个内核的Hadoop集群,用于运行雅虎搜索引擎和广告系统。
HDFS是Hadoop的分布式文件系统,是Hadoop体系中的基本架构之一。具有高度容错能力,能检测和应对硬件故障,可设计部署在通用的服务器、操作系统和虚拟机等各种软硬件上,提供高吞吐量应用程序数据访问功能,适合带有大型数据集的应用程序。HDFS简化了文件的一致性模型,通过流式访问文件系统中的数据。
MapReduce是Hadoop分布式并行计算软件框架,支持大规模数据(大于1TB)的并行计算。MapReduce将应用划分为Map和Reduce两个步骤,其中Map对数据集上的独立元素进行指定操作,生成键 / 值对形式的中间结果。Reduce则对中间结果中具有相同 “键” 的所有 “值” 进行规约,以得到最终结果。MapReduce这样的功能划分非常适合于由大量计算机组成的分布式环境进行并行数据处理。
Common 是为 Hadoop 其他子项目提供支持的常用工具,它主要包括 FileSystem、RPC、和串行化库,为搭建云计算环境提供基本服务,并且为运行在该平台上的软件开发提供所需的API。
Hive是一个Hadoop的数据仓库架构,最早由Facebook设计,它为数据仓库管理提供了许多功能,包括:数据ETL(抽取、转换和加载)工具、数据存储管理和大型数据的查询和分析能力。Hive提供的是一种结构化数据的机制,定义了类似于传统关系数据库中的类 SQL —— Hive SQL,可以查询和分析存储在 Hadoop 中的大规模数据。
Hbase是一个分布式、面向列的开源非关系行数据库(NoSQL 数据库),此技术源于 Google 的 BigTable 系统(一个结构化数据的分布式存储系统)。和传统关系数据库不同,HBase采用了BigTable的数据模型:增强的稀疏排序映射表(Key / Value),其中,键(Key)由行关键字、列关键字和时间戳构成。HBase提供了对大规模数据的随机、实时读写访问,同时,HBase中保存的数据可以使用 MapReduce来处理,它将数据存储和并行计算完美地结合在一起。
Pig是基于Hadoop的并行计算高级编程语言,它简化了使用Hadoop进行数据分析的要求,提供了一个高层次的、面向领域的抽象语言 Pig Latin。通过 Pig Latin,数据工程师可以将复杂且互相关联的数据分析任务编码为 Pig 操作上的数据流脚本,通过将该脚本转换为 MapReduce 任务链,在 Hadoop 上执行。
ZooKeeper基于Hadoop分布式写作服务。ZooKeeper作为一个分布式的服务框架,解决了分布式计算中的一致性问题。ZooKeeper可用于处理分布式应用中经常遇到的一些数据管理问题,如统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。ZooKeeper常作为其他Hadoop相关项目的主要组件。
Avro是一个数据序列化的系统。Avro提供了丰富的数据结构类型、快速可压缩的二进制数据格式、存储持久性数据的文件集、远程调用 RPC 和简单动态语言集成等功能,可以将数据结构或者对象转换成便于存储和传输的格式,其设计目标是用于支持数据密集型应用,适合大规模数据的存储与交换。
Mahout是一种数据挖掘分析工具,原是 Apache Lucent的子项目,现已是 Apache 的顶级项目。 Mahout 现在已经包含了聚类、分类、推荐引擎(协同过滤)和频繁挖掘等广泛使用的数据挖掘方法。除了算法,Mahout 还包含数据的输入 / 输出工具、与其他存储系统(如数据库、MongoDB 或 Cassandra)集成等数据挖掘支持架构。
Flume 是一个由 Cloudera 开发维护的分布式、可靠、高可用的日志收集系统。它将数据从产生、传输、处理并最终写入目标路径的过程抽象为数据流,在具体的数据流中,数据源支持在 Flume 中定制数据发送方,从而支持收集各种不同协议数据。同时,Flume数据流提供对日志数据简单处理的能力,如过滤、格式转换等。
Sqoop是Hadoop的周边工具,它的主要作用是在结构化数据存储与Hadoop之间进行数据转换。Sqoop可以将一个关系型数据库(如MySQL、Oracle、PostgreSQL等)中的数据导入到 Hadoop 的 HDFS、Hive 中,也可以将 HDFS、Hive中的数据导入到关系型数据库中。Sqoop 充分利用了 Hadoop 的优点,整个数据导入 / 导出过程都采用 MapReduce 实现并行化,同时,该过程的大部分步骤自动执行,非常方便。