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