mapreduce作业仅在群集上的avrokeyinputformat上失败

tvz2xvvm  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(413)

我有一些Map在本地机器上工作得很好。
在远程群集上运行作业时,出现以下错误:

Error: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.avro.mapreduce.AvroKeyInputFormat not found
    at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2298)
    at org.apache.hadoop.mapreduce.task.JobContextImpl.getInputFormatClass(JobContextImpl.java:175)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:751)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:175)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:422)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1836)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:169)

我的本地计算机运行
2.7.0 hadoop 在我的远程集群上
2.8.1 hadoop 版本
这个错误可能来自哪里?

brtdzjyr

brtdzjyr1#

错误清楚地表明 ClassNotFoundException: Class org.apache.avro.mapreduce.AvroKeyInputFormat 这意味着类路径中缺少必需的apacheavro库。
hadoop从以下命令发出的路径中选取jar文件:

$ hadoop classpath

默认情况下,它列出所有hadoop核心jar。
您可以通过在提示符上执行下面的命令来添加jar,也可以添加到shell脚本以执行map reduce。

export HADOOP_CLASSPATH=/path/to/my/apache_avro_jar.jar

执行此操作后,请尝试通过以下方式再次检查类路径 hadoop classpath 命令,您应该能够看到您的jar与hadoop核心jar一起列出。
再次尝试执行程序。
另一个选择是通过包含apacheavrojar来创建程序的胖jar。
第三种选择是通过添加apacheavrojar到mapreduce类路径 DistributedCache .

DistributedCache.addFileToClassPath(avroJar, conf);
t98cgbkg

t98cgbkg2#

可能性很小,但您可能会再次检查您的依赖关系:

<dependency>
            <groupId>org.apache.avro</groupId>
            <artifactId>avro-mapred</artifactId>
            <version>1.7.6</version>
    </dependency>

相关问题