我总是从本地文件系统执行作业,如下所示
hadoop jar /home/usr/jar/myjar.jar com.test.TestMain
如何执行相同的命令,但myjar.jar将在hdfs中?
像
这样的东西hadoop jar hdfs:///home/usr/jar/myjar.jar com.test.TestMain
但当然这不起作用......
答案 0 :(得分:5)
hadoop fs -copyToLocal hdfs:///home/usr/jar/myjar.jar /tmp/myjar.jar && hadoop jar /tmp/myjar.jar com.test.TestMain
答案 1 :(得分:1)
查看Hadoop的bin/hadoop
脚本,为了执行jar文件,它使用了这个条件 -
elif [ "$COMMAND" = "jar" ] ; then
CLASS=org.apache.hadoop.util.RunJar
这表示它使用RunJar
类来执行jar。
如果您看到RunJar类,则支持的参数是 -
RunJar jarFile [mainClass] args...
其中,使用RunJar类中的以下代码访问 jarFile -
int firstArg = 0;
String fileName = args[firstArg++];
File file = new File(fileName);
因此, fileName 指向 jarFile ,因此我视图中的 fileName 不能是上面所见的HDFS路径,除非你以某种方式能够将HDFS挂载到文件系统中,以便java File
类可以访问它。