spark-submit 标准来设置参数值

Posted

技术标签:

【中文标题】spark-submit 标准来设置参数值【英文标题】:spark-submit criteria to set parameter values 【发布时间】:2021-01-19 20:14:44 【问题描述】:

在设置以下 spark-submit 参数时,我对使用正确的标准感到非常困惑,例如:

spark-submit --deploy-mode cluster --name 'CoreLogic Transactions Curated $var_date' \
--driver-memory 4G --executor-memory 4G --num-executors 10 --executor-cores 4 \
/etl/scripts/corelogic/transactions/corelogic_transactions_curated.py \
--from_date $var_date \
--to_date $var_to_date 

有人告诉我,我使用了很多执行器和内核,但他没有解释他为什么这么说。

有人可以根据我的数据集向我解释设置这些参数时使用的正确标准吗(--driver-memory 4G --executor-memory 4G --num-executors 10 --executor-cores 4) ?

以下情况相同

spark = SparkSession.builder \
    .appName('DemoEcon PEP hist stage') \
    .config('spark.sql.shuffle.partitions', args.shuffle_partitions) \
    .enableHiveSupport() \
    .getOrCreate()

我不太确定用于设置此参数“spark.sql.shuffle.partitions”的标准是什么

有人能帮我把这件事弄清楚吗?

提前谢谢你

【问题讨论】:

您可以找到几篇讨论所有这些的 SO 帖子。示例:How to set Apache Spark Executor memory、***.com/questions/32349611/… 谢谢@blackbishop,我会审核的。 【参考方案1】:

在这个网站上有我需要的答案,一个很好的解释,还有一些例子。

http://site.clairvoyantsoft.com/understanding-resource-allocation-configurations-spark-application/

这是其中一个例子:

案例 1 硬件 – 6 个节点,每个节点有 16 个内核,64 GB RAM 首先在每个节点上,操作系统和 Hadoop 守护进程需要 1 个内核和 1 GB,因此每个节点有 15 个内核和 63 GB RAM

我们从如何选择核心数开始:

核心数 = 执行器可以运行的并发任务

所以我们可能会认为,每个执行器的并发任务越多,性能越好。但研究表明,任何具有超过 5 个并发任务的应用程序都会导致显示效果不佳。所以最优值为 5。

这个数字来自执行器运行并行任务的能力,而不是来自系统有多少核心。因此,即使 CPU 中有双 (32) 个内核,数字 5 也保持不变

执行者数量:

进入下一步,每个执行程序有 5 个核心,一个节点 (CPU) 中的可用核心总数为 15 - 我们每个节点有 3 个执行程序,即 15/5。我们需要计算每个节点上的执行者数量,然后得到作业的总数。

所以有 6 个节点,每个节点有 3 个执行器——我们总共有 18 个执行器。在 18 个中,我们需要 1 个执行器(java 进程)用于 YARN 中的 Application Master。所以最终数量是 17 个执行者

这 17 是我们在从 spark-submit shell 命令运行时使用 –num-executors 给 spark 的数字

每个执行者的内存:

从上面的步骤,我们每个节点有 3 个执行器。每个节点上的可用 RAM 为 63 GB

因此每个节点中每个执行程序的内存为 63/3 = 21GB。

但是,也需要少量内存开销来确定每个执行程序对 YARN 的完整内存请求。

该开销的公式是 max(384, .07 * spark.executor.memory)

计算开销:0.07 * 21(这里的 21 是按照上面的 63/3 计算的)= 1.47

由于 1.47 GB > 384 MB,开销为 1.47

从上面的每个 21 中取上面 => 21 – 1.47 ~ 19 GB

所以执行器内存 – 19 GB

最终数字 - 执行器 - 17,核心 5,执行器内存 - 19 GB

【讨论】:

以上是关于spark-submit 标准来设置参数值的主要内容,如果未能解决你的问题,请参考以下文章

Spark-submit参数优化配置

Spark-submit参数优化配置

怎么给参数赋两个值

我用ABAP可以在SAP标准屏幕中设置默认值吗?比如

ChannelOption用到的socket的标准参数

DB2 选择设置参数,然后用参数值插入