昨天使用flume的avrosource的时候遇到这个问题,也从网上查了一下,
基本上都在强调avro包版本问题。
的确有这个可能,但可能性很小,除非你flume下载后你直接覆盖了lib里原生依赖。
然后我去框架下lib看了一下arvo版本1.7.4(flume版本是1.9.0),然后去官网看了一下原生包也是1.7.4.
所以我就pass掉了这个解释。
然后仔细看一下报错问题,error类型的确一样,去github上追了一下源码,初始化调用方法getSchema和一些其他初始化配置,所以可以确定在初始化的时候就出现了问题。
觉得的确是缺少avro的运行环境,所以对比了一下github上内部引用包,比flumelib内多一个avro-compile(具体叫啥忘了),然后从maven下一个扔进去了。依然没啥用。
所以抛弃了是flume引用arvo问题,看配置文件里还调用了哪些,看到自定义拦截器(小伙伴解决不了,我接手,所以才看到拦截器。)
后去git上下了此拦截器,发现内部集成了各种与CDP(CDH)的环境,但的确没有avro环境。
瞬间就明白了。此问题是flume调用自定义拦截器,数据输入的时候,拦截器需要认识avro类型数据流,所以调用环境内没有此依赖就会报这个错。pom加上avro-1.7.4(与flumelib版本要兼容,最好就一致)。
打包放进lib替换掉原来的拦截器后,成功运行。