大讲台谈MapReduce常见的问题及解决方案.docVIP

  • 9
  • 0
  • 约2.02千字
  • 约 4页
  • 2017-05-05 发布于上海
  • 举报

大讲台谈MapReduce常见的问题及解决方案.doc

大讲台谈MapReduce常见的问题及解决方案

大讲台谈MapReduce常见的问题及解决方案 本文中所涉及到的问题均来自大讲台Hadoop学员的提问,下面是具体问题描述及解决方案。希望对正在学hadoop的人有所帮助。 问题1:MapReduce和Yarn是什么关系? 问题描述:课件中说Hadoop框架的核心是HDFS和MapReduce,这课程主要讲的2.2版本,2版本中不是用Yarn了吗。 我看书上和网上有些人说Yarn是MapReduce二代,改进了MapReduce一代的一些弊端。 但我看Hadoop2.2中有MapReduce也有Yarn模块,那么MapReduce和Yarn到底是什么关系? 解决方案:这问题很好,我比较认同《Hadoop技术内幕》作者董西成的看法。 首先,YARN并不是下一代 MapReduce(MRv2),下一代MapReduce与第一代MapReduce(MRv1)在编程接口、数据处理引擎(MapTask和 ReduceTask)是完全一样的, 可认为MRv2重用了MRv1的这些模块,不同的是资源管理和作业管理系统,MRv1中资源管理和作业管理均是由JobTracker实现的,集两个功能 于一身,而在MRv2中,将这两部分分开了, 其中,作业管理由ApplicationMaster实现,而资源管理由新增系统YARN完成。 另 外,由于YARN具有通用性,因此YARN也可以作为其他计算框架的资源管理系统,不仅限于MapReduce,也是其他计算框架,比如Spark、 Storm等, 通常而言,我们一般将运行在YARN上的计算框架称为“X on YARN”,比如“MapReduce On YARN”, Spark On YARN,“Storm On YARN”等。 不知这种解释这位同学是否理解,如有异议,欢迎探讨 问题2:运行MapReduce程序,用到第三方jar包该怎么办? 问题描述:我写了一个hadoop 程序,用到了第三方jar包,我明明引用到项目里面了,放到集群上面运行,怎么总提示报错?说找不到相关的类!!! 解决方案:要想让mapreduce程序引用第三方jar文件, 可以采用如下方式: 1.通过命令行参数传递jar文件, 如-libjars等; 2.直接在conf中设置, 如conf.set(“tmpjars”,*.jar), jar文件用逗号隔开; 3.利用分布式缓存, 如DistributedCache.addArchiveToClassPath(path, job), 此处的path必须是hdfs, 即自己讲jar上传到hdfs上, 然后将路径加入到分布式缓存中; 4.第三方jar文件和自己的程序打包到一个jar文件中, 程序通过job.getJar()将获得整个文件并将其传至hdfs上. (很笨重) 5.在每台机器的$HADOOP_HOME/lib目录中加入jar文件. (不推荐)p.s. 如果通过上面方法1.或2., 需要注意Configuration问题, 需要通过getConf()函数获得, 而不要自己new一个对象. 问题3:mapreduce不能debug是什么情况? 问题描述:mapreduce不能debug是什么情况?本地程序无法调试?解决方案:首先肯定告诉你,MapReduce可以debug调试程序。 MapReduce进入Debug 运行模式需要以下几步: 第一步:选定一台调试机器,修改 mapred-site.xml 文件,添加如下配置。 lt;propertygt; lt;namegt;mapred.child.java.optslt;/namegt; lt;valuegt;- agentlib:jdwp=transport=dt_socket,address=8883,server=y,suspend=ylt;/valuegt; lt;/propertygt; 第二步:关闭所有的TaskTracker,只保留上面配置的一台需要调试的 TaskTracker。 第三步:启动MapReduce Job。 第四步:右键 Hadoop 项目,选择“Debug As”——gt;“Debug Configuration”——gt;“Remote Java Application”,添加一个新的测试,输入远程 Host IP和监听端口,端口为8883,然后单击Apply。 第五步:调试运行

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档