我有一个hadoopmapreduce程序,它在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
点列表数据类型无效 int
s、 但它没有遇到麻烦 double
s。你知道这是什么原因吗?
1条答案
按热度按时间swvgeqrz1#
引用javadocs
IllegalAccessError
:如果应用程序试图访问或修改字段,或调用其无权访问的方法,则引发。通常,这个错误被编译器捕获;只有在类的定义发生不兼容的更改时,才能在运行时发生此错误。
mapreduce作业很可能是针对avro的一个版本开发和编译的,然后在部署到hadoop集群之后,它开始在运行时使用另一个不兼容的avro版本。我建议查看运行时类路径,看看它是否获得了与您预期不同的avro版本。