如何让emr先执行customer jar

ljsrvy3e  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(258)

因为hadoop1.0.3不支持bzip2解压,所以我将相同的类从hadoop2.2复制到我的项目中,但是我的项目(或者我们称之为jar)仍然在hadoop1.0.3集群上运行。我发现hadoop仍然执行1.0.3中的类,即新类没有执行。如何配置以首先使用我自己的jar中的类。我知道我们可能会用到这样的东西:hadoop jar collect\u log.jar com.testcol-dmapreduce.task.classpath.user.precedence=true
但是现在我正在使用emr,所以我不知道如何在emr中设置优先级。谢谢!

crcmnpdw

crcmnpdw1#

emr从location/home/hadoop/lib引用hadoopjar您可以尝试使用引导脚本将新jar复制到此位置。
另一种选择是在启动emr时。使用ssh和密钥文件连接到主节点,并查看ps-ef | grep java。
它将显示当前hadoop进程及其jar顺序(类路径),稍后您可以在bootsraop脚本中进行更改,以根据新顺序更改类路径
编辑以添加示例引导脚本mybootstrap.sh


# !/bin/bash

hadoop fs -copyToLocal s3n://bucket/bootstrap/abc.jar /home/hadoop/lib/

将这个脚本上传到s3 bucket并将其分配给emr启动程序代码

RunJobFlowRequest request = new RunJobFlowRequest(.....
        ScriptBootstrapActionConfig bootstrapScriptConfig = newScriptBootstrapActionConfig();
        bootstrapScriptConfig.setPath(CONFIG_HADOOP_BOOTSTRAP_ACTION);

        BootstrapActionConfig bootstrapConfig = new BootstrapActionConfig();
        bootstrapConfig.setName("copy jar file");
        bootstrapConfig.setScriptBootstrapAction(bootstrapScriptConfig);
        request.withBootstrapActions(bootstrapConfig);

这里config\u hadoop\u bootstrap\u action将是引导文件的路径。

相关问题