• Flink es-sink解决java.lang.NoSuchFieldError: FAIL_ON_SYMBOL_HASH_OVERFLOW


    在写Flink实例时,遇到将case class 样例类转换为jsonObject后,在添加到es sink source中时,报错java.lang.NoSuchFieldError: FAIL_ON_SYMBOL_HASH_OVERFLOW。

    问题总结

    出现以下问题的原因是jar包的依赖版本问题。解决该问题需要引入高版本的包,同时解决包冲突问题。

    java.lang.NoSuchFieldError: FAIL_ON_SYMBOL_HASH_OVERFLOW

    从以下两图中可以看出,2.3.1的包中确实没有FAIL_ON_SYMBOL_HASH_OVERFLOW 字段,而在2.8.11版本的包中可以看到注释,在2.4版本后加入了这个字段,由此问题找到,是因为引入的jar包版本问题,解决过程中还需要考虑jar包冲突的问题。

    在这里插入图片描述

    在这里插入图片描述

    • 解决jar包冲突
    1. IDEA安装maven helper插件,如下图,安装完后重启IDEA。

    在这里插入图片描述

    2.打开pom文件,在下方会出现dependency Analyzer,点击这个标签打开对应界面。如下面第二个图,圈出来的都是具有冲突的jar包,需要我们逐一解决冲突。

    在这里插入图片描述
    在这里插入图片描述

    3.将左边含有冲突的jar包点开,在右边会出现冲突的包的具体版本和位置。选择自己要排除的引用,右键点击Exclude即可,解决完冲突后,点击Reimport重新加载引用,冲突全部解决完左边列表将是空的。

    在这里插入图片描述

    4.另外可以使用maven 命令来查看具体的引用。使用命令 mvn dependency:tree -Dverbose以层级树方式查看全部传递原来。可以看到层级树对应的上图插件的内容(层级树是父引用在上面,而插件显示的是父引用在选项栏最下面),这里还显示与2.3.1版本的包冲突。

    在这里插入图片描述

    5.上面命令显示的是全部的传递依赖,也可以通过命令控制输出内容为自己想要的或不想要的。 -Dincludes= xxx是过滤有xxx字段的依赖,-Dexcludes=xxx是排除我不想要的依赖。

  • 相关阅读:
    Gremlin基本使用
    SpringData JdbcTemplate Jdbc使用简介
    DOS命令行使用pscp实现远程文件和文件夹传输(转)
    vscode:让文件支持右键vscode打开
    vue-webpack项目本地开发环境设置代理解决跨域问题
    VueJS中学习使用Vuex详解
    Object.create()和new 创建对象的区别
    vue组件和插件的区别
    创建vue组件与自定义一个vue组件时的区别
    [Vue] : 自定义指令
  • 原文地址:https://www.cnblogs.com/hecxx/p/11959833.html
Copyright © 2020-2023  润新知