从本地运行到远程时ClassNotFoundException

时间:2017-12-03 12:11:43

标签: java hadoop mapreduce avro

我的mapreduce代码在我的本地工作正常。然后,当我在远程服务器上运行它时,我得到了这个execption

Error: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.avro.mapreduce.AvroKeyInputFormat not found
    at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2195)
    at org.apache.hadoop.mapreduce.task.JobContextImpl.getInputFormatClass(JobContextImpl.java:174)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:749)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164)
    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:1698)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)

在我的IntelliJ ide中,我有一个外部库avro-mapred-1.7.7-hadoop2.jar,我从中构建了工件。当我解压缩工件的jar时,我正确完成,并且我在AvroKeyInputFormat包中正确找到了org.apache.avro.mapreduce。那我在这里错过了什么? 我检查了一些SO帖子,但我找不到相关的答案

1 个答案:

答案 0 :(得分:0)

  1. 创建一个far jar并将所有依赖jar添加到fat jar中。

  2. 使用cli -libjars在分布式缓存中添加从属jar或使用Job.addLibPath()以编程方式添加jar。

  3. 想法是在MR期间调用远程JVM可用的所有jar。