从MapReduce中的自己的函数创建Avro对象时的java.lang.IllegalAccessError

时间:2017-07-19 01:41:11

标签: java hadoop mapreduce avro

我有一个Hadoop MapReduce程序,它在Map阶段的自创功能中,使用Avro在将数据发送到reduce阶段之前存储数据。当我运行该函数时,我收到此错误:

Caused by: java.lang.IllegalAccessError: tried to access method org.apache.avro.specific.SpecificData.<init>()V from class com.example.myapp.avro.PointList

PointList数据类型有int个,但它没有double的问题。你知道造成这种情况的原因吗?

1 个答案:

答案 0 :(得分:1)

IllegalAccessError

引用JavaDocs
  

如果应用程序试图访问或修改字段,或者调用它无权访问的方法,则抛出该异常。   通常,编译器会捕获此错误;如果类的定义发生不兼容的更改,则此错误只能在运行时发生。

MapReduce作业很可能是针对一个版本的Avro开发和编译的,然后在部署到Hadoop集群后,它开始在运行时使用不同的,不兼容的Avro版本。我建议查看运行时类路径,看看它是否正在获取不同于您预期的Avro版本。