Hadoop 2.0 上深度学习的解决方案.docx_第1页
Hadoop 2.0 上深度学习的解决方案.docx_第2页
Hadoop 2.0 上深度学习的解决方案.docx_第3页
Hadoop 2.0 上深度学习的解决方案.docx_第4页
Hadoop 2.0 上深度学习的解决方案.docx_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Hadoop 2.0 上深度学习的解决方案伴随着数据的爆炸性增长和成千上万的机器集群,我们需要使算法可以适应在如此分布的环境下运行。在通用的分布式计算环境中运行机器学习算法具有一系列的挑战。本文探讨了如何在一个Hadoop集群中实现和部署深度学习。 波士顿的 数据科学团队正在利用尖端工具和算法来优化商业活动,且这些商业活动是基于对用户数据中的深刻透析。数据科学大量使用机器算法,可以帮助我们在数据中识别和利用模式。从互联网大规模数据中获取透析是一项具有挑战性的任务,因此,能大规模运行算法是一个至关重要的需求。伴随着数据的爆炸性增长和成千上万的机器集群,我们需要使算法可以适应在如此分布的环境下运行。在通用的分布式计算环境中运行机器学习算法具有一系列的挑战。这里,我们探讨一下如何在一个Hadoop集群中实现和部署深度学习(一个尖端机器学习框架)。对于算法是如何适应运行在一个分布式环境中,我们提供了具体的细节。我们也给出了算法在标准数据集上的运行结果。深度信任网络 深度信任网络(DeepBeliefNetworks,DBN)是在贪婪和无监督的条件下通过迭代和训练受限的玻耳兹曼机(BoltzmannMachines,RMB)而得到的图形模型。通过对如下可被观察的维度x和隐藏层hk之间相互连接的分布式进行建模,DBN被训练来提取训练数据的深层透析。表达式1:DBN分布式在下图中,输入层和隐藏层的关系是可以被观察到的。从高层次来看,第一层被作为RBM来训练,为原始输入x进行建模。输入的数据是个稀疏二进制维度,表明数据将会被分类,比如,一个二进制的数字图像。后续层把前面的层传递过来的数据(样本或activations)当作训练示例使用。层数可以通过经验来决定,以此来获得更好的模型性能,DBN支持任意多的层数。图1:DBN层次下面的代码片段表明了进入RBM的训练。在提供给RBM的输入数据中,有多个预定义的时间点。输入数据被分成小批量数据,为各个层计算weights、activations和deltas。在所有的层都被训练以后,深度网络的参数调整使用受监督的训练标准。受监督的训练标准,比如,可以作为一个分类问题来设计,允许使用深度网络来解决分类问题。更复杂的受监督的标准可以用来提供如情景解读之类的有趣的结果,比如解释图片里展示的东西是什么。基础构造 深度学习受到了广泛的关注,不仅仅是因为它可以得出比其他一些学习算法更优异的结果,也因为它可以在分布式设备上运行,允许处理大规模的数据集。深度网络可以在两个级别进行并行、层级别和数据级别6。对于层级别的并行,许多实现使用GPU数组来并行计算层级别activations和频繁同步它们。然而,这种方法不适合那种数据驻留在通过网络连接的多个机器的集群,因为有着较高的网络开销。对于数据层的并行,训练是在数据集上进行并行的,更适合分布式设备。Paypal的大部分数据存储在Hadoop集群上,因此能够运行那些集群上的算法是我们的首要任务。专用集群的维护和支持也是一个我们需要考虑的重要因素。然而,由于深度学习本质上是迭代的,像MapReduce这样的范式不适合运行这些算法。但是随着Hadoop2.0和基于YARN的资源管理的问世,我们可以编写迭代程序,同时可以精细地控制程序使用的资源。我们使用了IterativeReduce7,HadoopYARN里面的一个用户编写迭代算法的程序,我们可以将它部署在一个运行Hadoop2.4.1的Paypal集群中。方法 我们实现了Hinton的核心算法,在2中引用的。由于我们的需求是分散运行在多个机器的集群中的算法,我们在这样的环境下使用了他们的算法。对于在多个机器上分散这个算法,我们参照了Grazia所提出的指南6。下面是对我们的实现做的详细总结:1. Master节点初始化RBM的weights。 2. Master节点向Worker节点推送weights和splits。 3. Worker节点在一个数据集时间点训练一个RBM层,换句话说,在一个Worker节点完全通过所有的split后,向Master发送更新后的weights。 4. 在一个给定的时间点里,Master节点对来自所有Worker节点的weights求平均值。 5. 在预定义的时间集(我们的例子中是50)中,重复3-5步操作。 6. 第6步完成以后,有一个层就被训练了。后续的RBM层也重复这些步骤。 7. 当所有的层都被训练以后,深度网络就会通过使用错误反向广播机制准确地调整好。 下图描述了在运行深度学习算法时的一个单个数据集时间点(步骤3-5)。我们注意到,这个范式可以被利用来实现一个主机可迭代的机器学习算法。图2:用于训练的单个数据集时间点下面的代码片段表明了在训练单个机器的DBN中所涉及的步骤。数据集首先被拆分成多个批次,然后多个RBM层会被顺序地初始化和训练。在RBM都被训练以后,它们会通过一个准确调整的错误反向广播相位。我们使用了IterativeReduce7的实现很大程度是为了YARN管道。我们对实现做出了重大改革,可以将它利用到我们的深度学习算法实现。IterativeReduce的实现是为ClouderaHadoop分布式而编写,它被我们重置了平台,以此来适应标准的ApacheHadoop分布式。我们还重写了实现,以此来使用8中描述的标准编程模型。特别是,我们需要YARN客户端API在ResourceManager和客户端程序之间进行通信。我们也使用了AMRMClient和AMNMClient在ApplicationMaster、ResourceManager和NodeManager之间进行通信。我们首先使用YARNAPI提交应用程序到YARN资源管理器:在应用被提交以后,YARN资源管理器启动应用程序Master。如果必要的话,应用程序Master负责分配和释放Worker容器。程序Master使用AMRMClient来与资源管理器进行通信。应用程序Master使用NMClientAPI在容器(主节点传递过来的)中运行命令。一旦应用Master启动了它需要的Worker容器,它设置一个端口来和应用Master进行通信。对于我们深度学习实现来说,我们新增了一些方法,它们需要为原始的IterativeReduce接口提供参数初始化、逐层训练和精确调整信号。IterativeReduce使用ApacheAvroIPC来实现Master和Worker之间的通信。下面的代码片段表明了一系列涉及Master-Worker节点的分布式训练,Master向worker发送初始参数,然后Worker在部分数据上训练它的RBM。在Worker完成训练之后,它将结果发送至Master,Master将会综合这些结果。迭代完成以后,Master通过启动反向广播精确调整相位来完成流程。结果 我们评估了使用MNIST手写数字识别3来实现的深度学习的性能。数据集包含手工标记的0-9的数字。训练集由60000张图片组成,测试集包含了10000张图片。为了测量性能,DBN首先被预训练,然后在60000张照片中被精确调整,通过以上的步骤,DBN会在10000张测试图片上进行评估。在训练或者评估期间,没有对图片进行预处理。出错率是由为分类的图片总数与测试集中的图片总数的比率而得到。当在每个RBM使用500-500-2000的隐藏单元,同时使用十个节点的分布式设备的时候,我们能达到最佳的分类错误率1.66%。错误率可堪比原始算法的作者所报告的1.2%(使用500-500-2000的隐藏单元)2,和类似设置下的一些结果3。我们注意到原始实现是在单个机器上的,而我们的实现是在分布式机器上的。参数平均的这一步导致性能略微降低,然而将算法分布在多台机器上是利大于弊的。下面的表格总结出了在十个节点的集群上运行的每个层的隐藏单元数对应的错误率的变化。表1:MNIST性能评估深入思考 我们成功地部署了一个深度学习系统,我们相信它在解决一些机器学习问题过程中很有用处。此外,迭代降低抽象可以被利用来分布任何其它合适的机器学习算法,能够利用通用的Hadoop集群将会被证明非常有利于在大数据集上运行大型机器学习算法。我们注意到,我们的当前框架需要一些改进,主要围绕减少网络延迟和更先进的资源管理。另外,我们需要优化DBN框架,这样可以减少内部节点之间的通信。随着对集群资源的精确调整控制,HadoopYARN框架给我们提供了更多的灵活性。参考资料1 G. E. Hinton, S. Osindero, and Y. Teh. A fast learning algorithm for deep belief nets.Neural Computations, 18(7):15271554, 2006.2 G. E. Hinton and R. R. Salakhutdinov. Reducing the Dimensionality of Data with Neural Networks. Science, 313(5786):504507, 2006.3 Y. LeCun, C. Cortes, C. J.C. Burges. The MNIST database of handwritten digits.4 Deep Learning Tutorial. LISA lab, University of Montreal5 G. E. Hinton. A Practical Guide to Training Restricted Boltzmann Machines. Lecture Notes in Computer Science Volume 7700: 599-619, 2012.6 M. Grazia, I. Stoianov, M. Zorzi. Parallelization of Deep Networks. ESANN, 20127 IterativeReduce, /jpatanooga/KnittingBoar/wiki/IterativeReduce 8 Apache Hadoop YARN Enabling Next Generation Data Applications, /hortonworks/apache-hadoop-yarn-enabling-nex 原文链接: Deep Learning on Hadoop 2.0(翻译/周键 责编/钱曙光)An Architecture for Distributed High Performance Video Processing in the Cloud我要翻译一把quora了,再加点我的理解,我相信会是一个好答案,链接我都放到一起了,没插入到正文中,要求其实比较高了,我觉得我自己都差很远很远我尽量持续更新翻译质量以及自己理解1. Python/C+/R/Java - you will probably want to learn all of these languages at some point if you want a job in machine-learning. Pythons Numpy and Scipy libraries 2 are awesome because they have similar functionality to MATLAB, but can be easily integrated into a web service and also used in Hadoop (see below). C+ will be needed to speed code up. R 3 is great for statistics and plots, and Hadoop 4 is written in Java, so you may need to implement mappers and reducers in Java (although you could use a scripting language via Hadoop streaming 5)首先,你要熟悉这四种语言。Python因为开源的库比较多,可以看看Numpy和Scipy这两个库,这两个都可以很好的融入网站开发以及Hadoop。C+可以让你的代码跑的更快,R则是一个很好地统计工具。而你想很好地使用Hadoop你也必须懂得java,以及如何实现map reduce2. Probability and Statistics: A good portion of learning algorithms are based on this theory. Naive Bayes 6, Gaussian Mixture Models 7, Hidden Markov Models 8, to name a few. You need to have a firm understanding of Probability and Stats to understand these models. Go nuts and study measure theory 9. Use statistics as an model evaluation metric: confusion matrices, receiver-operator curves, p-values, etc.我推荐统计学习方法 李航写的,这算的上我mentor的mentor了。理解一些概率的理论,比如贝叶斯,SVM,CRF,HMM,决策树,AdaBoost,逻辑斯蒂回归,然后再稍微看看怎么做evaluation 比如P R F。也可以再看看假设检验的一些东西。3. Applied Math + Algorithms: For discriminate models like SVMs 10, you need to have a firm understanding of algorithm theory. Even though you will probably never need to implement an SVM from scratch, it helps to understand how the algorithm works. You will need to understand subjects like convex optimization 11, gradient decent 12, quadratic programming 13, lagrange 14, partial differential equations 15, etc. Get used to looking at summations 16.机器学习毕竟是需要极强极强数学基础的。我希望开始可以深入的了解一些算法的本质,SVM是个很好的下手点。可以从此入手,看看拉格朗日,凸优化都是些什么4. Distributed Computing: Most machine learning jobs require working with large data sets these days (see Data Science) 17. You cannot process this data on a single machine, you will have to distribute it across an entire cluster. Projects like Apache Hadoop 4 and cloud services like Amazons EC2 18 makes this very easy and cost-effective. Although Hadoop abstracts away a lot of the hard-core, distributed computing problems, you still need to have a firm understanding of map-reduce 22, distribute-file systems 19, etc. You will most likely want to check out Apache Mahout 20 and Apache Whirr 21.熟悉分布计算,机器学习当今必须是多台机器跑大数据,要不然没啥意义。请熟悉Hadoop,这对找工作有很大很大的意义。百度等公司都需要hadoop基础。5. Expertise in Unix Tools: Unless you are very fortunate, you are going to need to modify the format of your data sets so they can be loaded into R,Hadoop,HBase 23,etc. You can use a scripting language like python (using re) to do this but the best approach is probably just master all of the awesome unix tools that were designed for this: cat 24, grep 25, find 26, awk 27, sed 28, sort 29, cut 30, tr 31, and many more. Since all of the processing will most likely be on linux-based machine (Hadoop doesnt run on Window I believe), you will have access to these tools. You should learn to love them and use them as much as possible. They certainly have made my life a lot easier. A great example can be found here 1.熟悉Unix的Tool以及命令。百度等公司都是依靠Linux工作的,可能现在依靠Windows的Service公司已经比较少了。所以怎么也要熟悉Unix操作系统的这些指令吧。我记得有个百度的面试题就是问文件复制的事情。本文来自: 人大经济论坛 Hadoop与大数据论坛 版,详细出处参考: /forum.php?mod=viewthread&tid=3394069&page=1经过大数据的收集和整理后,就可以选用适当的大数据分析算法进行处理了,目前大数据主要的处理模式可以分为流处理和批处理两种,其中批处理是先存储后处理,而流处理则是直接处理。流处理一般使用的大数据技术是基于hadoop的hbase和spark,其处理过程需要解决数据快速的插入和查询操作,并使用相应的算法进行及时的快速处理,这部分内容比较复杂,在当前的大数据应用也不是很广泛,将在后续的内容中介绍,此处仅介绍批处理的方式,也是大数据技术发展得较为完善的内容,也给大数据的商业应用带来了真实的商业价值。基于hadoop的批处理过程,一般做法是先把清洗好的数据存放到hdfs上,然后根据数据和应用选择或者编写相应的大数据分析算法进行分析。这些大数据分析算法有两种办法获取:最常用的获取途径是直接使用hadoop框架的mahout软件,该软件实现了数据挖掘的分类、聚类和主题推荐等常用的大数据分布式挖掘算法。其中分类算法主要包括朴素贝叶斯算法(new bayes)、随机森林算法、logstic算法(SGD)和隐马尔科夫模型(HMM)等算法; 聚类算法主要包括K-means(通用的大数据聚类算法)、Canopy(经常用来推断k-means类中的k值)、模糊K-means聚类和狄利克雷聚类等算法;主题推荐算法主要包括基于物品的协同过滤算法和ALS-WR并行算法等推荐算法。不同的大数据分布式挖掘算法有不同的适用范围,其具体细节也是大数据分析师必须掌握的,这些内容在人大经济论坛的大数据分析师课程中将以案例的形式进行介绍,也是整个课程内容的重点,而学习这些和使用SPSS统计软件进行数据分析一样容易,不需要太多的编程知识。还有一种办法是由大数据分析师开发的基于hadoop框架的mapreduce大数据分析算法。由于不同的行业应用,其业务逻辑会存在差异,这就需要编写相应的大数据分析算法来解决,当然这需要一定的编程经验。为了使大数据更为方便地推广,hadoop在设计mapreduce编程模式时,特意为基于mapreduce程序设计过程编写了一套通用的模型,就象印制某种图案的模器那样,只需要往里面填入需要的内容,就可以实现mapreduce大数据算法开发,极大地降低了大数据开发的门槛,也使得hadoop受到广大的大数据分析人员的欢迎,这也是hadoop能在全球范围内迅速扩展的原因之一。一般来讲,编写mapreduce大数据分析算法都是在数据整理的过程中需要,而得出最终的大数据分析结果,一般使用常用的mahout大数据分析算法来解决就可以了,因此作为一个优秀的大数据分析师,应把学习的重点放在业务逻辑的关注上,其次就是对mahout大数据分析算法的掌握,最后才是基于mapreudce编程思想的大数据分析算法设计,这个是也人大经济论坛大数据分析课程培训的主要思路。Hadoop上面可以跑一些分布式的图像识别、图像比对等算法,比如PCA,或者投影相关的算法。可以实现根据相似性、特征点来进行图像比对,或者是图像识别。用hadoop的高性能,来处理相关的视频文件,把视频文件处理成图片文件,在经过图像算法来找出东西,存入hbase中基于Hadoop的图像检索算法研究与实现 2013基于Map-Reduce的大数据实体识别算法 2013基于Hadoop平台的随机森林算法研究及图像分类系统实现 2014Hadoop海量视频、图像分析分布式处理总结 分类: hadoop 一些转载备份 2013-12-07 16:04 871人阅读 评论(0) 收藏 举报 hadoop分布式计算分布式视频图像处理目录(?)+1. 1 图片合并并存储2. 2 自定义文件切割算法3. 3 图像格式转换4. 4 JavaCV开发框架原文链接在刚刚入手视频图像分析时,有点不知所措,后来经过查找了很多资料。本篇文章主要叙述图像的分析处理,至于视频,实际上视频本身就是一个大文件,hadoop对于大文件处理是高效的,所以在MapReduce的处理上需要使用ffmepg将视频切割为图像后再将图像转换为javacv可识别的流数据即可。在其他的环节处理视频和图像总体来说都是一样的。有关图像分析的处理总结如下:1、视频与图像文件在HDFS的存储,若文件较小需要做合并处理,或采用HBASE存储图像,mapreduce通过HBase生成的HFile进行分布式处理。2、自定义实现Hadoop文件合并及文件切割的FileInputFormat的实现。3、实现图像切割后的图像比特流转换为Javacv能够识别的图像对象。4、提供opencv支持的图像分析开发环境与算法。使用技术框架说明HDFS图像存储在HDFS中MapReduceMapreduce实现分布式处理或使用MapReduce操作HBase数据库HBase部分图片可存放在HBASE中或将计算结果存放于HBase、HIVE、MYSQL中Hipi用于合并小的图像文件,及切割算法。JavaCV封装了OpenCV、libdc1394、OpenKinect、videoInput和ARToolKitPlus等计算机视觉编程人员常用库的接口1.1 图片合并并存储方案1:视频与图像文件需要存储在HDFS文件系统上,由于Hadoop的分布式计算只适合处理大文件数据,故需要将来源的图像进行合并处理,并存储到HDFS上再进行MapReduce处理。 使用Hipi框架实现图像的合并处理,生成HIB文件。方案2(待研究):将图像直接存入HBase中,MapReduce直接操纵HBase的数据进行处理。1.2 自定义文件切割算法Hadoop在分布式计算时默认为TextInputFormat文本式的切割算法做MapReduce的默认运算,HIB文件需要对其进行文件切割后放入MapReduce做运算。1.3 图像格式转换HIB文件切割后的图像格式需要转换为JavaCV可处理的流式数据,保证JavaCV能够顺利的处理各类的图像算法,如:直方图、二值化等。1.4 JavaCV开发框架由于Hadoop是用Java语言编写的,所以在处理方面使用Java有先天的优势,而JavaCV又封装了OpenCV、libdc1394、OpenKinect、videoInput和ARToolKitPlus等计算机视觉编程人员常用库的接口。所以需要搭建一套JavaCV的开发框架,以便于后续开发图像分析的各种业务场景。参考文献:HIPI (hadoop image processing interface)/1/post/2012/10/abouthipihadoopimageprocessinginterface.html来看一下这一篇文章吧(合并小文件),这个国外一个牛人团队开发的Hipi框架,主要是功能是将给定的一个URL列表下载并合并为作者自己定义的HIB文件,MapReudce程序分解该文件并实现分布式处理。但HIPI只为我们提供了JAVA方式的图像处理。使用JavaCV处理人脸识别、二值化、灰度等图像处理算法的例子。/p/hadoop-computer-vision/source/checkout笔者最终将其两者合二为一了,待整理后附上链接。MapReduce 是一个高性能的批处理分布式计算框架,用于对海量数据进行并行分析和处理。与传统数据仓库和分析技术相比,MapReduce 适合处理各种类型的数据,包括结构化、半结构化和非结构化数据。数据量在 TB 和 PB 级别,在这个量级上,传统方法通常已经无法处理数据。MapReduce 将分析任务分为大量的并行 Map 任务和 Reduce 汇总任务两类。Map 任务运行在多个服务器上。目前部署的最大集群有 4000 个服务器。MapReduce 适合处理的任务复杂的数据:业务数据不能适合行列的数据库结构。数据可能来源于多种格式:多媒体数据、图像数据、文本数据、实时数据、传感器数据等等。当有新的数据来源时,可能会有新的数据格式的出现。MapReduce 可以存放和分析各种原始数据格式。超大规模数据:很多公司仅仅应为数据存放成本过高就放弃了很多有价值的数据。新的数据来源使得问题更为严重,新的系统和用户带来比以往更多的数据。Hadoop的创新构架使用低成本的常规服务器储存和处理海量的数据。新的分析手段:海量复杂数据分析需要使用新的方法。新的算法包括自然语言分析、模式识别等。只有 Hadoop 的构架才能方便高效地使用新的算法来处理和分析海量数据。MapReduce 框架的核心优势:1. 高度可扩展,可动态增加/削减计算节点,真正实现弹性计算。2. 高容错能力,支持任务自动迁移、重试和预测执行,不受计算节点故障影响。3. 公平调度算法,支持优先级和任务抢占,兼顾长/短任务,有效支持交互式任务。4. 就近调度算法, 调度任务到最近的数据节点,有效降低网络带宽。5. 动态灵活的资源分配和调度,达到资源利用最大化,计算节点不会出现闲置和过载的情况;同时支持资源配额管理。6. 经过大量实际生产环境使用和验证,最大集群规模在 4000 个计算节点。原文出自【比特网】,转载请保留原文链接:/446/12429446.shtmlHadoop作业提交多种方案具体流程详解 前言: 提交hadoop作业时我们遇到了许多的问题,在网上也查过许多的文章,有许多对hadoop提交作业原理进行分析的文章,却总看不到对具体操作过程讲解的文章,导致我们在eclipse提交的作业总是在eclipse虚拟的云环境中运行。慢慢摸索中,一个一个的作业提交方法被我们发现,呵呵,现在总结一下吧。方案: 1、用命令行方式提交2、在eclipse中提交作业3、采用eclipse的插件实现项目的提交方案一:用命令行方式提交 前提:成功搭建一个hadoop集群,或成功部署一个伪分布式,并启动hadoop。提交过程:1、在eclipse中将我们的项目打成一个jar包,放到hadoop的安装目录下。2、在命令行中提交作业,这里以hadoop自带的wordcount程序为例:(1)将统计文件传到hdfs,如图(1) (2)向云提交作业,如图(2) 提交作业时,如果遇到错误:Name node in safe mode,可采用下面的解决方法,如图(3) (3)列出hdfs上输出文件夹下的文件,如图(4) (4)在命令行中打印统计好的结果,如图(5) (注:在命令行中提交作业是按hadoop/conf下的配置文件提交的)方案二:在eclipse中提交作业 前提:1、在你的电脑上安装好eclipse,可以在linux下,也可以在windows环境下哦,这里需要指出的是:提交作业的机器只要有hadoop的API就可以了,和提交作业的机器所处的环境无关。2、成功搭建一个hadoop集群,或成功部署一个伪分布式,并启动hadoop。提交过程:1、在eclipse下建立一个mapreduce项目,导入hadoop的API(hadoop/lib下的包)。这里直接从外部导入hadoop中自带的wordcount程序。为了可以直接“Run java Aplication”我修改了一点wordcount的代码,使其输入输出文件的地址直接在代码中设置。贴出代码如下: wordcount.java:Java代码 1. packageorg.apache.hadoop.examples; 2. 3. importjava.io.IOException; 4. importjava.util.StringTokenizer; 5. importorg.apache.hadoop.conf.Configuration; 6. importorg.apache.hadoop.fs.Path; 7. importorg.apache.hadoop.io.IntWritable; 8. importorg.apache.hadoop.io.Text; 9. importorg.apache.hadoop.mapreduce.Job; 10. importorg.apache.hadoop.mapreduce.Mapper; 11. importorg.apache.hadoop.mapreduce.Reducer; 12. importorg.apache.hadoop.mapreduce.lib.input.FileInputFormat; 13. importorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat; 14. 15. publicclassWordCount 16. /mapper类 17. publicstaticclassTokenizerMapper 18. extendsMapper 19. 20. privatefinalstaticIntWritableone=newIntWritable(1); 21. privateTextword=newText(); 22. 23. publicvoidmap(Objectkey,Textvalue,Contextcontext 24. )throwsIOException,InterruptedException 25. StringTokenizeritr=newStringTokenizer(value.toString(); 26. while(itr.hasMoreTokens() 27. word.set(itr.nextToken(); 28. context.write(word,one); 29. 30. 31. 32. 33. /reducer类 34. publicstaticclassIntSumReducer 35. extendsReducer 36. privateIntWritableresult=newIntWritable(); 37. 38. publicvoidreduce(Textkey,Iterablevalues, 39. Contextcontext 40. )throwsIOException,InterruptedException 41. intsum=0; 42. for(IntWritableval:values) 43. sum+=val.get(); 44. 45. result.set(sum); 46. context.write(key,result); 47. 48. 49. publicstaticvoidmain(Stringargs)throwsException 50. Configurationconf=newConfiguration(); 51. 52. Jobjob=newJob(conf,wordcount); 53. job.setJarByClass(WordCount.class); 54. job.setMapperClass(TokenizerMapper.class); 55. job.setCombinerClass(IntSumReducer.class); 56. job.setReducerClass(IntSumReducer.class); 57. job.setOutputKeyClass(Text.class); 58. job.setOutputValueClass(IntWritable.class); 59. FileInputFormat.addInputPath(job,newPath(/home/hadoop/testin); 60. FileOutputFormat.setOutputPath(job,newPath(/home/hadoop/testout); 61. 62. System.exit(job.waitForCompletion(true)?0:1); 63. 64. 65. 66. package org.apache.hadoop.examples;import java.io.IOException;import java.util.StringTokenizer;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Job;import org.apache.hadoop.mapreduce.Mapper;import org.apache.hadoop.mapreduce.Reducer;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;public class WordCount /mapper类 public static class TokenizerMapper extends Mapper private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(Object key, Text value, Context context ) throws IOException, InterruptedException StringTokenizer itr = new StringTokenizer(value.toString(); while (itr.hasMoreTokens() word.set(itr.nextToken(); context.write(word, one); /reducer类 public static class IntSumReducer extends Reducer private IntWritable result = new IntWritable(); public void reduce(Text key, Iterable values, Context context ) throws IOException, InterruptedException int sum = 0; for (IntWritable val : values) sum += val.get(); result.set(sum); context.write(key, result); public static void main(String args) throws Exception Configuration conf = new Configuration(); Job job = new Job(conf, word count); job.setJarByClass(WordCount.class); job.setMapperClass(TokenizerMapper.class); job.setCo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论