Hadoop 知识总结(最终总结)

sweetbaybe

贡献于2012-03-14

字数:5756 关键词: Hadoop 分布式/云计算/大数据

本文档主要是针对Hadoop最基本知识的了解,对于刚刚接触Hadoop学习过程中的总结。 1、 Hadoop是什么 Hadoop是一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有着高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高传输率(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX(Portable Operating System Interface可移植操作系统接口)的要求(requirements)这样可以流的形式访问(streaming access)文件系统中的数据。 2、 Hadoop发展历史 · 2004年,Google发表论文,向全世界介绍了MapReduce。 · 2005年初,为了支持Nutch搜索引擎项目,Nutch的开发者基于Google发布的MapReduce报告,在Nutch上开发了一个可工作的MapReduce应用。 · 2005年年中,所有主要的Nutch算法被移植到使用MapReduce和NDFS(Nutch Distributed File System )来运行。 · 2006年1月,Doug Cutting加入雅虎,Yahoo!提供一个专门的团队和资源将Hadoop发展成一个可在网络上运行的系统。 · 2006年2月,Apache Hadoop项目正式启动以支持MapReduce和HDFS的独立发展。 · 2007年,百度开始使用Hadoop做离线处理,目前差不多80%的Hadoop集群用作日志处理。 · 2007年,中国移动开始在“大云”研究中使用Hadoop技术,规模超过1000台。 · 2008年,淘宝开始投入研究基于Hadoop的系统——云梯,并将其用于处理电子商务相关数据。云梯1的总容量大概为9.3PB,包含了1100台机器,每天处理约18000道作业,扫描500TB数据。 · 2008年1月,Hadoop成为Apache顶级项目。 · 2008年2月,Yahoo!宣布其搜索引擎产品部署在一个拥有1万个内核的Hadoop集群上。 · 2008年7月,Hadoop打破1TB数据排序基准测试记录。Yahoo!的一个Hadoop集群用209秒完成1TB数据的排序 ,比上一年的纪录保持者保持的297秒快了将近90秒。 · 2009 年 3 月,Cloudera推出CDH(Cloudera’s Distribution including Apache Hadoop)平台,完全由开放源码软件组成,目前已经进入第3版。 · 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新的子项目。 · 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以太网交换机 。 3、 Hadoop生态圈 4、 Hadoop优点 Hadoop 是一个能够对大量数据进行分布式处理的软件框架。Hadoop 是以一种可靠、高效、可伸缩的方式进行处理的。 (1) Hadoop 是可靠的,因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。 (2) Hadoop 是高效的,因为它以并行的方式工作,通过并行处理加快处理速度。 (3) Hadoop 还是可伸缩的,能够处理 PB 级数据。 此外,Hadoop 依赖于社区服务器,因此它的成本比较低,任何人都可以使用。 Hadoop带有用 Java 语言编写的框架,因此运行在 Linux 生产平台上是非常理想的。Hadoop 上的应用程序也可以使用其他语言编写,比如 C++。 5、Hadoop架构 Hadoop 有许多元素构成。其最底部是 Hadoop Distributed File System(HDFS),它存储 Hadoop 集群中所有存储节点上的文件。HDFS(对于本文)的上一层是 MapReduce 引擎,该引擎由 JobTrackers 和 TaskTrackers 组成。 (1) HDFS HDFS是一个master/slave的结构,就通常的部署来说,在master上只运行一个Namenode,而在每一个slave上运行一个Datanode。它支持传统的层次文件组织结构,同现有的一些文件系统在操作上很类似,比如可以创建和删除一个文件,把一个文件从一个目录移到另一个目录,重命名等操作。HDFS结构示意图如下: 上图中展示了整个即HDFS中三个重要角色:NameNode、DataNode和Client (a)NameNode可以看作是分布式文件系统中的管理者,主要负责管理文件系统的命名空间、集群配置信息和存储块的复制等,包括对文件系统的操作(如建立、删除文件和文件夹)都是通过Namenode来控制。NameNode会将文件系统的Meta-data存储在内存中,这些信息主要包括了文件信息、每一个文件对应的文件块的信息和每一个文件块在DataNode的信息等。 (b)DataNode是文件存储的基本单元,它将Block存储在本地文件系统中,保存了Block的Meta-data,同时周期性地将所有存在的Block信息发送给NameNode。 (c)Client就是需要获取分布式文件系统文件的应用程序。 在HDFS中,Namenode、Datanode、Client之间的通信都是建立在TCP/IP的基础之上的。HDFS的操作主要有以下几种: (a)文件写入 .Client向NameNode发起文件写入的请求。 .NameNode根据文件大小和文件块配置情况,返回给Client它所管理部 分DataNode的信息。 .Client将文件划分为多个Block,根据DataNode的地址信息,按顺序写 入到每一个DataNode块中。 另外注意,在文件写入Block时,需要考虑冗余的因素,HDFS采用的方式是:当客户端要写入文件到DataNede上,首先客户端读取一个Block然后写到第一个DataNode上,然后由第一个DataNode传递到备份的DataNode上,一直到所有需要写入这个Block的NataNode都成功写入,客户端才会继续开始写下一个Block。 (b)文件读取: .Client向NameNode发起文件读取的请求。 .NameNode返回文件存储的DataNode的信息。 .Client读取文件信息。 (c)文件Block复制 .NameNode发现部分文件的Block不符合最小复制数或者部分DataNode 失效。 .通知DataNode相互复制Block。 .DataNode开始直接相互复制。 HDFS的设计特点: (a)节点健康状况的检测:通过“心跳(Heartbreak)”的方式进行,心跳检测 DataNode的健康状况 (b)并发控制的实现机制:write-one-read-many,一次写,多次读 (c)数据冗余的设计方式:由Block备份的放置来维护。一个Block会由配置 的replication因子来决定备份数目,其默认为有三份备份,一份放在NameNode指定的DataNode,另一份放在与指定DataNode非同一Rack上的DataNode最后一份放在与指定DataNode同一Rack上的DataNode上 (d)容错能力:HDFS的容错能力大概可以分为两个方面:文件系统的容错性以及Hadoop本身的容错能力。 (2)MapReduce 最简单的 MapReduce 应用程序至少包含 3 个部分:一个 Map 函数、一个 Reduce 函数和一个 main 函数。main 函数将作业控制和文件输入/输出结合起来。在这点上,Hadoop 提供了大量的接口和抽象类,从而为 Hadoop 应用程序开发人员提供许多工具,可用于调试和性能度量等。   MapReduce 本身就是用于并行处理大数据集的软件框架。MapReduce 的根源是函数性编程中的 map 和 reduce 函数。它由两个可能包含有许多实例(许多 Map 和 Reduce)的操作组成。Map 函数接受一组数据并将其转换为一个键/值对列表,输入域中的每个元素对应一个键/值对。Reduce 函数接受 Map 函数生成的列表,然后根据它们的键(为每个键生成一个键/值对)缩小键/值对列表。 这里提供一个示例,帮助您理解它。假设输入域是 one small step for man, one giant leap for mankind。在这个域上运行 Map 函数将得出以下的键/值对列表:   (one, 1) (small, 1) (step, 1) (for, 1) (man, 1) (one, 1) (giant, 1) (leap, 1) (for, 1) (mankind, 1)   如果对这个键/值对列表应用 Reduce 函数,将得到以下一组键/值对:   (one, 2) (small, 1) (step, 1) (for, 2) (man, 1)   (giant, 1) (leap, 1) (mankind, 1)   结果是对输入域中的单词进行计数,这无疑对处理索引十分有用。但是,现在  设有两个输入域,第一个是 one small step for man,第二个是 one giant leap for mankind。您可以在每个域上执行 Map 函数和 Reduce 函数,然后将这两个键/值对列表应用到另一个 Reduce 函数,这时得到与前面一样的结果。换句话说,可以在输入域并行使用相同的操作,得到的结果是一样的,但速度更快。这便是 MapReduce 的威力;它的并行功能可在任意数量的系统上使用。 Hadoop 是如何实现这个功能的?一个代表客户机在单个主系统上启动的 MapReduce 应用程序称为 JobTracker。类似于 NameNode,它是 Hadoop 集群中惟一负责控制 MapReduce 应用程序的系统。在应用程序提交之后,将提供包含在 HDFS 中的输入和输出目录。JobTracker 使用文件块信息(物理量和位置)确定如何创建其他 TaskTracker 从属任务。MapReduce 应用程序被复制到每个出现输入文件块的节点。将为特定节点上的每个文件块创建一个惟一的从属任务。每个 TaskTracker 将状态和完成信息报告给 JobTracker。Hadoop 的这个特点非常重要,因为它并没有将存储移动到某个位置以供处理,而是将处理移动到存储。这通过根据集群中的节点数调节处理,因此支持高效的数据处理。

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 15 金币 [ 分享文档获得金币 ]
1 人已下载

下载文档

相关文档