一.Hadoop概述
1.1 Hadoop简要概述
我们生活在这个数据大爆炸的时代 ,很难估算全球电子设备中存储的数据总共有多少 。当前一个中小型公司的数据量也达到数十TB,甚至更多。
有句话说得好 :“ 大数据胜于好算法 。” 意思是说对于某些应用 (譬如根据以往的偏好来推荐电影和音乐),不论算法有多牛 ,基于小数据的推荐效果往往都不如基于大量可用数据的 一般算法的推荐效果 。
我们遇到的问题很简单:在硬盘存储容量多年来不断提升的同时,访问速 度(硬盘数据读取速度)却没有与时俱进 。
第二个问题是大多数分析任务需要以某种方式结合大部分数据来共同完成分析 ,即从一个硬盘读取的数据可能需要与从另外 99 个硬盘中读取的数据结合使用 。各种分布式系统允许结合不同来源的数据进行分析,但保证其正确性是一个非常大的挑战 。
MapReduce 提出一个编程模型 ,该模型抽象出这些硬盘读写问题井将其转换为对一个数据集(由键值对组成)的计算 。后文将详细讨论这个模型 ,这样的计算由 map 和 reduce 两部分组成 ,而且只有这两部分提供对外的接口 。与HDFS 类似,MapReduce自身也有很高的可靠性 。
MapReduce 看似采用了一种蛮力方法 。每个查询需要处理整个数据集或至少一个数据集的绝大部分 。但反过来想,这也正是它的能力 。MapReduce 是一个批量查询处理器 ,能够在合理的时间范围内处理针对整个数据集的动态查询 。它改变了我们对数据的传统看法 ,解放了以前只是保存在磁带和硬盘上的数据 。它让我们有机会对数据进行创新 。以前需要很长时间处理才能获得结果的问题 ,到现在变得顷刻之间就迎刃而解 ,同时还可以引发新的问题和新的见解 。PDF访问:python33
1.2 Hadoop发展历史
Hadoop 是 Apache Lucene 创始人Doug Cutting 创建的 ,Lucene 是一个应用 广 泛 的文本搜索系统库Hadoop起源于开 源的网络搜索引擎Apache Nutch,它本身也是 Lucene 项目的一部分 。
Hadoop 的得名
Hadoop不是缩写,它是一个生造出来的词 。Hadoop 之父Doug Cutting这样解释Hadoop的来历:
“这个名字是我的小 孩给他的毛绒象玩具取的,我的命名标准是好拼读,含义宽泛,不会被用于其他地方,小孩子是这方 面的高手。Googol 就是小孩子起的名字 。”
Hadoop 的子项目及后续模块所使用的名称也往往与 其功 能不相关 ,通常也以大象或其他动物为主题取名(例如 Pig). 较小一些的组件 ,名称通常都有较好的描述性(因此也史流俗).这个原则很好 ,意味着我们可以望文 知义,例如 jobtracker,一看就知道它是用来跟踪MapReduce作业的 。
从头打造 一个网络搜索引擎是 一个雄心勃勃的计划 ,不只是因为写爬虫程序很复杂 ,更因为必须有 一个专职团队来实现一一项目中包含许许多多需要随时修改的活动部件 。同时,构建这样的系统代价非常高 一据 Mike Cafarella 和 Doug Cutting 估计 ,一个支持10亿网页的索引系统 ,单是硬件上的投入就高达50万美元 ,另外还有每月高达3万美元的运维费用。不过 ,他们认为这个工作仍然值得投入,因为它开创的是一个优化搜索引擎算法的平台。
Nutch 项目开始于2002年,一个可以运行的网页爬取 工具和搜索引擎系统 很快面试 。但后来 ,开发者认为这 一架构的灵活性不够 ,不足以解决数十 亿网页的搜索问题 。一篇发表于 2003 年的论文为此提供了帮助 ,文中描述的是谷歌产品架构 ,该架构称为 “ 谷歌分布式文件系统” ,简称 GFS 。GFS 或类似的架构,可以解决他们在网页爬取和索引过程中产生的超大文件的存储需求。特别关键的是,GFS 能够节省系统管理(如管理存储节点)所花的大量时间 。在2004,他们开始着手做开源版本的实现 ,即 Nutch 分布式 文件系统 NDFS。
2004年,谷歌发表论文向全世界介绍他们的 MapReduce系统 。2005年初,Nutch的开发人员在Nutcb上实现了一个 MapReduce系统,到年中,Nutcb 的所有主要算住均完成移植,用MapReduce和NDFS来运行 。
Nutch的NDFS和MapReduce 实现不只适用于搜索领域 。在2006年2月, 开发人员将NDFS和MapReduce移出Nutch形成 Lucene 的一个子项目 ,命名为Hadoop 。大约在同 一时间 ,Doug Cutting加入雅虎,雅虎为此组织了专门的团队和资源 ,将 Hadoop 发展成能够处理 Web 数据的系统。在2008年2月,雅虎宣布,雅虎搜索引擎使用的索引是在一个拥有上万个内核的Hadoop集群上构建的。
2008年1月,Hadoop已成为Apache的顶级项目,证明了它的成功 、多样化和生命力 。到目前为止,除雅虎之外,还有很多公司在用 Hadoop ,例如 Last.fm 、Facebook 和 《纽约时报》 等 。
《纽约时报》的案例广为流传 ,他们把1851年到1980年的存档扫描之后得到4TB的文件并用亚马逊的EC2 云服务将文件存为PDF格式放到网上共享 。整个过程 一共使用了100台计算机 ,所花的时间不到24小时。如果没有亚马逊的按小时付费模式(即允许《纽约时报》短期内访问大量机器) 和 Hadoop 好用的并发编程模型珠联璧合,这个项目不太可能这么快就启动和完成 。
2008年4月,Hadoop打破世界纪录,成为最快的TB级数据排序系统 。在 个 910 节点的群集 ,Hadoop 在 209 秒内(不到 3.5 分钟)完成了对 1TB 数据的排序,击 败了前 一年的 297 秒冠军。同年11月,谷歌在报告中 声称 ,它的 MapReduce 对 1TB数据排序只用了68秒 。从那以后 ,Hadoop 跃升为企业主流的部署系统 。在工业界 ,Hadoop 已经是 公认的大数据通用存储和分析平台 ,这一事实主要体现在大量直接使用或 者间接辅助Hadoop系统的产品如雨后春笋般大量涌现 。一些大公司也发布Hadoop发行版本,包括 EMC , IBM , Microsft 和 Oracle 以及一些专注于 Hadoop 的公司,如 Cloudera , Hortonworks和MapR 。
Eric Baldeschwieler(Eric14)组建了一个小团队,于是我们开始设计并在GFS和MapReduce上用 C++来建立 一个新框架的原型,并打算用它来取代 Dreadnaught。尽管我们的当务之急是需要一个新的WebMap框架,但史清楚的是,建立 雅虎搜索引擎批处理平台的标准对我们更重要 。使平台是通用以便支持其他用户 ,才 能够史好地实现新平台的均衡性投资 。
与此同时,我们也关注在 Hadoop(当 时也是 Nutcb 的一部分)及其进展情 况. 2006年1月,雅虎聘请了Doug Cutting。一个月后 ,我们决定放弃原型,转而采用Hadoop. 与我们的原型和设计相比,Hadoop的优势在于它已经在 20个节点上实际应用过(Nutch)。这样一来,我们便能在两个月内搭建一个研究集群并能够以很快的速度帮 助我们的客户使用这个新的框架.另 一个显著的优点是 Hadoop 已经开源 ,比较容易(尽管也不是想象的那 么容易 !)从雅虎法务部门获得许可对该开源系统进行进一步 研究 。因此 ,我们在 2006 年初建立 了一个 200 节点的研究 集群并暂时搁直 WebMap计划 ,转而为研究用户提供Hadoop支持和优化服务 。
Hadoop 大事记:
2004 年Doug Cutting 和 Mike Cafarella 实现了 HDFS 和 MapReduce 的初版
2005 年12 月 Nutch 移植到新框架 ,Hadoop 在 20 个节点上稳定运行
2006 年1 月 Doug Cutting 加入雅虎
2006 年2 月 Apache Hadoop 项目正式启动 ,支持 MapReduce 和 HDFS 独立发展
2006 年2 月 雅虎的网格计算团 队采用 Hadoop
2006 年4 月 在 188 个节点上(每节点 10 GB)运行排序测试集需要 47.9 个小时)
2006 年5 月 雅虎建立了一个 300 个节点的 Hadoop 研究集群
2006 年5 月 在 500 个节点上运行排序测试集 需要 42 个小时(硬件配置比 4 月份的更好)
2006 年11 月 研究集群增加到 600 个节点
2006 年12月 排序测试集在 20 个节点上运行 1.8 个小时,1 00 个节点上运行 3.3 小时,500 个节点上运行 5.2 小时,900 个节点上运行 7.8 个小时
2007 年 1 月 研究集群增加到 900 个节点
2007 年 4 月 研究集群增加到两个集群 1000 个节点
2008 年 4 月 在 900 个节点上运行 l TB 排序测试集仅 需 209 秒,成为全球最快
2008 年 10 月 研究集群每天装载 10 TB 的数据
2009 年 3 月 17 个集群共 24 000 个节点
2009 年 4 月 在每分钟排序中胜出 ,59 秒内排序 500 GB(在 1400 个节点上)和 173分钟内排序 100 TB 数据(在 3400 个节点上)
二.Hadoop 生态系统
Hadoop由HDFS、MapReduce、HBase、Hive和ZooKeeper等成员组成,其中最基础最重要元素为底层用于存储集群中所有存储节点文件的文件系统HDFS(Hadoop Distributed File System)来执行MapReduce程序的MapReduce引擎。