spark如何确定任务数量?

Posted

技术标签:

【中文标题】spark如何确定任务数量?【英文标题】:How does spark determine the number of tasks? 【发布时间】:2016-11-18 14:33:03 【问题描述】:

在读取大量文本文件时,Spark 创建的任务数量让我有点困惑。

代码如下:

val files = List["path/to/files/a/23", 
                 "path/to/files/b/", 
                 "path/to/files/c/0"]
val ds = spark.sqlContext.read.textFile(files :_*)
ds.count()

每个文件夹 a, b, c 包含 24 个文件,因此从读取完整的 b 文件夹开始,总共有 26 个文件。现在,如果我执行一个操作,例如.count(),Spark UI 会显示有 24 个任务。但是,我原以为有 26 个任务,每个分区 1 个任务,每个文件 1 个分区。

如果有人能给我更多关于实际发生的事情的见解,那就太好了。

【问题讨论】:

您用于这项工作的内核总数是多少?你有没有设置任何配置? 为了便于理解。你能发布你的代码和你的 Spark ui 详细信息吗? @SimonSchiff 我使用了 8 个内核,但我没有任何配置我知道。不过,这似乎是正确的方向。我尝试在更大的机器上执行代码,它有预期的 26 个任务。 【参考方案1】:

文本文件使用 Hadoop 格式加载。分区数取决于:

mapreduce.input.fileinputformat.split.minsize mapreduce.input.fileinputformat.split.maxsize minPartitions 参数(如果提供) 块大小 压缩(如果存在)(可拆分/不可拆分)。

您可以在此处找到示例计算:Behavior of the parameter "mapred.min.split.size" in HDFS

【讨论】:

以上是关于spark如何确定任务数量?的主要内容,如果未能解决你的问题,请参考以下文章

如何确定 Apache Spark 数据帧中的分区大小

如何确定线程池中线程数量

如何使火花同时运行作业中的所有任务?

spark数据分区数量的原理

如何查看hadoop mapreduce 性能

Spark Executor数量设置