如何从HDFS FileSystem执行hadoop jar?

时间:2013-12-02 16:33:20

标签: hadoop

我总是从本地文件系统执行作业,如下所示

hadoop jar /home/usr/jar/myjar.jar com.test.TestMain 

如何执行相同的命令,但myjar.jar将在hdfs中?

这样的东西
hadoop jar hdfs:///home/usr/jar/myjar.jar com.test.TestMain 

但当然这不起作用......

2 个答案:

答案 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类可以访问它。