当我为班级ClassNotFoundException
开始工作时,我正面临org.apache.hcatalog.rcfile.RCFileMapReduceOutputFormat
。
我尝试使用-libjars
传递其他jar文件,但我仍面临同样的问题。任何建议都会有很大帮助。提前谢谢。
以下是我正在使用的命令以及我正面临的例外情况!
hadoop jar MyJob.jar MyDriver -libjars hcatalog-core-0.5.0-cdh4.4.0.jar inputDir OutputDir
线程“main”中的异常java.lang.NoClassDefFoundError:org / apache / hcatalog / rcfile / RCFileMapReduceOutputFormat
在com.cloudera.sa.omniture.mr.OmnitureToRCFileJob.run(OmnitureToRCFileJob.java:91)
在org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
在com.cloudera.sa.omniture.mr.OmnitureToRCFileJob.main(OmnitureToRCFileJob.java:131)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
在java.lang.reflect.Method.invoke(Method.java:597)
在org.apache.hadoop.util.RunJar.main(RunJar.java:208)
引起:java.lang.ClassNotFoundException:org.apache.hcatalog.rcfile.RCFileMapReduceOutputFormat
在java.net.URLClassLoader $ 1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
在java.lang.ClassLoader.loadClass(ClassLoader.java:306)
在java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 8更多
我也实现了ToolRunner
,下面的代码确认了这一点!
public class OmnitureToRCFileJob extends Configured implements Tool {
public static void main(String[] args) throws Exception {
OmnitureToRCFileJob processor = new OmnitureToRCFileJob();
String[] otherArgs = new GenericOptionsParser(processor.getConf(), args).getRemainingArgs();
System.exit(ToolRunner.run(processor.getConf(), processor, otherArgs));
}
}
答案 0 :(得分:0)
如果查看hadoop命令文档,可以看到-libjars
是一个通用选项。对于解析泛型选项,您必须覆盖驱动程序类中的ToolRunner.run()
方法,如下所示:
public class TestDriver extends Configured implements Tool {
@Override
public int run(String[] args) throws Exception {
Configuration conf = getConf();
# Job configuration details
# Job submission
return 0;
}
}
public static void main(String[] args) throws Exception {
int exitCode = ToolRunner.run(new TestDriver(), args);
System.exit(exitCode);
}
我从你的驱动程序代码本身那里得到了这个例外。使用-libjars选项设置hcatalog-cor * .jar可能在客户端JVM(运行驱动程序代码的JVM)中不可用。最好你需要在HADOOP_CLASSPATH环境变量中设置这个jar,然后使用hadoop jar执行相同的操作,如下所示
export HADOOP_CLASSPATH=${HADOOP_CLASSPATH}:<PATH-TO-HCAT-LIB>/hcatalog-core-0.5.0-cdh4.4.0.jar;
hadoop jar MyJob.jar MyDriver -libjars hcatalog-core-0.5.0-cdh4.4.0.jar inputDir OutputDir
答案 1 :(得分:0)
您是否尝试通过在下面的行中提供“hcatalog-core-0.5.0-cdh4.4.0.jar”jar文件的完整路径来运行。
hadoop jar MyJob.jar MyDriver -libjars hcatalog-core-0.5.0-cdh4.4.0.jar inputDir OutputDir
或
以下配置也应该适合你
$ export LIBJARS= <fullpath>/hcatalog-core-0.5.0-cdh4.4.0.jar
$hadoop jar MyJob.jar MyDriver -libjars ${LIBJARS} inputDir OutputDir
答案 2 :(得分:0)
我有同样的问题,但发现jar命令不接受--libjars参数。 “指定要包含在类路径中的逗号分隔的jar文件。仅适用于作业。” - &GT; Hadoop Cli Generic Options
相反,您应该使用env vars添加额外的或替换罐子。
导出HADOOP_USER_CLASSPATH_FIRST = true export HADOOP_CLASSPATH =“./ lib / *”