因为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中设置优先级。
非常感谢!
答案 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将是您的引导程序文件的路径。