Spark任务并行度分析

导读:本篇文章讲解 Spark任务并行度分析,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

优化 Spark 应用的一个主要手段就是合理设置任务执行的并行度,尽可能的利用集群资源
,从而提高执行效率。而影响 spark 并行度的因素主要有如下几个:

RDD 的分区数(Partition )

Spark 应用默认会为每一个 RDD 分区创建一个 Task, 所以输入 RDD 的分区数直接影响待
分配的 Task 总数,Task 任务数如果少于分配的计算资源(cores ),则可能造成部分资
源没有充分得到利用。

不同计算场景下的分区数

  • 文件输入类的如 textFile 等操作,默认的分区数 = 输入文件的大小 /
    dfs.block.size, 意思是 Spark 默认会尽可能确保一个分区仅包含一个 HDFS BLOCK 的
    数据,增加 dfs.block.size 可以降低分区数 / Task 数(但是增加了每个任务的处理
    数据量),反之则相反。textFile 也支持附带一个分区数量的参数,手工指定分区数。
  • 涉及 shuffle 的操作(join,reduceByKey 等),默认的分区数为父级 RDD 的最大分区
    数。也可以设置 spark.default.parallelism 参数来指定默认的分区数
  • 手工指定分区数,不管是什么操作,都可以通过 repartition 来对 RDD 重新进行分区,
    增加或减少分区数。如果仅仅是减少分区数,建议使用 coalesce 操作替代。

分区数的最佳实践

  • Spark 建议每个 CPU CORE 分配 2-3 个任务,意味着最佳分区数 =2 excutorNum in
    Cluster available cores per Excutor
  • 观察每个 Task 在 Excutor 中的执行时间,如果时间很短(小于 1S),说明每个 Task
    的计算量太小了,此时应通过设置降低 Task 数量,提高单个 Task 的计算量; 否则用
    于任务切换和序列化的开销将大大增加。

计算资源的分配

Spark 一次能并行处理的任务由两个方面决定:

  • 集群中 excutor 的数量:由于 Driver 不负责具体的任务执行,所以并行度仅与集群中
    Excutor 数量相关;
  • 每个 Excutor 中可用的 CPU CORE 数量,该数量由配置参数 spark.executor.cores 决
    定,该参数在 Yarn 模式默认是 1,在 standalong 模式下默认是本机的所有可用
    core;

参考资料

http://www.bigsynapse.com/spark-input-output

http://spark.apache.org/docs/1.6.0/programming-guide.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/15728.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!