我是用 Flink 的 DataSet API 去读取文件,用的 Hadoop Compatability 里 Hadoop 的 FileInputFormat,发现在创建分片的 getSplits()方法里,会去遍历每一个文件获取 block locations,有 10 万个文件的话就得发 10 万次请求,所以任务初始化非常慢,请问一下有什么好的解决办法么?
1
F281M6Dh8DXpD1g2 2020 年 8 月 21 日 via iPhone
合并小文件呗
|
2
billlee 2020 年 8 月 21 日
HDFS 本来就不适合存小文件
|
3
ysn2233 OP @billlee 文件也不小但是多,但是初始化慢就是一个循环对每个文件都要去发次 rpc 请求获取一个文件的 block 位置,如果能只发一次请求返回所有相关文件的位置信息感觉就快很多。
|
4
kex0916 2020 年 8 月 24 日
把文件合并下,或者把读取文件过程拆分成多个任务跑,最后再 union 起来
|