【问题标题】:Apache Flink batch mode fails after a few minutes and prints the resultsApache Flink 批处理模式在几分钟后失败并打印结果
【发布时间】:2021-12-19 20:50:11
【问题描述】:

我正在使用 Apache Flink 读取 CSV 文件,然后将记录转换为我执行 SQL 查询并将结果打印到标准输出的表。

代码(简化):

 StreamExecutionEnvironment env = StreamExecutionEnvironment.createLocalEnvironment(1);
 env.setRuntimeMode(RuntimeExecutionMode.BATCH);

 rowDataStreamSource = env.readFile(...).disableChaining();

 final StreamTableEnvironment tableEnv = StreamTableEnvironment.create(env);
 final Table table = tableEnv.fromChangelogStream(rowDataStreamSource, ordersSchema, ChangelogMode.insertOnly());
 tableEnv.createTemporaryView("orders", table);

 Table originalSQL = tableEnv.sqlQuery(...)
 originalSQL.execute().print();

 env.execute();

运行此作业后几分钟后出现错误:

21:29:49.999 [deploy.instance_IS_UNDEFINED,,,][mini-cluster-io-thread-3] 信息 o.a.f.r.rpc.akka.AkkaRpcService - 停止 Akka RPC 服务。 21:29:50.066 [deploy.instance_IS_UNDEFINED,,,][http-nio-8080-exec-1] 警告 o.a.f.s.a.o.c.CollectResultFetcher - 无法获取作业状态,所以 我们假设工作已经终止。一些数据可能会丢失。 java.lang.IllegalStateException: MiniCluster 尚未运行或已 已经被关闭了。在 org.apache.flink.util.Preconditions.checkState(Preconditions.java:193) 在 org.apache.flink.runtime.minicluster.MiniCluster.getDispatcherGatewayFuture(MiniCluster.java:877)

然后在异常下方打印带有我的 sql 结果的表。

是什么导致了这里的问题?有没有办法告诉 Flink 没有更多记录,以便它可以完成工作并打印结果?

【问题讨论】:

    标签: java apache-flink


    【解决方案1】:

    您应该使用FileSource 而不是readFile 以便在批处理执行模式下正常工作:https://nightlies.apache.org/flink/flink-docs-stable/api/java/org/apache/flink/connector/file/src/FileSource.html

    或者,更好的是,您可以直接使用 SQL 定义一个表作为获取输入文件的源,如下所述:https://nightlies.apache.org/flink/flink-docs-stable/docs/connectors/table/filesystem/

    【讨论】:

    • 实际上只有在本地环境中运行作业时才会出现问题。提交给外部作业经理后,问题就消失了。
    猜你喜欢
    • 2018-09-27
    • 1970-01-01
    • 2020-04-14
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    相关资源
    最近更新 更多