java在 AMI 4.x 上运行 EMR 作业之前,如何从/usr/lib/hadoop/lib 中删除文件
我有一个 Hadoop 作业,它使用 1.5 版的 commons-codec 库。为了让这个作业在 EMR AMI 3.x 上运行,我必须创建一个引导操作,从集群中删除所有早期版本的 jar,以防止它们被加载。这些是该脚本的相关行:
sudo find / -name "commons-codec-1.2.jar" -exec rm -rf {} \;
sudo find / -name "commons-codec-1.3.jar" -exec rm -rf {} \;
sudo find / -name "commons-codec-1.4.jar" -exec rm -rf {} \;
这有效。
但我现在正在升级到 AMI 4.x,但我遇到了一个问题:二进制不兼容的较早版本的 commons-codec jar 在引导脚本运行后 出现在从属节点的文件系统上。
在引导脚本运行时,目录 /usr/lib/hadoop/lib
不存在。但是当我开始工作的第一步时,该目录确实存在并且包含文件 /usr/lib/hadoop/lib/commons-codec-1.4.jar
。此文件导致 VerifyError
,因为加载的是它而不是我捆绑在 jar 中的较新版本的 commons-codec。
有没有办法在我的工作开始之前删除不兼容的 jar?或者,我可以做些什么来确保加载正确的 commons-codec 版本(我已经捆绑在我的 jar 中)?
请您参考如下方法:
你是对的!从 emr-4.x.x AMI 版本开始,EMR 应用程序(Hadoop、Spark 等)在运行 Bootstrap Actions 后安装。
要解决您的问题,您可以运行旧的 BA 作为第一步,如下所示:
yarn node -list|sed -n "s/^\(ip[^:]*\):.*/\1/p"| xargs -t -I{} -P10 ssh -o StrictHostKeyChecking=no -i ~/MyKeyName.pem hadoop@{} "sudo find/-name "commons-codec-1.2.jar"-exec rm -rf {}\; "
将更改传播到所有从站 - Reference
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。