输入参数为用户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"); // ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑