hadoop mapreduce开发最佳实践

hadoop mapreduce开发最佳实践

ID:18683114

大小:130.82 KB

页数:7页

时间:2018-09-20

hadoop mapreduce开发最佳实践_第1页
hadoop mapreduce开发最佳实践_第2页
hadoop mapreduce开发最佳实践_第3页
hadoop mapreduce开发最佳实践_第4页
hadoop mapreduce开发最佳实践_第5页
资源描述:

《hadoop mapreduce开发最佳实践》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、前言本文是Hadoop最佳实践系列第二篇,上一篇为《Hadoop管理员的十个最佳实践》。MapRuduce开发对于大多数程序员都会觉得略显复杂,运行一个WordCount(Hadoop中helloword程序)不仅要熟悉MapRuduce模型,还要了解Linux命令(尽管有Cygwin,但在Windows下运行MapRuduce仍然很麻烦),此外还要学习程序的打包、部署、提交job、调试等技能,这足以让很多学习者望而退步。所以如何提高MapReduce开发效率便成了大家很关注的问题。但Hadoop的Committer早已经考虑到这些问题,从而开发了T

2、oolRunner、MRunit(MapReduce最佳实践第二篇中会介绍)、MiniMRCluster、MiniDFSCluster等辅助工具,帮助解决开发、部署等问题。举一个自己亲身的例子:某周一和搭档(结对编程)决定重构一个完成近10项统计工作的MapRuduce程序,这个MapReduce(从Spring项目移植过来的),因为依赖Spring框架(原生Spring,非SpringHadoop框架),导致性能难以忍受,我们决定将Spring从程序中剔除。重构之前程序运行是正确的,所以我们要保障重构后运行结果与重构前一致。搭档说,为什么我们不用T

3、DD来完成这个事情呢?于是我们研究并应用了MRunit,令人意想不到的是,重构工作只用了一天就完成,剩下一天我们进行用findbug扫描了代码,进行了集成测试。这次重构工作我们没有给程序带来任何错误,不但如此我们还拥有了可靠的测试和更加稳固的代码。这件事情让我们很爽的同时,也在思考关于MapReduce开发效率的问题,要知道这次重构我们之前评估的时间是一周,我把这个事情分享到EasyHadoop群里,大家很有兴趣,一个朋友问到,你们的评估太不准确了,为什么开始不评估2天完成呢?我说如果我们没有使用MRUnit,真的是需要一周才能完成。因为有它单元测试

4、,我可以在5秒内得到我本次修改的反馈,否则至少需要10分钟(编译、打包、部署、提交MapReduce、人工验证结果正确性),而且重构是个反复修改,反复运行,得到反馈,再修改、再运行、再反馈的过程,MRunit在这里帮了大忙。相同智商、相同工作经验的开发人员,借助有效的工具和方法,竟然可以带来如此大的开发效率差距,不得不让人惊诧!PS.本文基于Hadoop1.0(ClouderaCDH3uX)。本文适合读者:Hadoop初级、中级开发者。1.使用ToolRunner让参数传递更简单关于MapReduce运行和参数配置,你是否有下面的烦恼:1.将MapR

5、educeJob配置参数写到java代码里,一旦变更意味着修改java文件源码、编译、打包、部署一连串事情。2.当MapReduce依赖配置文件的时候,你需要手工编写java代码使用DistributedCache将其上传到HDFS中,以便map和reduce函数可以读取。3.当你的map或reduce函数依赖第三方jar文件时,你在命令行中使用”-libjars”参数指定依赖jar包时,但根本没生效。其实,Hadoop有个ToolRunner类,它是个好东西,简单好用。无论在《Hadoop权威指南》还是Hadoop项目源码自带的example,都推

6、荐使用ToolRunner。下面我们看下src/example目录下WordCount.java文件,它的代码结构是这样的:publicclassWordCount{//略...publicstaticvoidmain(String[]args)throwsException{yearsmortgagehousing;4.mortgageregistrationformalitiesarecompleted.(D)pledge1.borrower(includingthepledgor)between18-65yearsofage,withfullc

7、ivilcapacity;2.collateralConfigurationconf=newConfiguration();String[]otherArgs=newGenericOptionsParser(conf,args).getRemainingArgs();//略...Jobjob=newJob(conf,"wordcount");//略...System.exit(job.waitForCompletion(true)?0:1);}}WordCount.java中使用到了GenericOptionsParser这个类,它的作用是将命令行中

8、参数自动设置到变量conf中。举个例子,比如我希望通过命令行设置reducetask数量,就这么写:bin/

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。