温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

0588-6.1.0-命令行动态指定MapReduce运行参数无效的问题分析

发布时间:2021-11-11 16:58:40 来源:亿速云 阅读:153 作者:柒染 栏目:大数据

这期内容当中小编将会给大家带来有关0588-6.1.0-命令行动态指定MapReduce运行参数无效的问题分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

1

文档编写目的

在本地完成MapReduce程序的开发后,打包提交到服务器上,然后在命令行使用hadoop jar命令运行,并在运行时动态的指定参数(如:Map和Reduce的内、资源池等参数)。通过在命令行添加“-D mapreduce.job.queuename=资源池名”的方式来指定。本篇文章Fayson主要讲述动态指定MapReduce作业参数无效问题分析。

2

问题描述

Cloudera Manager上资源池放置规则如下:放置规则第一条指定的池不存在时,则自动创建。

0588-6.1.0-命令行动态指定MapReduce运行参数无效的问题分析

在命令行执行如下命令,指定作业到root.test资源池下:

hadoop jar xxx.jar -D mapreduce.job.queuename=root.test

0588-6.1.0-命令行动态指定MapReduce运行参数无效的问题分析

通过上图可以看到,MapReduce作业并未运行在指定的资源池。

3

问题分析

在同一用户下,执行了Hadoop自带的jar,使用同样的方式动态指定资源池,发现任务跑在了指定的资源池下

0588-6.1.0-命令行动态指定MapReduce运行参数无效的问题分析

经上述测试推测可能是自己开发的MapReduce代码的问题,通过对比Hadoop自带的示例代码发现,Hadoop的示例代码中继承了Configured类并实现了Tool接口。而自己写的MapReduce代码如下未继承和实现Hadoop的类。

0588-6.1.0-命令行动态指定MapReduce运行参数无效的问题分析

4

问题解决

在MapReduce代码中添加Configured类的继承并实现了Tool接口。修改后的代码如下:

0588-6.1.0-命令行动态指定MapReduce运行参数无效的问题分析

修改启动类后,再将程序重新打包,运行时指定参数如下:

0588-6.1.0-命令行动态指定MapReduce运行参数无效的问题分析

发现任务成功运行在指定的资源池下:

0588-6.1.0-命令行动态指定MapReduce运行参数无效的问题分析

关于ToolRunner接口的说明:

为什么实现Tool后,动态参数就能生效呢?说到Tool,就不得不提到一个类GenericOptionsParser。该类是Hadoop框架中解析命令行参数的基本类。它能够解析命令行参数,让程序运行时能够动态的指定一些资源上的配置。在上面的代码中可以看到,在main方法中调用了ToolRunner类的run方法。ToolRunner类中的run方法内使用了GenericOptionsParser类来解析命令行参数,最终ToolRunner类的run方法里调用的还是MrDriver类中重写的run方法。见下图源码:

0588-6.1.0-命令行动态指定MapReduce运行参数无效的问题分析

0588-6.1.0-命令行动态指定MapReduce运行参数无效的问题分析

ToolRunner.run方法的参数中看到,传入的tool参数就是我们自己编写的MrDriver类,所以ToolRunner类最终调用了我们自己重写的run方法,并且通过GenericOptionsParser解析命令行参数后将解析的参数Set到Configuration对象中,最终调用MrDriver.run方法实现作业运行参数的动态指定。

5

总结

1.在写MapReduce程序时,应继承Configured类并实现Tool接口,这样在运行jar包时可以动态的指定参数,比在代码中硬编码要灵活很多。

2.当有的参数需要修改时,也不用重新对代码进行打包、编译、部署等操作。

3.不单是资源池相关参数的指定,实现Tool后,配置文件中的其他参数也可以在命令行动态的指定,但一定要注意配置参数不能写错否则不生效。

上述就是小编为大家分享的0588-6.1.0-命令行动态指定MapReduce运行参数无效的问题分析了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI