我有一个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
的问题。你知道造成这种情况的原因吗?
答案 0 :(得分:1)
如果应用程序试图访问或修改字段,或者调用它无权访问的方法,则抛出该异常。 通常,编译器会捕获此错误;如果类的定义发生不兼容的更改,则此错误只能在运行时发生。
MapReduce作业很可能是针对一个版本的Avro开发和编译的,然后在部署到Hadoop集群后,它开始在运行时使用不同的,不兼容的Avro版本。我建议查看运行时类路径,看看它是否正在获取不同于您预期的Avro版本。