您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据挖掘与识别 > 使用 Linux 和 Hadoop 进行分布式计算2
Hadoop文档汇编1使用Linux和Hadoop进行分布式计算.....................................................................................2Hadoop:输入,输出,key,value格式....................................................................................15HadoopOutputFormat浅析..........................................................................................................17HadoopInputFormat浅析............................................................................................................21Hadoop文档汇编2使用Linux和Hadoop进行分布式计算2011年11月03日星期四下午1:17Hadoop由ApacheSoftwareFoundation公司于2005年秋天作为Lucene的子项目Nutch的一部分正式引入。它受到最先由GoogleLab开发的MapReduce和GoogleFileSystem的启发。2006年3月份,MapReduce和NutchDistributedFileSystem(NDFS)分别被纳入称为Hadoop的项目中。Hadoop是最受欢迎的在Internet上对搜索关键字进行内容分类的工具,但它也可以解决许多要求极大伸缩性的问题。例如,如果您要grep一个10TB的巨型文件,会出现什么情况?在传统的系统上,这将需要很长的时间。但是Hadoop在设计时就考虑到这些问题,因此能大大提高效率。先决条件您可能已经想到,Hadoop运行在Linux生产平台上是非常理想的,因为它带有用Java™语言编写的框架。Hadoop上的应用程序也可以使用其他语言编写,比如C++。Hadoop是一个能够对大量数据进行分布式处理的软件框架。但是Hadoop是以一种可靠、高效、可伸缩的方式进行处理的。Hadoop是可靠的,因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。Hadoop是高效的,因为它以并行的方式工作,通过并行处理加快处理速度。Hadoop还是可伸缩的,能够处理PB级数据。此外,Hadoop依赖于社区服务器,因此它的成本比较低,任何人都可以使用。回页首Hadoop架构Hadoop有许多元素构成。最底部是HadoopDistributedFileSystem(HDFS),它存储Hadoop集群中所有存储节点上的文件。HDFS(对于本文)的上一层是MapReduce引擎,该引擎由JobTrackers和TaskTrackers组成。回页首HDFS对外部客户机而言,HDFS就像一个传统的分级文件系统。可以创建、删除、移动或重命名文件,等等。但是HDFS的架构是基于一组特定的节点构建的(参见图1),这是由它自身的特点决定的。这些节点包括NameNode(仅一个),它在HDFS内部提供元数据服务;DataNode,它为HDFS提供存储块。由于仅存在一个NameNode,因此这是HDFS的一个缺点(单点失败)。图1.Hadoop集群的简化视图Hadoop文档汇编3存储在HDFS中的文件被分成块,然后将这些块复制到多个计算机中(DataNode)。这与传统的RAID架构大不相同。块的大小(通常为64MB)和复制的块数量在创建文件时由客户机决定。NameNode可以控制所有文件操作。HDFS内部的所有通信都基于标准的TCP/IP协议。NameNodeNameNode是一个通常在HDFS实例中的单独机器上运行的软件。它负责管理文件系统名称空间和控制外部客户机的访问。NameNode决定是否将文件映射到DataNode上的复制块上。对于最常见的3个复制块,第一个复制块存储在同一机架的不同节点上,最后一个复制块存储在不同机架的某个节点上。注意,这里需要您了解集群架构。实际的I/O事务并没有经过NameNode,只有表示DataNode和块的文件映射的元数据经过NameNode。当外部客户机发送请求要求创建文件时,NameNode会以块标识和该块的第一个副本的DataNodeIP地址作为响应。这个NameNode还会通知其他将要接收该块的副本的DataNode。NameNode在一个称为FsImage的文件中存储所有关于文件系统名称空间的信息。这个文件和一个包含所有事务的记录文件(这里是EditLog)将存储在NameNode的本地文件系统上。FsImage和EditLog文件也需要复制副本,以防文件损坏或NameNode系统丢失。DataNodeNameNode也是一个通常在HDFS实例中的单独机器上运行的软件。Hadoop集群包含一个NameNode和大量DataNode。DataNode通常以机架的形式组织,机架通过一个交换机将所有系统连接起来。Hadoop的一个假设是:机架内部节点之间的传输速度快于机架间节点的传输速度。DataNode响应来自HDFS客户机的读写请求。它们还响应创建、删除和复制来自NameNode的块的命令。NameNode依赖来自每个DataNode的定期心跳(heartbeat)消息。每条消息都包含一个块报告,NameNode可以根据这个报告验证块映射和其他文件系统元数据。如果DataNode不能发送心跳消息,NameNode将采取修复措施,重新复制在该节点上丢失的块。文件操作可见,HDFS并不是一个万能的文件系统。它的主要目的是支持以流的形式访问写入的大型文件。如果客户机想将文件写到HDFS上,首先需要将该文件缓存到本地的临时存储。如果缓存的数据大于所需的HDFS块大小,创建文件的请求将发送给NameNode。NameNode将以DataNode标识和目标块响应客户机。同时也通Hadoop文档汇编4知将要保存文件块副本的DataNode。当客户机开始将临时文件发送给第一个DataNode时,将立即通过管道方式将块内容转发给副本DataNode。客户机也负责创建保存在相同HDFS名称空间中的校验和(checksum)文件。在最后的文件块发送之后,NameNode将文件创建提交到它的持久化元数据存储(在EditLog和FsImage文件)。Linux集群Hadoop框架可在单一的Linux平台上使用(开发和调试时),但是使用存放在机架上的商业服务器才能发挥它的力量。这些机架组成一个Hadoop集群。它通过集群拓扑知识决定如何在整个集群中分配作业和文件。Hadoop假定节点可能失败,因此采用本机方法处理单个计算机甚至所有机架的失败。回页首Hadoop应用程序Hadoop的最常见用法之一是Web搜索。虽然它不是惟一的软件框架应用程序,但作为一个并行数据处理引擎,它的表现非常突出。Hadoop最有趣的方面之一是MapandReduce流程,它受到Google开发的启发。这个流程称为创建索引,它将Web爬行器检索到的文本Web页面作为输入,并且将这些页面上的单词的频率报告作为结果。然后可以在整个Web搜索过程中使用这个结果从已定义的搜索参数中识别内容。MapReduce最简单的MapReduce应用程序至少包含3个部分:一个Map函数、一个Reduce函数和一个main函数。main函数将作业控制和文件输入/输出结合起来。在这点上,Hadoop提供了大量的接口和抽象类,从而为Hadoop应用程序开发人员提供许多工具,可用于调试和性能度量等。MapReduce本身就是用于并行处理大数据集的软件框架。MapReduce的根源是函数性编程中的map和reduce函数。它由两个可能包含有许多实例(许多Map和Reduce)的操作组成。Map函数接受一组数据并将其转换为一个键/值对列表,输入域中的每个元素对应一个键/值对。Reduce函数接受Map函数生成的列表,然后根据它们的键(为每个键生成一个键/值对)缩小键/值对列表。这里提供一个示例,帮助您理解它。假设输入域是onesmallstepforman,onegiantleapformankind。在这个域上运行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)结果是对输入域中的单词进行计数,这无疑对处理索引十分有用。但是,现在假Hadoop文档汇编5设有两个输入域,第一个是onesmallstepforman,第二个是onegiantleapformankind。您可以在每个域上执行Map函数和Reduce函数,然后将这两个键/值对列表应用到另一个Reduce函数,这时得到与前面一样的结果。换句话说,可以在输入域并行使用相同的操作,得到的结果是一样的,但速度更快。这便是MapReduce的威力;它的并行功能可在任意数量的系统上使用。图2以区段和迭代的形式演示这种思想。图2.MapReduce流程的概念流现在回到Hadoop上,它是如何实现这个功能的?一个代表客户机在单个主系统上启动的MapReduce应用程序称为JobTracker。类似于NameNode,它是Hadoop集群中惟一负责控制MapReduce应用程序的系统。在应用程序提交之后,将提供包含在HDFS中的输入和输出目录。JobTracker使用文件块信息(物理量和位置)确定如何创建其他TaskTracker从属任务。MapReduce应用程序被复制到每个出现输入文件块的节点。将为特定节点上的每个文件块创建一个惟一的从属任务。每个TaskTracker将状态和完成信息报告给JobTracker。图3显示一个示例集群中的工作分布。图3.显示处理和存储的物理分布的Hadoop集群Hadoop文档汇编6Hadoop的这个特点非常重要,因为它并没有将存储移动到某个位置以供处理,而是将处理移动到存储。这通过根据集群中的节点数调节处理,因此支持高效的数据处理。回页首Hadoop的其他应用程序Hadoop是一个用于开发分布式应用程序的多功能框架;从不同的角度看待问题是充分利用Hadoop的好方法。回顾一下图2,那个流程以阶梯函数的形式出现,其中一个组件使用另一个组件的结果。当然,它不是万能的开发工具,但如果碰到的问题属于这种情况,那么可以选择使用Hadoop。Hadoop一直帮助解决各种问题,包括超大型数据集的排序和大文件的搜索。它还是各种搜索引擎的核心,比如Amazon的A9和用于查找酒信息的AbleGrape垂直搜索引擎。HadoopWiki提供了一个包含大量应用程序和公司的列表,这些应用程序和公司通过各种方式使用Hadoop(参见参考资料)。当前,Yahoo!拥有最大的HadoopLinux生产架构,共由10,000多个内核组成,有超过5PB字节的储存分布到各个DataNode。在它们的Web索引内部差不多有一万亿个链接。不过您可能不需要那么大型的系统,如果是这样的话,您可以使用AmazonElasticComputeCloud(EC2)构建一个包含20个节点的虚拟集群。事实上,纽约时报使用Hadoop和EC2在36个小时内将4TB的TIFF图像—包括405K大TIFF图像,3.3MSGML文章和405KXML文件—转换为800K适合在Web上
本文标题:使用 Linux 和 Hadoop 进行分布式计算2
链接地址:https://www.777doc.com/doc-5931589 .html