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

时间:2018-02-21 15:20:49

标签: hadoop mapreduce avro

我在本地计算机上有一些map-reduce工作正常。

当我在远程群集上运行作业时,出现此错误:

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个版本

这个错误可能来自哪里?

2 个答案:

答案 0 :(得分:0)

错误明确指出ClassNotFoundException: Class org.apache.avro.mapreduce.AvroKeyInputFormat

这意味着类路径中缺少必需的apache avro库。

Hadoop通过以下命令从路径发出中选择jar文件:

$ hadoop classpath

默认情况下,它列出所有hadoop核心罐。

您可以通过在提示符上执行以下命令来添加jar,或者添加到shell脚本以执行map-reduce。

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

执行此操作后,尝试通过hadoop classpath命令再次检查类路径,您应该能够看到您的jar与hadoop核心jar一起列出。

尝试再次执行该程序。

另一种选择是通过包含apache avro jar来创建程序的胖罐。

第3个选项是通过DistributedCache添加Apache Avro jar到mapreduce类路径中。

DistributedCache.addFileToClassPath(avroJar, conf);

答案 1 :(得分:0)

可能性很小,但你可能会仔细检查你的依赖性:

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