背景
将获取的数据通过kafka写入hive中,其流程为
1.申请kafka的topic和schema
2.创建producer,将数据写入kafka
3.通过kafka-connector-HDFS自动消费kafka的数据到hdfs
4.并在hive中自动创建表
在步骤2中创建schema对象时,报如下错误:
IllegalAccessError: tried to access method org.apache.avro.specific.SpecificData.<init>() from class com.abc.schema.*****
问题排查
通过排查发现是jar包冲突,冲突的包为org.apache.hadoop:hadoop-common:2.8.4,该包包含org.apache.avro:avro:1.7.4,在步骤2中创建schema对象时,其会首先到步骤2中创建schema对象寻找依赖,结果无法找到org.apache.avro.specific.SpecificData类,所以会报错
解决方法
修改pom.xml文件,使用exclusion排除依赖
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.8.4</version>
<!--排除avro依赖-->
<exclusions>
<exclusion>
<groupId>org.apache.avro</groupId>
<artifactId>avro</artifactId>
</exclusion>
</exclusions>
</dependency>