【发布时间】:2017-10-09 07:03:41
【问题描述】:
我可以拥有多达 10 万个小文件(每个 10-50 KB)。它们都存储在 HDFS 中,块大小为 128 MB。我必须使用 Apache Spark 立即阅读它们,如下所示:
// return a list of paths to small files
List<Sting> paths = getAllPaths();
// read up to 100000 small files at once into memory
sparkSession
.read()
.parquet(paths)
.as(Encoders.kryo(SmallFileWrapper.class))
.coalesce(numPartitions);
问题
The number of small files is not a problem from the perspective of memory consumption。问题是读取这么多文件的速度。读取490个小文件需要38秒,读取3420个文件需要266秒。我想读取 100.000 个文件需要很多时间。
问题
HAR 或序列文件会加快 Apache Spark 批量读取 10k-100k 小文件的速度吗?为什么?
HAR 或序列文件会减慢小文件的持久化速度吗?为什么?
附言
批量读取是小文件唯一需要的操作,我不需要通过 id 或其他任何方式读取它们。
【问题讨论】:
-
Hadoop 有一个标准的解决方法,通常在 Hive 中用于读取小型“流式”文件(参见我在您上一个问题中的评论),您不是第一个偶然发现该问题的 Spark-ikaze - - 参见。 stackoverflow.com/questions/24623402/…
标签: java apache-spark hdfs