本文为您介绍实时计算Flink版的SQL常见问题,包括作业开发报错和作业运维报错。
-
作业开发报错
-
作业运维报错
-
报错:java.util.concurrent.CompletionException: java.lang.IllegalArgumentException
-
报错:The difference between the request time and the current time is too large
-
报错:DELETE command denied to user 'userName'@'*.*.*.*' for table 'table_name'
-
报错:binlog probably contains events generated with statement or mixed based replication format
报错:undefined
-
报错详情
-
报错原因
您的JAR包较大。
-
解决方案
您可以在 OSS管理控制台 上传JAR包,详情请参见 如何在OSS控制台上传JAR包?
报错:Object '****' not found
-
报错详情
单击 运行 后,验证报错详情如下。
-
报错原因
在DDL和DML同在一个文本中提交运行时,DDL没有声明为CREATE TEMPORARY TABLE。
-
解决方案
在DDL和DML同在一个文本中提交运行时,DDL需要声明为CREATE TEMPORARY TABLE,而不是声明为CREATE TABLE。
报错:Only a single 'INSERT INTO' is supported
-
报错详情
单击 运行 后,验证报错详情如下。
-
报错原因
多个DML语句没有写在关键语句
BEGIN STATEMENT SET;
和END;
之间。 -
解决方案
将多个DML语句写在
BEGIN STATEMENT SET;
和END;
之间。详情请参见 INSERT INTO语句 。
报错:The primary key is necessary when enable 'Key: 'scan.incremental.snapshot.enabled' , default: true (fallback keys: [])' to 'true'
-
报错详情
Caused by: org.apache.flink.table.api.ValidationException: The primary key is necessary when enable 'Key: 'scan.incremental.snapshot.enabled' , default: true (fallback keys: [])' to 'true' at com.alibaba.ververica.cdc.connectors.mysql.table.MySqlTableSourceFactory.validatePrimaryKeyIfEnableParallel(MySqlTableSourceFactory.java:186) at com.alibaba.ververica.cdc.connectors.mysql.table.MySqlTableSourceFactory.createDynamicTableSource(MySqlTableSourceFactory.java:85) at org.apache.flink.table.factories.FactoryUtil.createTableSource(FactoryUtil.java:134) ... 30 more
-
报错原因
实时计算引擎vvr-3.0.7-flink-1.12及以前的版本,CDC Source只能单并发运行。但在实时计算引擎vvr-4.0.8-flink-1.13版本后增加了按PK分片进行多并发读取数据的功能并默认打开该功能( scan.incremental.snapshot.enabled 默认设置为true),在该功能下必须要配置主键。
-
解决方案
如果您使用实时计算引擎vvr-4.0.8-flink-1.13及以后的版本,则可以根据需求来选择解决方案:
-
如果您需要多并发读取MySQL CDC的数据,则在DDL中必须配置主键(PK)。
-
如果您不需要多并发读取MySQL CDC的数据,需要将 scan.incremental.snapshot.enabled 设置为false,参数配置详情请参见 WITH参数 。
-
报错:exceeded quota: resourcequota
-
报错详情
作业启动过程中报错。
-
报错原因
当前项目空间资源不足导致作业启动失败。
-
解决方案
您需要对项目资源进行资源变配,详情请参见 资源变配 。
报错:Exceeded checkpoint tolerable failure threshold
-
报错详情
作业运行过程中报错。
org.apache.flink.util.FlinkRuntimeException:Exceeded checkpoint tolerable failure threshold. at org.apache.flink.runtime.checkpoint.CheckpointFailureManager.handleJobLevelCheckpointException(CheckpointFailureManager.java:66)
-
报错原因
未设置任务允许Checkpoint失败的次数,系统默认Checkpoint失败一次就触发一次Failover。
-
解决方案
-
在作业开发页面右侧,单击 高级配置 。
-
在 更多Flink配置 文本框,输入如下参数。
execution.checkpointing.tolerable-failed-checkpoints: num
您需要设置num值来调整任务允许Checkpoint失败的次数。num需要为0或正整数。如果num为0时,则表示不允许存在任何Checkpoint异常或者失败。
-
报错:Flink version null is not configured for sql
-
报错详情
StatusRuntimeException: INTERNAL: Flink version null is not configured for sql.
-
报错原因
系统升级至VVR 4.0.8,导致作业的Flink计算引擎版本信息没有了。
-
解决方案
在作业开发页面右侧高级配置面版中,配置正确的Flink计算引擎版本。
说明如果您需要使用SQL Preview功能,则还需要检查Session集群页面的引擎版本是否选择正确。
报错:java.util.concurrent.CompletionException: java.lang.IllegalArgumentException
-
报错详情
Caused by: java.util.concurrent.CompletionException: java.lang.IllegalArgumentException: The bucket name "fakeBucket" is invalid. A bucket name must: 1) be comprised of lower-case characters, numbers or dash(-); 2) start with lower case or numbers; 3) be between 3-63 characters long.
-
报错原因
您在作业 高级配置 面板的 更多Flink配置 中,配置了 state.backend 参数,但未配置对应的 state.checkpoints.dir 参数。
-
解决方案
配置了 state.backend 参数,必须配置对应的 state.checkpoints.dir 参数。
说明您也可以直接删除 state.backend 参数。
报错:The difference between the request time and the current time is too large
-
报错详情
Caused by: org.apache.flink.fs.osshadoop.shaded.com.aliyun.oss.OSSException: The difference between the request time and the current time is too large. [ErrorCode]: RequestTimeTooSkewed [RequestId]: 61691C47AF60CA3639812A28 [HostId]: oss-bucket-name.oss-cn-shanghai-internal.aliyuncs.com [ResponseError]: <?xml version="1.0" encoding="UTF-8"?> <Error> <Code>RequestTimeTooSkewed</Code> <Message>The difference between the request time and the current time is too large.</Message> <RequestId>61691C47AF60C******12A28</RequestId> <HostId>******.oss-cn-shanghai-internal.aliyuncs.com</HostId> <MaxAllowedSkewMilliseconds>900000</MaxAllowedSkewMilliseconds> <RequestTime>2021-10-15T05:57:31.000Z</RequestTime> <ServerTime>2021-10-15T06:14:31.000Z</ServerTime> </Error> at org.apache.flink.fs.osshadoop.shaded.com.aliyun.oss.common.utils.ExceptionFactory.createOSSException(ExceptionFactory.java:100) ~[?:?] at org.apache.flink.fs.osshadoop.shaded.com.aliyun.oss.internal.OSSErrorResponseHandler.handle(OSSErrorResponseHandler.java:70) ~[?:?] at org.apache.flink.fs.osshadoop.shaded.com.aliyun.oss.common.comm.ServiceClient.handleResponse(ServiceClient.java:257) ~[?:?] at org.apache.flink.fs.osshadoop.shaded.com.aliyun.oss.common.comm.ServiceClient.sendRequestImpl(ServiceClient.java:140) ~[?:?] at org.apache.flink.fs.osshadoop.shaded.com.aliyun.oss.common.comm.ServiceClient.sendRequest(ServiceClient.java:70) ~[?:?] at org.apache.flink.fs.osshadoop.shaded.com.aliyun.oss.internal.OSSOperation.send(OSSOperation.java:83) ~[?:?] at org.apache.flink.fs.osshadoop.shaded.com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:145) ~[?:?] at org.apache.flink.fs.osshadoop.shaded.com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:102) ~[?:?] at org.apache.flink.fs.osshadoop.shaded.com.aliyun.oss.internal.OSSBucketOperation.listObjects(OSSBucketOperation.java:411) ~[?:?] at org.apache.flink.fs.osshadoop.shaded.com.aliyun.oss.OSSClient.listObjects(OSSClient.java:443) ~[?:?] at org.apache.flink.fs.shaded.hadoop3.org.apache.hadoop.fs.aliyun.oss.AliyunOSSFileSystemStore.listObjects(AliyunOSSFileSystemStore.java:506) ~[?:?] at org.apache.flink.fs.shaded.hadoop3.org.apache.hadoop.fs.aliyun.oss.AliyunOSSFileSystem.getFileStatus(AliyunOSSFileSystem.java:264) ~[?:?] at org.apache.flink.fs.shaded.hadoop3.org.apache.hadoop.fs.aliyun.oss.AliyunOSSFileSystem.validatePath(AliyunOSSFileSystem.java:548) ~[?:?] at org.apache.flink.fs.shaded.hadoop3.org.apache.hadoop.fs.aliyun.oss.AliyunOSSFileSystem.mkdirs(AliyunOSSFileSystem.java:532) ~[?:?] at org.apache.flink.fs.shaded.hadoop3.org.apache.hadoop.fs.FileSystem.mkdirs(FileSystem.java:2326) ~[?:?] at org.apache.flink.fs.osshadoop.common.HadoopFileSystem.mkdirs(HadoopFileSystem.java:196) ~[?:?]
-
报错原因
您的OSS Bucket开通了版本控制功能,但未配置生命周期规则来定期清理删除标记和不必要的历史版本。过多的删除标记会导致List慢,作业启动失败的问题。详情请参见 注意事项 。
-
解决方案
在OSS上配置生命周期规则来定期清理删除标记和不必要的历史版本,详情请参见 使用生命周期管理文件版本 。
INFO:org.apache.flink.fs.osshadoop.shaded.com.aliyun.oss
-
报错详情
-
报错原因
OSS每次创建新目录时,会先检查是否存在该目录,如果不存在,就会报这个INFO信息,但该INFO信息不影响Flink作业运行。
-
解决方案
在日志模板中添加
<Logger level="ERROR" name="org.apache.flink.fs.osshadoop.shaded.com.aliyun.oss"/>
。详情请参见 配置作业日志输出 。
报错:DateTimeParseException: Text 'xxx' could not be parsed
-
报错详情
作业运行过程中,会出现报错
DateTimeParseException: Text 'xxx' could not be parsed
。 -
报错原因
VVR 4.0.13以下版本,您在DDL中声明的日期格式和实际数据的格式不一致,Flink系统会直接报错。
-
解决方案
VVR 4.0.13及以上版本对JSON格式(Json、Canal Json、Debezium Json、Maxwell Json和Ogg Json)中TIMESTAMP类型的数据解析进行了增强,提升数据解析的能力。数据解析增强详情如下:
-
支持声明的TIMESTAMP类型解析DATE格式数据。
-
支持声明的TIMESTAMP_LTZ类型解析DATE或TIMESTAMP格式数据。
Flink系统根据您设置的 table.local-time-zone的 时区信息来转换TIMESTAMP数据至TIMESTAMP_LTZ。例如,在DDL中声明如下信息。
CREATE TABLE source ( date_field TIMESTAMP, timestamp_field TIMESTAMP_LTZ(3) ) WITH ( 'format' = 'json', );
当解析数据 {"date_field": "2020-09-12", "timestamp_field": "2020-09-12T12:00:00"} ,且在当前时区为东八区的情况下,会得到如下结果:"+I(2020-09-12T00:00:00, 2020-09-12T04:00:00.000Z)"。
-
支持自动解析TIMESTAMP或TIMESTAMP_LTZ格式。
增强前,JSON Format在解析TIMESTAMP数据时,需要您正确设置 timestamp-format.standard 为SQL或ISO-8601,数据才能被正确解析。增强后,Flink系统会自动推导TIMESTAMP的格式并解析,如果无法正确解析,则会报告错误。您手动设置的 timestamp-format.standard 的值会作为提示供解析器使用。
-
报错:DELETE command denied to user 'userName'@'*.*.*.*' for table 'table_name'
-
报错详情
Cause by:java.sql.SQLSyntaxErrorException:DELETE command denied to user 'userName'@'*.*.*.*' for table 'table_name' at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) ...
-
报错原因
MySQL的CDC流结合where条件过滤使用时,update类型的数据会发送update_before和update_after两条数据到下游,update_before数据到下游会被识别为DELETE操作,需要用户具有DELETE权限。
-
解决方案
检查SQL逻辑是否存在retract相关操作,如果存在相关操作,给结果表的操作用户赋予DELETE权限。
报错:java.io.EOFException: SSL peer shut down incorrectly
-
报错详情
Caused by: java.io.EOFException: SSL peer shut down incorrectly at sun.security.ssl.SSLSocketInputRecord.decodeInputRecord(SSLSocketInputRecord.java:239) ~[?:1.8.0_302] at sun.security.ssl.SSLSocketInputRecord.decode(SSLSocketInputRecord.java:190) ~[?:1.8.0_302] at sun.security.ssl.SSLTransport.decode(SSLTransport.java:109) ~[?:1.8.0_302] at sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1392) ~[?:1.8.0_302] at sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1300) ~[?:1.8.0_302] at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:435) ~[?:1.8.0_302] at com.mysql.cj.protocol.ExportControlled.performTlsHandshake(ExportControlled.java:347) ~[?:?] at com.mysql.cj.protocol.StandardSocketFactory.performTlsHandshake(StandardSocketFactory.java:194) ~[?:?] at com.mysql.cj.protocol.a.NativeSocketConnection.performTlsHandshake(NativeSocketConnection.java:101) ~[?:?] at com.mysql.cj.protocol.a.NativeProtocol.negotiateSSLConnection(NativeProtocol.java:308) ~[?:?] at com.mysql.cj.protocol.a.NativeAuthenticationProvider.connect(NativeAuthenticationProvider.java:204) ~[?:?] at com.mysql.cj.protocol.a.NativeProtocol.connect(NativeProtocol.java:1369) ~[?:?] at com.mysql.cj.NativeSession.connect(NativeSession.java:133) ~[?:?] at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:949) ~[?:?] at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:819) ~[?:?] at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:449) ~[?:?] at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:242) ~[?:?] at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198) ~[?:?] at org.apache.flink.connector.jdbc.internal.connection.SimpleJdbcConnectionProvider.getOrEstablishConnection(SimpleJdbcConnectionProvider.java:128) ~[?:?] at org.apache.flink.connector.jdbc.internal.AbstractJdbcOutputFormat.open(AbstractJdbcOutputFormat.java:54) ~[?:?] ... 14 more
-
报错原因
在MySQL dirver版本为8.0.27时,MySQL数据库开启了SSL协议,但默认访问方式不通过SSL连接数据库,导致报错。
-
解决方案
建议WITH参数中connector设置为rds,且MySQL维表URL参数中追加
characterEncoding=utf-8&useSSL=false
,例如:'url'='jdbc:mysql://***.***.***.***:3306/test?characterEncoding=utf-8&useSSL=false'
报错:binlog probably contains events generated with statement or mixed based replication format
-
报错详情
Caused by: io.debezium.DebeziumException: Received DML 'insert into table_name (...) values (...)' for processing, binlog probably contains events generated with statement or mixed based replication format
-
报错原因
MySQL CDC Binlog不可以为mixed格式,只能为ROW格式。
-
解决方案
-
在MySQL产品侧,通过
show variables like "binlog_format"
命令查看当前模式的Binlog格式。说明您可以使用
show global variables like "binlog_format"
查看全局模式的Binlog格式。 -
在MySQL产品侧,将Binlog格式设置为ROW格式。
-
重启作业生效。
-
报错:java.lang.ClassCastException: org.codehaus.janino.CompilerFactory cannot be cast to org.codehaus.commons.compiler.ICompilerFactory
-
报错详情
Causedby:java.lang.ClassCastException:org.codehaus.janino.CompilerFactorycannotbecasttoorg.codehaus.commons.compiler.ICompilerFactory atorg.codehaus.commons.compiler.CompilerFactoryFactory.getCompilerFactory(CompilerFactoryFactory.java:129) atorg.codehaus.commons.compiler.CompilerFactoryFactory.getDefaultCompilerFactory(CompilerFactoryFactory.java:79) atorg.apache.calcite.rel.metadata.JaninoRelMetadataProvider.compile(JaninoRelMetadataProvider.java:426) ...66more
-
报错原因
-
用户JAR包中引入了会发生冲突的janino依赖。
-
在用户的UDF JAR或Connector JAR中,误打入Flink中的某些依赖(例如flink-table-planner和flink-table-runtime)。
-
-
解决方案
分析JAR包里面是否含有org.codehaus.janino.CompilerFactory。因为在不同机器上的Class加载顺序不一样,所以有时候出现类冲突。该问题的解决步骤如下:
-
在 作业运维 页面,单击目标作业的名称。
-
在作业详情页面,单击 返回开发 。
-
在页面右侧 高级配置 面板的 更多Flink配置 中,增加如下代码。
classloader.parent-first-patterns.additional: org.codehaus.janino
其中,参数的value值需要替换为冲突的类。
-