在文件/opt/client/Flink/flink/conf/flink-conf.yaml中配置映射关系:
XXXX
执行flink run -m yarn-cluster -ynm “test” /opt/client/Flink/flink/examples/streaming/WordCount.jar --input hdfs://hacluster/yy/ --output hdfs://hacluster/yy/test
报错异常如下:
分析:
1、 报错异常就是没有okio.1.14.0包中的 okio.BufferedSource.readUtf8LineStrict(Long)方法
2、 mrs-obs-provider包下面的okio包都是okio.1.14.0的,flink内核代码用的却是okio.1.4.0的,两者不一致
3、 对比了这两个包,高版本有带这个参数的这个方法,低版本没有
4、 从报错栈看出是obs sdk依赖这个包,不是MrsObsCredentialsProvider直接依赖的。
5、 Flink的classpath下包含/opt/client/Flink/flink/lib下面的包和yarn classpath下面的包,这样classpath池就包含了okio.1.14.0和okio.1.4.0的包,出现冲突
grep ‘HttpCodec’ * 看看
看看这个类在你flink的lib 下有没有
6、 解决方法两个:1.升级flink内核中的okio包版本,2.把 provider改造下,自己把okio打到自己的包里,不用外面flink的 okio包
7、 因为客户要用自己的flink组件执行翻译,解决方法一不一定可以解决用户的问题,所以应该使用解决方法2