【问题标题】:Number of tasks while reading HDFS in Spark在 Spark 中读取 HDFS 时的任务数
【发布时间】:2021-09-05 18:06:08
【问题描述】:

ORC格式的非格式化表中有200个文件。每个文件大约 170KB。总大小大约 33MB。

想知道为什么读表的 spark 阶段会生成 7 个任务。该作业被分配了一个具有 5 个核心的执行器。

【问题讨论】:

  • 每个分区的任务。
  • 但问题是为什么有7个分区。我的理解是它应该有与文件数量一样多的分区,或者它应该有每 128MB 数据的分区。这些都不是这里的情况。
  • 显示火花用户界面。
  • @thebluephantom 添加了有问题的 Spark UI

标签: apache-spark


【解决方案1】:

Spark 将文件映射到分区的方式非常复杂,但有 2 个主要配置选项会影响创建的分区数量:

spark.sql.files.maxPartitionBytes 默认为 128 MB,并设置可拆分源的最大分区大小。所以如果你有一个 2 GB 的 ORC 文件,你最终会得到 16 个分区。

spark.sql.files.openCostInBytes 默认为 4 MB,用作创建新分区的成本,这基本上意味着如果文件小于 4MB,Spark 会将文件连接到相同的分区中。 如果您有很多小的可拆分文件,默认情况下您最终会得到大约 4MB 大小的分区,这就是您的情况。

如果您有不可拆分的源,例如 gzip 压缩文件,它们将始终位于单个分区中,无论其大小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 2017-08-07
    • 2021-06-18
    • 1970-01-01
    相关资源
    最近更新 更多