首先我的运行环境是使用hadoop2.7.7,scala2.11.12,spark2.4.4
请注意在选择版本时请根据实际情况选择合适的版本
当使用flume与spark streaming获取数据源出现如下报错时
ERROR Requestor: Error in callback handler: java.lang.IllegalAccessError: tried to access method org.apache.avro.specific.SpecificData.<init>()V from class org.apache.spark.streaming.flume.sink.EventBatch
java.lang.IllegalAccessError: tried to access method org.apache.avro.specific.SpecificData.<init>()V from class org.apache.spark.streaming.flume.sink.EventBatch
ERROR Requestor: Error in callback handler: java.lang.IllegalAccessError: tried to access method org.apache.avro.specific.SpecificData.<init>()V from class org.apache.spark.streaming.flume.sink.EventBatch
java.lang.IllegalAccessError: tried to access method org.apache.avro.specific.SpecificData.<init>()V from class org.apache.spark.streaming.flume.sink.EventBatch
遇到问题不要惊慌,首先查看报错,信息“tried to access method org.apache.avro.specific.SpecificData.<init>”显示使用方法错误而错误的包就是avro,其导致了版本的不兼容,原因可能是多方面的。
以下是以使用MAVEN来导入spark-streaming-flume与spark-streaming-flume-sink为例
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming-flume_2.11</artifactId>
<version>2.4.4</version><!-- 请根据实际情况选择合适的版本 -->
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming-flume-sink_2.11</artifactId>
<version>2.4.4</version><!-- 请根据实际情况选择合适的版本 -->
</dependency>
那么MAVEN会导入与其相关的包,其中就有avor,可以在外部库里面查找,看看avor的版本号是多少
可以看到MEVEN自动为我们导入了avor的版本为1.7.4,avor-ipc1.7.4,然而我希望使用的版本为1.8.2,那么此时只需要将avor的版本换为1.8.2即可,可使用多种方法实现下面以MAVEN导入的方式举例。
仅需在pom.xml中加入如下内容并重新加载即可
<dependency>
<groupId>org.apache.avro</groupId>
<artifactId>avro</artifactId>
<version>1.8.2</version> <!-- 请根据实际情况选择合适的版本 -->
</dependency>
<dependency>
<groupId>org.apache.avro</groupId>
<artifactId>avro-ipc</artifactId>
<version>1.8.2</version> <!-- 请根据实际情况选择合适的版本 -->
</dependency>
加载完成avor的版本变为了我们所需要的问题便得到了解决
请注意在选择版本时请根据实际情况选择合适的版本