【发布时间】:2021-05-10 14:56:32
【问题描述】:
我正在以独立模式在 aws fargate 上运行 spark 批处理作业。在计算环境中,我有8 vcpu,作业定义有 1 个 vcpu 和 2048 mb 内存。在 spark 应用程序中,我可以指定要使用的核心数量,并使用以下代码执行此操作
sparkSess = SparkSession.builder.master("local[8]")\
.appName("test app")\
.config("spark.debug.maxToStringFields", "1000")\
.config("spark.sql.sources.partitionOverwriteMode", "dynamic")\
.getOrCreate()
local[8] 指定 8 个内核/线程(这是我的假设)。
最初我在没有指定内核的情况下运行 spark 应用程序,我认为作业是在单线程中运行的,大约需要 10 分钟才能完成,但是有了这个数字,它减少了处理时间。我从 2 开始,它几乎减少到 5 分钟,然后我改为 4、8,现在几乎需要 4 分钟。但我不明白 vcpu 和 spark 线程之间的关系。无论我为内核指定的数量是多少,sparkContext.defaultParallelism 都会向我显示该值。
这是正确的方法吗? 此数字与我在作业定义或计算环境中指定的 vcpu 之间是否存在任何关系。
【问题讨论】:
标签: apache-spark pyspark aws-fargate