Spark成功在循环运行中提交缓慢

问题描述 投票:0回答:1

我有一个程序,其中通过这样的python脚本进行多个火花提交,

# test_python_script.py
import os
for i in range(3):
    os.system('spark-submit test_spark_script.py')

在spark脚本中,我有多个spark转换,例如连接,枢轴,最后是保存在S3存储桶中。

脚本看起来像这样,

# test_spark_script.py
# start a session
spark = SparkSession.builder.appName("Test_app").getOrCreate()
df_file = spark.read.csv('file.csv')
df_file2 = spark.read.csv('file2.csv')
# Some transformations like multiple joins and pivots 
# and finally a save in S3 bucket
df_final.repartition(1).write.mode('overwrite').csv(location, sep="|", header=True, compression="none")

# stop the session
spark.stop()

问题在于,每次迭代中,火花作业都会变慢。

我无法指出问题所在,但作业数量始终保持不变,只是任务持续时间和GC时间增加。

此外,我注意到的一件非常奇怪的事情是,即使我通过杀害火花工作,

yarn application -kill <id>

下一个提交的火花也将运行缓慢。

感谢您的帮助!

python-3.x dataframe apache-spark pyspark pyspark-sql
1个回答
0
投票

您的问题分为两个部分。因此,我将它们分开以更好地解释它们。


问题1:增加应用程序数量变得越来越慢的原因是什么?

说明:您的Spark提交使用了您的所有资源,因为您尚未设置提交将使用的核心和RAM数量。因此,随着您提交的应用程序数量的增加,它们共享资源,并且性能降低。

NOTE:如果您不在S3存储桶中,并且在内部运行应用程序,那么我要说的是,您必须考虑到您在磁盘上的读写操作,并且可能会遇到应用程序中的IO瓶颈,但这不是您的情况。


问题2:为什么要杀死工作,其余的工作仍然很慢?

说明:因为当您运行多个应用程序并且资源共享时,尽管您有杀死作业,但其余的spark-submit仍继续使用原来拥有的资源。


您可以通过设置每个应用程序的资源来测试上述说明(例如,如果您有10个内核,每个应用程序提供3个内核),然后您会发现,应用程序是否一起运行并不重要。

© www.soinside.com 2019 - 2024. All rights reserved.