数量减少任务Spark

时间:2015-10-23 08:12:46

标签: apache-spark apache-spark-sql

Spark用于计算减少任务数量的公式是什么?

我正在运行几个spark-sql查询,reduce任务的数量总是200.这些查询的map任务数量是154.我在Spark 1.4.1上。

这与spark.shuffle.sort.bypassMergeThreshold有关,默认为200

4 个答案:

答案 0 :(得分:23)

你所追求的是spark.sql.shuffle.partitions。根据{{​​3}}:

spark.sql.shuffle.partitions    200     Configures the number of partitions to use when shuffling data for joins or aggregations.

另一个相关的选项是spark.default.parallelism,它决定了'不是由用户'设置的转换返回的RDD中的默认分区数,例如join,reduceByKey和parallelize,但是这似乎被Spark忽略了SQL并且仅在处理普通RDD时才相关。

答案 1 :(得分:2)

是的,@ svgd,这是正确的参数。以下是在Scala中重置它的方法:

// Set number of shuffle partitions to 3
sqlContext.setConf("spark.sql.shuffle.partitions", "3")
// Verify the setting 
sqlContext.getConf("spark.sql.shuffle.partitions")

答案 2 :(得分:0)

现在在Spark 2 +中设置此参数的操作如下

spark.conf.set("spark.sql.shuffle.partitions", 16)

答案 3 :(得分:0)

通过mapreduce.input.fileinputformat.split指定最小和最大拆分大小应该会有所帮助。这些参数确定用于将输入文件拆分到的各自的最小和最大块大小。

val spark = SparkSession.builder
    .config("mapreduce.input.fileinputformat.split.minsize", "1073741824")
    .config("mapreduce.input.fileinputformat.split.maxsize", "1073741824")           
    .enableHiveSupport().getOrCreate()

此处,拆分大小已保留为1GB(1073741824字节)。 要记住,拼花地板,snappy是可拆分的,而gzip,lzo不是。请参阅更多here