YARN DistributedShell源码分析与修改(2)

输入参数为用户CLI的执行命令,例如:hadoop jar hadoop-yarn-applications-distributedshell-2.0.5-alpha.jar org.apache.hadoop.yarn.applications.distributedshell.Client -jar hadoop-yarn-applications-distributedshell-2.0.5-alpha.jar -shell_command '/bin/date' -num_containers 10,该命令提交的任务为:启动10个container,每个都执行date命令。

main方法将运行init方法,如果init方法返回true则运行run方法。

init方法解析用户提交的命令,解析用户命令中的参数值。

run方法将完成Client源码逻辑中描述的功能。

4.1.2 对Client源码的修改

在原有YARN DistributedShell的基础上做的修改如下:

在CLI为用户增加了container_files和container_archives两个参数

container_files指定用户要执行的jar包的依赖包,多个依赖包以逗号分隔

container_archives指定用户执行的jar包的缓存目录,多个目录以逗号分隔

删除num_containers参数

不允许用户设置container的个数,使用默认值1

对Client源码修改如下:

变量

增加变量用于保存container_files和container_archives两个参数的值

// 增加两个变量,保存container_files、container_archives的参数值↓↓↓↓↓↓↓ private String[] containerJarPaths = new String[0]; private String[] containerArchivePaths = new String[0]; // ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

Client构造方法

删除num_containers参数的初试��,增加container_files和container_archives两个参数

修改构造方法的ApplicationMaster类

// 删除num_containers项,不允许用户设置containers个数,containers个数默认为1 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ //opts.addOption("num_containers", true, "No. of containers on which the shell command needs to be executed"); // ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ // 添加container_files、container_archives的描述↓↓↓↓↓↓↓↓↓↓↓↓↓↓ this.opts.addOption("container_files", true,"The files that containers will run . Separated by comma"); this.opts.addOption("container_archives", true,"The archives that containers will unzip. Separated by comma"); // ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/cb101bc55df5e3fc8538c314a0022fe0.html