flink clickhouse-jdbc和flink-connector 写入数据到clickhouse因为jar包冲突导致的60 seconds.Please check if the requested resources are available in the YARN cluster和Could not resolve ResourceManager address akka报错血案
一、问题现象,使用flink on yarn 模式,写入数据到clickhouse,但是在yarn 集群充足的情况下一直报:Deployment took more than 60 seconds. Please check if the requested resources are available in the YARN cluster,表面现象是 yarn 集群资源可能不够,实际yarn 集群资源是够用的。
查看flink jobmanager的日志,发现日志中一直在出现如下报错:
Could not resolve ResourceManager address akka.tcp://flink@xxxxxxxxx.cn:38121/user/rpc/resourcemanager_*, retrying in 10000 ms: Could not connect to rpc endpoint under address akka.tcp://xxxxxxx.cn:38121/user/rpc/resourcemanager_*.
从这个日志来看,也就基本可以确定不是yarn集群资源的问题,是yarn 集群通信出现了问题。
1)、交叉验证,发现提交别的flink streamling 任务都不会存在该问题,只有写clickhouse的时候才会出现该问题,初步排除可能是代码问题或者该任务的jar包引起的。
2)、查看pom依赖:
<dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-connector-jdbc_2.11</artifactId> <version>${flink.version}</version> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-streaming-java_2.11</artifactId> <version>${flink.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-connector-kafka_2.11</artifactId> <version>${flink.version}</version> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-java</artifactId> <version>${flink.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>ru.yandex.clickhouse</groupId> <artifactId>clickhouse-jdbc</artifactId> <version>${clickhouse-jdbc.version}</version> </dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector-java.version}</version>
</dependency>
从日志中虽然看不出明显的jar包冲突问题,但是依然能从Could not resolve ResourceManager address akka.tcp://flink@xxxxxxxxx.cn:38121/user/rpc/resourcemanager_*, retrying in 10000 ms: Could not connect to rpc endpoint under address akka.tcp://xxxxxxx.cn:38121/user/rpc/resourcemanager_*. 联想到可能是jar冲突或者jar包版本导致的冲突,导致 connect 失败。
联想到hadoop 环境中,最容易出现冲突的包,如下所示,首先去排查。
<groupId>com.google.guava</groupId> <artifactId>guava</artifactId>
然后发现,果然clickhouse-jdbc中存在这个包,如下所示
在pom中排除该包,如下所示
<dependency> <groupId>ru.yandex.clickhouse</groupId> <artifactId>clickhouse-jdbc</artifactId> <version>${clickhouse-jdbc.version}</version> <exclusions> <exclusion> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> </exclusion> </exclusions> </dependency>
重新运行,问题得到解决。
二、问题启示:
1、所有的日志中没有地方显示代码冲突,表层现象为Could not resolve ResourceManager address akka.tcp://flink@xxxxxxxxx.cn:38121/user/rpc/resourcemanager_*, retrying in 10000 ms: Could not connect to rpc endpoint under address akka.tcp://xxxxxxx.cn:38121/user/rpc/resourcemanager_*. 很难联想到jar包冲突,后来灵感来源于
https://blog.csdn.net/qq_31957747/article/details/108883793 这个篇博文,虽然发生冲突的jar是不一样,但是问题很类似,所以朝这个方向去做了尝试。发现jar包冲突,真的可能会带来这个问题。
2、flink on yarn 模式中,最容易出现flink任务的jar包和hadoop集群中的jar包冲突。 在写代码的时候,一般pom中可能是检测不出来的,因为很多包不直接依赖。但是在flink run -m yarn-cluster 提交任务时,却会使用到hadoop lib 下的classpath。 所以这种冲突代码中很难检测,实际中却很容易出现。
3、不要被表面的现象迷惑,要能根据现象去看到本质,这样才能解决到问题。
原文地址:https://www.cnblogs.com/laoqing/p/15140668.html
- Python机器学习中的特征选择
- Android学习第八弹之改变状态栏的颜色使其与APP风格一体化
- 手把手教你 MongoDB 的安装与详细使用(二)
- 搭建 MongoDB分片(sharding) / 分区 / 集群环境
- Android调用手机中的应用市场,去评分的功能实现
- ANR 原理与实战技巧
- Android将应用程序的崩溃信息如何保存到本地文件,并上传至服务器
- android native内存检测方案(二)
- 测试数据集与验证数据集之间有什么区别呢?
- 深度学习的未来
- SDL系列讲解(二) 环境搭建
- SDL系列讲解(四) demo讲解
- 具有张量流的混合密度网络
- SDL系列讲解(七) SDL_image教程
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法