如何让EMR先执行客户jar

时间:2014-08-06 23:29:41

标签: hadoop compression emr bzip2

因为hadoop 1.0.3不支持bzip2解压缩,所以我将hadoop 2.2中的相同类复制到我的项目中,但是我的项目(或者我们称之为jar)仍然在hadoop 1.0.3集群上运行。我发现hadoop仍然执行1.0.3中的类,即新类没有执行。 如何配置首先使用自己的jar中的类。 我知道我们可以使用类似的东西:  hadoop jar collect_log.jar com.TestCol -Dmapreduce.task.classpath.user.precedence = true
但是现在我正在使用EMR,所以我不知道如何在EMR中设置优先级。 非常感谢!

1 个答案:

答案 0 :(得分:2)

EMR从位置/ home / hadoop / lib中裁剪其hadoop罐子 您可以尝试使用引导脚本将新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存储桶并将其作为

分配给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_HADOOP_BOOTSTRAP_ACTION将是您的引导程序文件的路径。