从Eclipse导出Hadoop Jar

从Eclipse导出Hadoop Jar,eclipse,exception,hadoop,jar,Eclipse,Exception,Hadoop,Jar,我正在eclipse中构建MapReduce程序,并尝试使用自己的运行配置将jar导出为可运行的jar。在运行配置中,我指定main类并获取导出的jar并将其放入hadoop/playerly文件夹中。当我尝试使用此命令执行它时: hadoop jar playground/MyProg.jar "packageinfo" "input" "output" 我总是收到PrivilegedAccessException,表示输入路径不存在。我已经检查了包结构以及“输入”和“输出”路径。我怀疑这与

我正在eclipse中构建MapReduce程序,并尝试使用自己的运行配置将jar导出为可运行的jar。在运行配置中,我指定main类并获取导出的jar并将其放入hadoop/playerly文件夹中。当我尝试使用此命令执行它时:

hadoop jar playground/MyProg.jar "packageinfo" "input" "output"
我总是收到PrivilegedAccessException,表示输入路径不存在。我已经检查了包结构以及“输入”和“输出”路径。我怀疑这与出口罐的结构有关

使用以下两个命令是非常不恰当的:

$ javac -classpath *:lib/* -d playground/classes playground/src/WordCount.java
$ jar -cvf playground/WordCount.jar -C playground/classes/ .
随着我的MapReduce程序复杂性的增加,这一点尤其明显

我想知道是否有一种特定的方法可以用适当的目录结构从Eclipse导出JAR,这样我就不会得到PrivilegedAccessException。对我来说,虽然MapReduce本身的开发变得越来越容易,但它的调试、部署和测试却是一个巨大的挑战,尤其是在linux环境中,所有的终端和文件系统命令都非常神秘。非常感谢所有帮助我理解这一过程的投入

当我尝试运行名为MyJob.jar的应用程序时,一条示例错误消息如下:

 hadoop jar playground/MyJob.jar src.main.myjob.MyJob /usr/root/MyJob/cite75_99.txt /usr/root/MyJob/cite75_99OUT.txt
Warning: $HADOOP_HOME is deprecated.

13/09/28 15:20:13 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same.
13/09/28 15:20:14 INFO util.NativeCodeLoader: Loaded the native-hadoop library
13/09/28 15:20:14 WARN snappy.LoadSnappy: Snappy native library not loaded
13/09/28 15:20:14 INFO mapred.JobClient: Cleaning up the staging area hdfs://localhost:9000/tmp/hadoop-root/mapred/staging/root/.staging/job_201309281443_0007
13/09/28 15:20:14 ERROR security.UserGroupInformation: PriviledgedActionException as:root cause:org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: hdfs://localhost:9000/user/root/src.main.myjob.MyJob
Exception in thread "main" org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: hdfs://localhost:9000/user/root/src.main.myjob.MyJob
    at org.apache.hadoop.mapred.FileInputFormat.listStatus(FileInputFormat.java:197)
    at org.apache.hadoop.mapred.FileInputFormat.getSplits(FileInputFormat.java:208)
    at org.apache.hadoop.mapred.JobClient.writeOldSplits(JobClient.java:1081)
    at org.apache.hadoop.mapred.JobClient.writeSplits(JobClient.java:1073)
    at org.apache.hadoop.mapred.JobClient.access$700(JobClient.java:179)
    at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:983)
    at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:936)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:415)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1190)
    at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:936)
    at org.apache.hadoop.mapred.JobClient.submitJob(JobClient.java:910)
    at org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:1353)
    at src.main.myjob.MyJob.run(MyJob.java:87)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
    at src.main.myjob.MyJob.main(MyJob.java:94)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:160)

也许我对这个问题的诊断是完全错误的?非常感谢所有帮助我理解这一点的输入…导出整个项目的一个普通jar。你是说只是“jar文件”选项而不是“可运行的jar文件”?是的,请尝试一下。@JtheRocker完美!它好像在跑。映射任务已完成到100%,但是reduce仍停留在66%,现在当我尝试运行它时,我得到一个异常,表示JobConf处于安全模式。但我认为这是完全无关的。你的解决方案似乎奏效了。为此非常感谢。。。