繁体   English   中英

Hadoop外部jar

[英]Hadoop external jars

我正在尝试在服务器上运行hadoop作业。 版本是0.20.2

我有很多罐子,我正在跑步:

hadoop jar GenData.jar -libjars /path/jar1,path/jar2,...

即使相应的类在罐子中,我也会收到以下错误:

线程“主”中的异常java.lang.NoClassDefFoundError:org / apache / avro / mapreduce / AvroKeyInputFormat处于sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处的sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处,位于sun.reflect.NativeMethodAccessorImpl位于org.apache.hadoop.util的java.lang.reflect.Method.invoke(Method.java:606)处的sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)处的.invoke(NativeMethodAccessorImpl.java:57)。 RunJar.main(RunJar.java:197)原因:java.lang.ClassNotFoundException:java.net.URLClassLoader $ 1.run(org.apache.avro.mapreduce.AvroKeyInputFormat)java.net.URLClassLoader处的URL(URLClassLoader.java:366)在java.net.URLClassLoader.findClass(URLClassLoader.java:354)的java.security.AccessController.doPrivileged(本机方法)处的$ 1.run(URLClassLoader.java:355)在java.lang.ClassLoader.loadClass(ClassLoader.java: 425)at java.lang.ClassLoader.loadClass(ClassLoader.java:358)

看起来您是从Hadoop客户端获取此异常的,Mapreduce驱动程序代码的执行发生在Client JVM中。 在hadoop中,-libjars是通用选项,用于将依赖的jar添加到mapper / reducer。 对于将Jars添加到Client set的情况,可以在执行hadoop命令之前设置以下环境变量。

export HADOOP_CLASSPATH=<PATH_to_jar>/Jar1:<PATH_to_jar>/Jar2;    

(冒号“:”可用于指定1个以上的jar,在您的情况下,您可以添加包含org.apache.avro.mapreduce.AvroKeyInputFormat类的Jar)。

新编辑

首先,您需要找到包含org.apache.avro.mapreduce.AvroKeyInputFormat类的jar。 您可以在jar avro-mapred*.jar (从Internet获取兼容版本的avro-mapred-version.jar )内找到该类,并使用上述命令将其包含在类路径中。

您缺少avro-mapred依赖项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM