hadoop jar命令指向本地文件系统
我有一个有效的jar,它在另一个运行相同版本hadoop的系统上完美运行,即hadoop-1.2.1,具有相同的设置 我能够将jar文件放在hdfs文件系统中,并创建输入、输出目录 但是当我使用命令“hadoop jar HelloWorld.jar classnamemain method input output”时,它抛出“Invalid jar”错误。在搜索了很长一段时间可能的解决方案之后,我发现该命令是在本地文件系统中搜索jar,而不是在hdfs中搜索 甚至我也尝试将scheme添加到命令中,如下所示: hadoop jarhdfs://HelloWorld.jar classnamemain方法输入输出 有什么可能的解决办法 注意:当我的PWD为/home/user/hadoop-1.2.1时,我可以使用“hadoop-jar”运行hadoop-examples-1.2.jar,它位于我的本地文件系统中hadoop-jar只运行您可以本地访问的jar文件1。出于好奇,以下是在hadoop jar命令中查找jar的相关源代码 1对于我遇到的每一个Hadoop版本来说都是如此。您的结果可能会有所不同。hadoop jar只运行您可以在本地访问的jar文件1。出于好奇,以下是在hadoop jar命令中查找jar的相关源代码hadoop jar命令指向本地文件系统,hadoop,jar,mapreduce,Hadoop,Jar,Mapreduce,我有一个有效的jar,它在另一个运行相同版本hadoop的系统上完美运行,即hadoop-1.2.1,具有相同的设置 我能够将jar文件放在hdfs文件系统中,并创建输入、输出目录 但是当我使用命令“hadoop jar HelloWorld.jar classnamemain method input output”时,它抛出“Invalid jar”错误。在搜索了很长一段时间可能的解决方案之后,我发现该命令是在本地文件系统中搜索jar,而不是在hdfs中搜索 甚至我也尝试将scheme添加到
1对于我遇到的每一个Hadoop版本来说都是如此。您的结果可能会有所不同。这段代码在我的$HADOOP\u HOME/bin/HADOOP脚本中
'elif [ "$COMMAND" = "jar" ] ; then
CLASS=org.apache.hadoop.util.RunJar'
表示,它指向RunJar类
在RunJar里你有这个
/** Run a Hadoop job jar. If the main class is not in the jar's manifest,
* then it must be provided on the command line. */
public static void main(String[] args) throws Throwable {
String usage = "RunJar jarFile [mainClass] args...";
if (args.length < 1) {
System.err.println(usage);
System.exit(-1);
}
int firstArg = 0;
String fileName = args[firstArg++];
File file = new File(fileName);
String mainClassName = null;
JarFile jarFile;
try {
jarFile = new JarFile(fileName);
} catch(IOException io) {
throw new IOException("Error opening job jar: " + fileName)
.initCause(io);
}
------ Other code -------
}
所以,我不确定File File=newfilefilename;实际上可以指向HDFS路径吗
可能是Hadoop的MapR发行版可以做到这一点。这段代码在我的$Hadoop\u HOME/bin/Hadoop脚本中
'elif [ "$COMMAND" = "jar" ] ; then
CLASS=org.apache.hadoop.util.RunJar'
表示,它指向RunJar类
在RunJar里你有这个
/** Run a Hadoop job jar. If the main class is not in the jar's manifest,
* then it must be provided on the command line. */
public static void main(String[] args) throws Throwable {
String usage = "RunJar jarFile [mainClass] args...";
if (args.length < 1) {
System.err.println(usage);
System.exit(-1);
}
int firstArg = 0;
String fileName = args[firstArg++];
File file = new File(fileName);
String mainClassName = null;
JarFile jarFile;
try {
jarFile = new JarFile(fileName);
} catch(IOException io) {
throw new IOException("Error opening job jar: " + fileName)
.initCause(io);
}
------ Other code -------
}
所以,我不确定File File=newfilefilename;实际上可以指向HDFS路径吗
可能是Hadoop的MapR发行版可以做到这一点。也许,现在回复这个讨论已经太晚了,尽管我没有看到任何公认的答案,所以我想回复这个。今天,我遇到了同样的问题,经过几个小时的努力,终于解决了。我发现了两个问题的原因不是一个有效的Jar 当我们从HDFS引用Jar时,它给出了这个错误。我在本地文件系统中更改了对jar文件的引用,它工作正常。我的理解是,不需要将Jar文件放入HDFS中。 'hadoop jar HelloWorld.jar从本地文件系统classnamemain方法输入输出中引用' 当您在创建Jar文件时创建Jar文件并定义Main类时,您不需要在命令中定义classname 'hadoop jar HelloWorld.jar classnamemain方法如果在jar文件创建输入输出时已经定义了主类,则不需要此方法' 以下是命令:
“hadoop jar HelloWorld.jar input output”也许现在回复这个讨论已经太晚了,尽管我没有看到任何被接受的答案,所以我想回复这个。今天,我遇到了同样的问题,经过几个小时的努力,终于解决了。我发现了两个问题的原因不是一个有效的Jar 当我们从HDFS引用Jar时,它给出了这个错误。我在本地文件系统中更改了对jar文件的引用,它工作正常。我的理解是,不需要将Jar文件放入HDFS中。 'hadoop jar HelloWorld.jar从本地文件系统classnamemain方法输入输出中引用' 当您在创建Jar文件时创建Jar文件并定义Main类时,您不需要在命令中定义classname 'hadoop jar HelloWorld.jar classnamemain方法如果在jar文件创建输入输出时已经定义了主类,则不需要此方法' 以下是命令:
“hadoop jar HelloWorld.jar输入输出”HelloWorld.jar保留在本地系统而不是HDFS中-为什么要将其存储在HDFS中?@JtheRocker您能指出一些说明hadoop jar从本地系统中拾取jar的文档吗?我总是在hdfs上加载我的jar并运行,它工作得很好。但是我的本地路径上的jar也有相同的路径,所以它可能会选择本地路径,而不是像我一样选择hdfs上的路径assumed@SuvP当前位置请检查我的答案,如果有帮助的话。我尝试了所有方法,伙计们…请帮忙,我被困了很长一段时间了。nowHelloWorld.jar在本地系统中,而不是在HDFS中-为什么要将它存储在HDFS中?@JtheRocker你能指出一些文档,其中说hadoop jar从本地系统中选择jar吗?我总是在hdfs上加载我的jar并运行,它工作得很好。但是我的本地路径上的jar也有相同的路径,所以它可能会选择本地路径,而不是像我一样选择hdfs上的路径assumed@SuvP当前位置如果有帮助,请检查我的答案。我尝试了所有方法,伙计们…请帮助,我被困了很长时间。是的,我看到了这个代码。但是hadoop-1.2。
1可以在另一个系统中完美运行,它是从hdfs而不是本地文件系统获取的。”hadoop jar HelloWorld.jar…'正在从/user/username(hdfs主目录)获取它,但在我的系统中,相同的命令正在/home/username(我当前的工作目录)中搜索jar。有趣。我现在目瞪口呆。但是怎么做呢?我也很好奇。@user2672952这是什么其他系统?另一个系统也在伪分布式模式下运行hadoop-1.2.1,jar位于/user/username中,在HDFSINPUTDIR as/user/username/input和outputdir as/user/username/output您是如何在命令行上调用它的,您能否验证您没有意外地在本地文件系统上创建/user/username/目录的?是的,我看到了这段代码。但hadoop-1.2.1可以在另一个系统中完美运行,它是从hdfs而不是本地文件系统中获取的hadoop jar HelloWorld.jar…'正在从/user/username(hdfs主目录)获取它,但在我的系统中,相同的命令正在/home/username(我当前的工作目录)中搜索jar。有趣。我现在目瞪口呆。但是怎么做呢?我也很好奇。@user2672952这是什么其他系统?另一个系统也在伪分布式模式下运行hadoop-1.2.1,jar位于/user/username中,在hdfs中,inputdir作为/user/username/input和outputdir作为/user/username/output您是如何在命令行上调用它的,您能否验证您没有意外地在本地文件系统上创建/user/username/目录?