为啥我只看到分阶段的 200 个任务?
Posted
技术标签:
【中文标题】为啥我只看到分阶段的 200 个任务?【英文标题】:Why do I see only 200 tasks in stages?为什么我只看到分阶段的 200 个任务? 【发布时间】:2016-11-22 16:12:16 【问题描述】:我有一个带有 8 台机器、256 个内核、每台机器 180Gb 内存的 spark 集群。我已经启动了 32 个执行程序,每个执行程序有 32 个内核和 40Gb 内存。
我正在尝试优化一个复杂的应用程序,我注意到很多阶段都有 200 个任务。在我的情况下,这似乎不是最理想的。我尝试将参数 spark.default.parallelism 设置为 1024,但似乎没有效果。
我运行 spark 2.0.1,在独立模式下,我的驱动程序托管在运行 pycharm 调试会话内的工作站上。我已将 spark.default.parallelism 设置为:
工作站上的 spark-defaults.conf 集群 spark/conf 目录上的 spark-defaults.conf 在调用我的上构建 SparkSession 司机这就是电话
spark = SparkSession \
.builder \
.master("spark://stcpgrnlp06p.options-it.com:7087") \
.appName(__SPARK_APP_NAME__) \
.config("spark.default.parallelism",numOfCores) \
.getOrCreate()
自从进行这些更改后,我已经重新启动了执行程序。
如果我理解正确的话,一个阶段只有 200 个任务意味着我的集群没有被充分利用?
当我使用 htop 观察机器时,我可以看到我没有得到完整的 CPU 使用率。可能一次在一台机器上,但不是在所有机器上。
我需要在我的数据帧上调用 .rdd.repartition(1024) 吗?在任何地方都这样做似乎是一种负担。
【问题讨论】:
尝试在此配置中设置: set("spark.sql.shuffle.partitions", "8") 其中 8 是您要创建的分区数 Number reduce tasks Spark的可能重复 但是为什么你只想使用8?据我所知,它应该等于或高于同时运行的任务数。 因此,对于发现此问题的任何其他人,将每个执行程序的核心数调整为 8 并且 spark.sql.shuffle.partitions=256 在我的情况下提供了最佳性能。 【参考方案1】:尝试在此配置中设置:
set("spark.sql.shuffle.partitions", "8")
其中 8 是您要创建的分区数。
【讨论】:
【参考方案2】:或 SparkSession, .config("spark.sql.shuffle.partitions", "2")
【讨论】:
以上是关于为啥我只看到分阶段的 200 个任务?的主要内容,如果未能解决你的问题,请参考以下文章
网络空间安全中职重庆市比赛赛题解析分析四个阶段解析答案(共五套题)第三套题目
网络空间安全中职重庆市比赛赛题解析分析四个阶段解析答案(共五套题)第四套题目
网络空间安全中职重庆市比赛赛题解析分析四个阶段解析答案(共五套题)第四套题目