Hadoop介绍
# Hadoop是什么
Apache™ Hadoop® 项目为可靠、可扩展的分布式计算开发开源软件。
Apache Hadoop 是一个框架,它允许使用简单的编程模型跨计算机集群分布式处理大型数据集。它旨在从单个服务器扩展到数千台机器,每台机器都提供本地计算和存储。库本身不是依靠硬件来提供高可用性,而是设计用于检测和处理应用层的故障,因此在计算机集群之上提供高可用性服务,每台计算机都可能容易出现故障。
# Hadoop核心模块
- Hadoop Common:支持其他 Hadoop 模块的通用实用程序。
- Hadoop 分布式文件系统 (HDFS™):一种分布式文件系统,可提供对应用程序数据的高吞吐量访问。
- Hadoop YARN:作业调度和集群资源管理的框架。
- Hadoop MapReduce:基于 YARN 的系统,用于并行处理大型数据集。
# Hadoop的起源
2003-2004年,Google公布了部分GFS和MapReduce思想的细节,受此启发的Doug Cutting等人用2年的业余时间实现了DFS和MapReduce机制,使Nutch性能飙升。然后Yahoo招安Doug Gutting及其项目。 2005年,Hadoop作为Lucene的子项目Nutch的一部分正式引入Apache基金会。 2006年2月被分离出来,成为一套完整独立的软件,起名为Hadoop Hadoop名字不是一个缩写,而是一个生造出来的词。是Hadoop之父Doug Cutting儿子毛绒玩具象命名的。 Hadoop的成长过程 Lucene-->Nutch--->Hadoop
总结起来,Hadoop起源于Google的三大论文 GFS:Google的分布式文件系统Google File System MapReduce:Google的MapReduce开源分布式并行计算框架 BigTable:一个大型的分布式数据库
演变关系 GFS---->HDFS Google MapReduce---->Hadoop MapReduce BigTable---->HBase
# Hadoop发展史
Hadoop大事记
- 2004年— 最初的版本(现在称为HDFS和MapReduce)由Doug Cutting和Mike Cafarella开始实施。
- 2005年12月— Nutch移植到新的框架,Hadoop在20个节点上稳定运行。
- 2006年1月— Doug Cutting加入雅虎。
- 2006年2月— Apache Hadoop项目正式启动以支持MapReduce和HDFS的独立发展。
- 2006年2月— 雅虎的网格计算团队采用Hadoop。
- 2006年4月— 标准排序(10 GB每个节点)在188个节点上运行47.9个小时。
- 2006年5月— 雅虎建立了一个300个节点的Hadoop研究集群。
- 2006年5月— 标准排序在500个节点上运行42个小时(硬件配置比4月的更好)。
- 2006年11月— 研究集群增加到600个节点。
- 2006年12月— 标准排序在20个节点上运行1.8个小时,100个节点3.3小时,500个节点5.2小时,900个节点7.8个小时。
- 2007年1月— 研究集群到达900个节点。
- 2007年4月— 研究集群达到两个1000个节点的集群。
- 2008年4月— 赢得世界最快1TB数据排序在900个节点上用时209秒。
- 2008年7月— 雅虎测试节点增加到4000个
- 2008年9月— Hive成为Hadoop的子项目
- 2008年11月— Google宣布其MapReduce用68秒对1TB的程序进行排序
- 2008年10月— 研究集群每天装载10TB的数据。
- 2008年— 淘宝开始投入研究基于Hadoop的系统--云梯。云梯总容量约9.3PB,共有1100台机器,每天处理18000道作业,扫描500TB数据。
- 2009年3月— 17个集群总共24 000台机器。
- 2009年3月— Cloudera推出CDH(Cloudera’s Dsitribution Including Apache Hadoop)
- 2009年4月— 赢得每分钟排序,雅虎59秒内排序500 GB(在1400个节点上)和173分钟内排序100 TB数据(在3400个节点上)。
- 2009年5月— Yahoo的团队使用Hadoop对1 TB的数据进行排序只花了62秒时间。
- 2009年7月— Hadoop Core项目更名为Hadoop Common;
- 2009年7月— MapReduce 和 Hadoop Distributed File System (HDFS) 成为Hadoop项目的独立子项目。
- 2009年7月— Avro 和 Chukwa 成为Hadoop新的子项目。
- 2009年9月— 亚联BI团队开始跟踪研究Hadoop
- 2009年12月—亚联提出橘云战略,开始研究Hadoop
- 2010年5月— Avro脱离Hadoop项目,成为Apache顶级项目。
- 2010年5月— HBase脱离Hadoop项目,成为Apache顶级项目。
- 2010年5月— IBM提供了基于Hadoop 的大数据分析软件——InfoSphere BigInsights,包括基础版和企业版。
- 2010年9月— Hive( Facebook) 脱离Hadoop,成为Apache顶级项目。
- 2010年9月— Pig脱离Hadoop,成为Apache顶级项目。
- 2011年1月— ZooKeeper 脱离Hadoop,成为Apache顶级项目。
- 2011年3月— Apache Hadoop获得Media Guardian Innovation Awards 。
- 2011年3月— Platform Computing 宣布在它的Symphony软件中支持Hadoop MapReduce API。
- 2011年5月— Mapr Technologies公司推出分布式文件系统和MapReduce引擎——MapR Distribution for Apache Hadoop。
- 2011年5月— HCatalog 1.0发布。该项目由Hortonworks 在2010年3月份提出,HCatalog主要用于解决数据存储、元数据的问题,主要解决HDFS的瓶颈,它提供了一个地方来存储数据的状态信息,这使得 数据清理和归档工具可以很容易的进行处理。
- 2011年4月— SGI( Silicon Graphics International )基于SGI Rackable和CloudRack服务器产品线提供Hadoop优化的解决方案。
- 2011年5月— EMC为客户推出一种新的基于开源Hadoop解决方案的数据中心设备——GreenPlum HD,以助其满足客户日益增长的数据分析需求并加快利用开源数据分析软件。Greenplum是EMC在2010年7月收购的一家开源数据仓库公司。
- 2011年5月— 在收购了Engenio之后, NetApp推出与Hadoop应用结合的产品E5400存储系统。
- 2011年6月— Calxeda公司(之前公司的名字是Smooth-Stone)发起了“开拓者行动”,一个由10家软件公司组成的团队将为基于Calxeda即将推出的ARM系统上芯片设计的服务器提供支持。并为Hadoop提供低功耗服务器技术。
- 2011年6月— 数据集成供应商Informatica发布了其旗舰产品,产品设计初衷是处理当今事务和社会媒体所产生的海量数据,同时支持- Hadoop。
- 2011年7月— Yahoo!和硅谷风险投资公司 Benchmark Capital创建了Hortonworks 公司,旨在让Hadoop更加鲁棒(可靠),并让企业用户更容易安装、管理和使用Hadoop。
- 2011年8月— Cloudera公布了一项有益于合作伙伴生态系统的计划——创建一个生态系统,以便硬件供应商、软件供应商以及系统集成商可以一起- 探索如何使用Hadoop更好的洞察数据。
- 2011年8月— Dell与Cloudera联合推出Hadoop解决方案——Cloudera Enterprise。Cloudera Enterprise基于Dell PowerEdge - C2100机架服务器以及Dell PowerConnect 6248以太网交换机
# Hadoop的四大特性(优点)
- 扩容能力(Scalable):Hadoop是在可用的计算机集群间分配数据并完成计算任务的,这些集群可用方便的扩展到数以千计个节点中。
- 成本低(Economical):Hadoop通过普通廉价的机器组成服务器集群来分发以及处理数据,以至于成本很低。
- 高效率(Efficient):通过并发数据,Hadoop可以在节点之间动态并行的移动数据,使得速度非常快。
- 可靠性(Rellable):能自动维护数据的多份复制,并且在任务失败后能自动地重新部署(redeploy)计算任务。所以Hadoop的按位存储和处理数据的能力值得人们信赖。
# Hadoop的版本
Hadoop的版本很特殊,是由多条分支并行的发展着。 1.x:该版本是由0.20.x发行版系列的延续 2.x:该版本是由0.23.x发行版系列的延续 其实Hadoop也就两个版本1.x和2.x Hadoop1.x 指的是:1.x(0.20.x)、0.21、0.22 Hadoop2.x 指的是:2.x、0.23.x 注意:高版本不一定包含低版本的特性
董的博客中也解释了各个版本的问题: Hadoop版本选择探讨 (opens new window) Hadoop 2.0中的基本术语解释 (opens new window)
Hadoop版本演变图
红色:表示企业中用的最多的实际生产版本
绿色:表示企业中用的最多的alpha版本
# 如何选择Hadoop版本
当前Hadoop版本比较混乱,让很多用户不知所措。实际上,当前Hadoop只有两个版本:Hadoop 1.0和Hadoop 2.0,其中,Hadoop 1.0由一个分布式文件系统HDFS和一个离线计算框架MapReduce组成,而Hadoop 2.0则包含一个支持NameNode横向扩展的HDFS,一个资源管理系统YARN和一个运行在YARN上的离线计算框架MapReduce。相比于Hadoop 1.0,Hadoop 2.0功能更加强大,且具有更好的扩展性、性能,并支持多种计算框架。 当我们决定是否采用某个软件用于开源环境时,通常需要考虑以下几个因素:
- 是否为开源软件,即是否免费。
- 是否有稳定版,这个一般软件官方网站会给出说明。
- 是否经实践验证,这个可通过检查是否有一些大点的公司已经在生产环境中使用知道。
- 是否有强大的社区支持,当出现一个问题时,能够通过社区、论坛等网络资源快速获取解决方法。
# Hadoop生态系统
当今的Hadoop已经成长为一个庞大的体系,只要有和海量数据相关的领域。都有Hadoop的身影。 Hadoop生态系统图谱

Hadoop1.x的核心:
- Hadoop Common
- Hadoop Distributed File System(HDFS)
- Hadoop MapReduce

Hadoop2.x的核心:
- Hadoop Common
- Hadoop Distributed File System(HDFS)
- Hadoop MapReduce
- Hadoop YARN

# Hadoop1.x 的各项目介绍
# 1. HDFS
分布式文件系统,将一个文件分成多个块,分别存储(拷贝)到不同的节点上.它是Hadoop体系中数据存储管理的基础。它是一个高度容错的系统,能检测和应对硬件故障,用于在低成本的通用硬件上运行。HDFS简化了文件的一致性模型,通过流式数据访问,提供高吞吐量应用程序数据访问功能,适合带有大型数据集的应用程序。
# 2. MapReduce
分布式计算框架,它是一种分布式计算处理模型和执行环境,用于进行大数据量的计算。共包括Map和Reduce部分。其中Map接受一个键值对(key-value),产生一组中间键值对。MapReduce框架会将map函数产生的中间键值对里键相同的值传递给一个reduce函数。Reduce函数:接受一个键,以及相关的一组值,将这组值进行合并产生一组规模更小的值(通常只有一个或零个值)。
# 3. Hive (opens new window)
基于Hadoop的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类似SQL一样的查询语言HiveQL来管理这些数据。Hive定义了一种类似SQL的查询语言(HQL),将SQL转化为MapReduce任务在Hadoop上执行。通常用于离线分析。
# 4. Pig (opens new window)
Pig是一个基于Hadoop的大数据分析平台,它提供了一个叫PigLatin的高级语言来表达大数据分析程序,将脚本转换为MapReduce任务在Hadoop上执行。通常用于进行离线分析。
# 5. Mahout (opens new window)
数据挖掘算法库,Mahout起源于2008年,最初是Apache Lucent的子项目,它在极短的时间内取得了长足的发展,现在是Apache的顶级项目。Mahout的主要目标是创建一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout现在已经包含了聚类、分类、推荐引擎(协同过滤)和频繁集挖掘等广泛使用的数据挖掘方法。除了算法,Mahout还包含数据的输入/输出工具、与其他存储系统(如数据库、MongoDB 或Cassandra)集成等数据挖掘支持架构。
# 6. ZooKeeper (opens new window)
分布式协作服务,是一个针对大型分布式系统的可靠协调系统,提供包括配置维护,名字服务,分布式同步和组服务等功能。Hadoop的管理就是用的ZooKeeper
# 7. HBase (opens new window)
HBase是一个分布式列存数据库,它基于Hadoop之上提供了类似BigTable的功能。HBase是一个针对结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。和传统关系数据库不同,HBase采用了BigTable的数据模型:增强的稀疏排序映射表(Key/Value),其中,键由行关键字、列关键字和时间戳构成。HBase提供了对大规模数据的随机、实时读写访问,同时,HBase中保存的数据可以使用MapReduce来处理,它将数据存储和并行计算完美地结合在一起。
# 8. Sqoop (opens new window)
数据同步工具,SQL-to-Hadoop的缩写。Sqoop是一个Hadoop和关系型数据库之间的数据转移工具。可将关系型数据库中的数据导入到Hadoop的HDFS中,也可将HDFS中的数据导进到关系型数据库中主要用于传统数据库和Hadoop之前传输数据。数据的导入和导出本质上是Mapreduce程序,充分利用了MR的并行化和容错性。
# 9. Flume (opens new window)
日志收集工具,Cloudera开源的日志收集系统,具有分布式、高可靠、高容错、易于定制和扩展的特点。它将数据从产生、传输、处理并最终写入目标的路径的过程抽象为数据流,在具体的数据流中,数据源支持在Flume中定制数据发送方,从而支持收集各种不同协议数据。同时,Flume数据流提供对日志数据进行简单处理的能力,如过滤、格式转换等。此外,Flume还具有能够将日志写往各种数据目标(可定制)的能力。总的来说,Flume是一个可扩展、适合复杂环境的海量日志收集系统。
# 10. Ambari (opens new window)
是一个对Hadoop集群进行监控和管理的基于Web的系统。目前已经支持HDFS,MapReduce,Hive,HCatalog,HBase,ZooKeeper,Oozie,Pig和Sqoop等组件。