【发布时间】:2021-07-11 22:46:51
【问题描述】:
我遇到了性能问题,在分析 Spark Web UI 后,我发现它似乎是数据偏斜:
最初我认为分区不是均匀分布的,所以我对每个分区的行数进行了分析,但看起来很正常(没有异常值): how to manually run pyspark's partitioning function for debugging
但问题仍然存在,我看到有一个执行程序处理大部分数据:
所以现在的假设是分区不是均匀分布在执行者之间,问题是:spark如何将分区分配给执行者?和我怎样才能改变它解决我的偏斜问题?
代码很简单:
hive_query = """SELECT ... FROM <multiple joined hive tables>"""
df = sqlContext.sql(hive_query).cache()
print(df.count())
更新 发布此问题后,我进行了进一步分析,发现有 3 个表导致此问题,如果将它们删除,则数据均匀分布在执行器中并且性能提高,所以我添加了 spark sql hint /*+ BROADCASTJOIN(
为什么这个表(包括一个小的 6 行表)在添加到查询时会导致执行器之间的这种不均匀分布?
【问题讨论】:
-
您能分享一个您尝试执行的代码示例吗?似乎只创建了 4 个分区,而您想要更多,因此可以更均匀地分配工作负载。
-
您确实需要发布截屏时正在运行的代码,以便人们帮助回答您的问题。
标签: python apache-spark pyspark