Exception in thread “main“ org.apache.flink.table.api.SqlParserException: SQL parse failed. Encounte

博客指出问题原因是占用了flink的保留关键字,针对此问题给出两种解决方法,一是进行修改,二是强行使用。
Exception in thread "main" org.apache.flink.table.api.SqlParserException: SQL parse failed. Encountered "table" at line 1, column 308.
Was expecting one of:
    "CONSTRAINT" ...
    "PRIMARY" ...
    "UNIQUE" ...
    "WATERMARK" ...
    <BRACKET_QUOTED_IDENTIFIER> ...
    <QUOTED_IDENTIFIER> ...
    <BACK_QUOTED_IDENTIFIER> ...
    <IDENTIFIER> ...
    <UNICODE_QUOTED_IDENTIFIER> ...
	at org.apache.flink.table.planner.calcite.CalciteParser.parse(CalciteParser.java:56)
	at org.apache.flink.table.planner.delegation.ParserImpl.parse(ParserImpl.java:76)
	at org.apache.flink.table.api.internal.TableEnvironmentImpl.executeSql(TableEnvironmentImpl.java:684)

原因:

占用了flink的保留关键字

解决方法:

1.修改

2.强行使用,

`table`

 

`Exception in thread "main" org.apache.flink.runtime.client.JobExecutionException: Job execution failed.` 是 Apache Flink 作业执行失败时常见的顶层异常。它本身是一个**包装异常**,表示作业在提交或运行过程中发生了错误。要解决问题,你需要查看其 **根本原因(cause)** —— 通常在堆栈跟踪的底部。 --- ### 🔍 常见原因及解决方案 以下是导致此异常的一些常见情况及其排查方法和修复方式。 --- #### ✅ 1. **依赖缺失或冲突(最常见)** Flink 程序需要正确打包所有用户代码和依赖(除了 Flink 已提供的依赖,应设为 `provided`)。 ##### ❌ 问题示例: - 使用了 Kafka、HBase、Elasticsearch 等连接器但未包含依赖。 - 依赖版本与 Flink 版本不兼容。 ##### ✅ 解决方案:使用正确的 `pom.xml` ```xml <dependencies> <!-- Flink core dependencies (provided) --> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-java</artifactId> <version>1.17.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-streaming-java</artifactId> <version>1.17.0</version> <scope>provided</scope> </dependency> <!-- 如果你写的是流处理程序 --> <!-- Kafka Connector 示例 --> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-connector-kafka</artifactId> <version>1.17.0</version> </dependency> <!-- 日志 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.36</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.5.0</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <shadedArtifactAttached>true</shadedArtifactAttached> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>com.example.YourJobClass</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build> ``` 📌 **关键点**: - 所有 `flink-*` 的核心依赖设置为 `<scope>provided</scope>`。 - 使用 `maven-shade-plugin` 打包成 fat jar,包含第三方库(如 Kafka connector)。 - 主类必须指定。 --- #### ✅ 2. **主类未找到或无法加载** 如果你提交的 JAR 没有正确指定入口类,或者类路径不对。 ##### 🛠️ 检查: - 是否通过 `--class` 参数指定了主类? - MANIFEST.MF 中是否有 `Main-Class`? - IDE 导出的 JAR 是否包含了你的代码? ##### 🔧 修复: 确保 `pom.xml` 中配置了 `maven-shade-plugin` 并设置了 `<mainClass>`。 --- #### ✅ 3. **集群资源配置不足或配置错误** 例如: - TaskManager 内存不足 - 并行度太高 - Checkpoint 配置不合理 ##### 📋 查看日志中的底层异常: 比如: ```text Caused by: java.lang.OutOfMemoryError: Java heap space ``` 👉 解决方案: - 调整 `taskmanager.memory.process.size` 或 `jobmanager.memory.process.size` - 减少并行度 - 关闭 checkpoint 测试是否仍报错 --- #### ✅ 4. **代码逻辑错误(空指针、序列化失败等)** ##### 示例:序列化问题 ```java env.addSource(new SourceFunction<String>() { private volatile boolean isRunning = true; @Override public void run(SourceContext<String> ctx) throws Exception { while (isRunning) { ctx.collect(UUID.randomUUID().toString()); Thread.sleep(1000); } } @Override public void cancel() { isRunning = false; // 正确实现 cancel } }); ``` ⚠️ 如果 `cancel()` 没有正确实现,可能导致任务无法停止,进而引发超时或资源泄漏。 ##### 序列化异常示例: ```java .map(new MapFunction<String, MyCustomClass>() { @Override public MyCustomClass map(String value) { return new MyCustomClass(); // 但 MyCustomClass 没有默认构造函数或不可序列化 } }) ``` ✅ 必须保证所有传递的数据类型实现 `Serializable` 或使用 Flink 的 `TypeInformation` 支持的类型。 --- #### ✅ 5. **本地模式 vs 集群模式问题** 你在本地 IDEA 运行没问题,但提交到集群失败。 ##### 常见原因: - 本地有网络访问权限,集群无外网 - 文件路径不同(如读取本地文件 `/tmp/input.txt`,集群节点没有该文件) - ZooKeeper/Kafka 地址无法访问 ##### 👉 排查建议: - 不要使用 `env.readTextFile("file:///path")` 在生产环境 - 使用分布式存储(HDFS/S3)或 Kafka 作为源 --- ### ✅ 如何定位具体错误? 1. **查看完整堆栈日志** - 在本地运行时:看控制台输出的完整 `Caused by: ...` - 在 Web UI(http://localhost:8081)中点击失败的 Job → 查看 `Exceptions` 和 `Task Managers` 日志 - 日志文件一般位于 `log/flink-*-jobmanager-*.log` 和 `log/flink-*-taskmanager-*.log` 2. **启用更详细的日志级别** ```yaml # conf/log4j.properties log4j.rootLogger=INFO, console log4j.logger.org.apache.flink=DEBUG ``` --- ### ✅ 示例:一个可运行的最小 Flink 程序 ```java public class WordCountJob { public static void main(String[] args) throws Exception { final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); env.socketTextStream("localhost", 9999) .flatMap((String line, Collector<String> out) -> { for (String word : line.split("\\s")) { out.collect(word); } }) .returns(Types.STRING) .keyBy(w -> w) .sum(0) // 错误!字符串不能 sum .print(); env.execute("Word Count"); } } ``` 📌 上面代码会抛出异常,因为 `.sum(0)` 只适用于数字类型! 🔧 修正: ```java .map(word -> Tuple2.of(word, 1)) .returns(Types.TUPLE(Types.STRING, Types.INT)) .keyBy(t -> t.f0) .sum(1) .print(); ``` --- ###
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值