我想通过以下代码在本地使用Flink-API读取CSV文件:
csvPath="data/weather.csv";
List<Tuple2<String, Double>> csv= env.readCsvFile(csvPath)
.types(String.class,Double.class).collect();
我尝试了一些不同大小的文件(从800mb到6gb)。有时操作成功完成,有时则不是,因为以下超时异常:
Exception in thread "main" java.util.concurrent.TimeoutException: Futures timed out after [10000 milliseconds]
at scala.concurrent.impl.Promise$DefaultPromise.ready(Promise.scala:219)
at scala.concurrent.impl.Promise$DefaultPromise.ready(Promise.scala:153)
at scala.concurrent.Await$$anonfun$ready$1.apply(package.scala:169)
at scala.concurrent.Await$$anonfun$ready$1.apply(package.scala:169)
at scala.concurrent.BlockContext$DefaultBlockContext$.blockOn(BlockContext.scala:53)
at scala.concurrent.Await$.ready(package.scala:169)
at org.apache.flink.runtime.minicluster.FlinkMiniCluster.shutdown(FlinkMiniCluster.scala:439)
at org.apache.flink.runtime.minicluster.FlinkMiniCluster.stop(FlinkMiniCluster.scala:408)
at org.apache.flink.client.LocalExecutor.stop(LocalExecutor.java:127)
at org.apache.flink.client.LocalExecutor.executePlan(LocalExecutor.java:195)
at org.apache.flink.api.java.LocalEnvironment.execute(LocalEnvironment.java:91)
at org.apache.flink.api.java.ExecutionEnvironment.execute(ExecutionEnvironment.java:923)
at org.apache.flink.api.java.DataSet.collect(DataSet.java:410)
at org.apache.flink.simpleCSV.run(simpleCSV.java:83)
我该如何解决这个问题?以编程方式增加此超时?或者我应该在某处放置配置文件?是否存在我应根据文件大小设置的特定堆大小?
答案 0 :(得分:2)
collect()
将数据从群集传输到本地客户端。这仅适用于非常小的数据集(<10 MB)。
如果您有更大的数据集,则需要在群集上处理它们并通过输出格式发出结果,例如将其写入文件。
答案 1 :(得分:0)
如果您正在调试此程序,可以在org.apache.flink.api.java.LocalEnvironment(带有config的构造函数)的构造函数中设置断点,并运行以下命令将超时更改为200秒( IntelliJ Idea中的Alt + F8):
config.setString("akka.ask.timeout", "200 s")
要在IntelliJ Idea中查找LocalEnvironment类,请按Ctr + n,然后选中“在弹出窗口中包含非项目类,然后在编辑框中键入”LocalEnvironment“。