我使用readTextFile(/ path / to / dir)来读取批量文件,对这些行进行一些操作并将它们保存到cassandra。
一切似乎都运行得很好,直到我在目录中达到170多个文件(成功运行后文件被删除)。 现在我收到" IOException:太多打开文件",快速查看lsof我看到一旦运行我的代码就会打开数千个文件描述符。 几乎所有的文件描述符都是" Sockets"。
在只有10个文件的较小规模上进行测试会导致打开超过4000个文件描述符,一旦脚本完成,所有文件描述符都将关闭并恢复正常。
这是flink的正常行为吗?我应该增加ulimit吗?
一些说明: 环境是带有java 8的Tomcat 7,使用DataSet API的flink 1.1.2。 Flink的工作安排在石英。
所有这170多个文件总和约为5MB。
答案 0 :(得分:1)
问题解决了。
在缩小代码之后,我发现在高度并行的“map()”步骤中使用“Unirest.setTimeouts”会导致过多的线程分配,从而消耗了我的所有文件描述符。