本文主要是介绍三、Spark性能调优——并行度调节,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
val conf = new SparkConf()
.set("spark.default.parallelism", "500")
Spark 作业中的并行度指各个 stage 的 task 的数量。
如果并行度设置不合理而导致并行度过低, 会导致资源的极大浪费,例如, 20个 Executor,每个 Executor 分配 3 个 CPU core, 而 Spark 作业有 40 个 task, 这样每个 Executor 分配到的 task 个数是 2 个, 这就使得每个 Executor 有一个 CPU core 空闲, 导致资源的浪费。
理想的并行度设置,应该是让并行度与资源相匹配, 简单来说就是在资源允许的前提下,并行度要设置的尽可能大, 达到可以充分利用集群资源。 合理的设置并行度, 可以提升整个 Spark 作业的性能和运行速度。
Spark 官方推荐, task 数量应该设置为 Spark 作业总 CPU core 数量的 2~3 倍。之所以没有推荐 task 数量与 CPU core 总数相等, 是因为 task 的执行时间不同, 有的 task 执行速度快而有的 task 执行速度慢, 如果 task 数量与 CPU core 总数相等,那么执行快的 task 执行完成后, 会出现 CPU core 空闲的情况。如果 task 数量设置为 CPU core 总数的 2~3 倍,那么一个 task 执行完毕后, CPU core 会立刻执行下一个 task,降低了资源的浪费,同时提升了 Spark 作业运行的效率。
SparkSql 并行度调节
在代码中直接设定
val spark = SparkSession.builder().config("spark.sql.shuffle.partitions",100)//设置并行度100.getOrCreate()
在提交的时候提供参数修改,注意 代码中的优先级高于提交时的优先级
./bin/spark-submit \
--class com.imooc.log.TopNStatJobYARN \
--name TopNStatJobYARN \
--master yarn \
--executor-memory 1G \
--num-executors 1 \
--conf spark.sql.shuffle.partitions=100 \
/home/hadoop/lib/sql-1.0-jar-with-dependencies.jar \
hdfs://hadoop001:8020/imooc/clean 20170511
这篇关于三、Spark性能调优——并行度调节的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!