1.spark.default.parrallelism
2.textFile()传入第二个参数,指定partition数量面试
好比:你的第一个stage,用spark sql从hive表中查询了一些数据,而后作了一些transformation操做,接着作了一个shuffle操做(例如groupByKey);下一个stage,在stage以后,作了一些transformation操做。
hive表,对应了一个hdfs文件,有20个block;你本身设置了spark.default.parallelish参数为100;
你的第一个stage的并行度,是不受你设置的参数控制的,就只有20task;第二个stage的并行度,才是你本身设置的100;
这样会产生的问题就是:在第一个stage中,可能有很是复杂的业务逻辑或者算法,若是只有默认的20个并行度的话,每一个task要处理很大的数据量,这就会致使第一个stage执行的速度特别慢。而第二个就很快。算法
dataFrame.repartition(10)sql
dataFrame.repartition($"name")大数据
dataFrame.repartition(100,$"name")优化
专为大数据面试而生spa
一系列的spark,flink优化文章在等你呢~orm