所有
我正在打包我的自定义jar及其所有依赖项,其中一个与EMR实例上的另一个jar冲突,所以我想添加一个步骤将我的类路径设置为包含我的自定义jar的目录,但为此我需要知道jar会驻留在各个节点上的位置,以及是否有任何可用于进行这些更改的env变量,如果有人知道更好的方法来解决根问题而不是构建相同版本的jar在EMR上,因为这是不可能的,也是受欢迎的输入。
谢谢,
答案 0 :(得分:1)
您可以查看'controller'日志文件以查看jar文件的复制位置 - 并运行hadoop streaming jar命令。
自定义jar被复制到/ mnt / var / hadoop下的某个文件夹(特定于该步骤)。这个jar文件与另一个jar冲突的唯一方法是 - 如果它在hadoop / lib下 - 和'hadoop jar'的类路径的一部分。
一种解决方案是使用script-runner步骤来运行jar文件而不是'custom jar'。在这里,您可以覆盖类路径 - 设置任何相关的环境变量。
http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-hadoop-script.html
这个脚本甚至可以使用'hadoop jar'命令运行你的客户jar - 实质上几乎相当于直接运行自定义jar。