编写 Spark 提交命令

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

我是 Spark 新手。

我有一个具有此配置的集群:

Number of nodes : 10
Number of cores per node : 16
Memory (RAM) per node : 64gb

这是我的火花提交命令:

spark-submit --master yarn 
    --deploy-mode cluster 
    --driver-cores 5 
    --driver-memory ??G 
    --executor-cores 5 
    --executor-memory 12G 
    --conf spark.sql.shuffle.partitions=1440
    example.py

我将驱动程序和执行程序核心设置为 5,因为我被告知这是最佳选择。为了计算执行器内存,我得到了这个公式:

executor_memory = memory_available - container_overhead
memory_available = total_memory / number_of_executors_per_node
memory_available = 64gb / 5 = 12.8 = ~13gb
container_overhead = 13gb – (7% * 13gb) = 0.91 = ~1
executor_memory = 13 – 1 => 12gb

我的问题是:

  • 计算容器开销时,如何知道要为堆开销提供多少空间?为什么是7%?
  • 如何计算driver_memory?
apache-spark pyspark apache-spark-sql spark-streaming
1个回答
0
投票

通常像这样的广泛问题(以及包含多个问题的问题帖子)在 Stackoverflow 上不受欢迎,因为:

  • 答案可能会有很大差异,可能会让原始发布者和未来的读者感到困惑
  • 固执己见,我们要避免这种情况
  • 人们只能回答你问题的一部分,使答案成为非原子的

但由于这是一个真实的问题,而且显然您一直在向自己提出一些很好的问题,所以我会给您一个答案。由于您问题的性质,您可能会留下更多问题。在这种情况下,请随意在这里提出新问题,但要让它们“好”。包括代码、有关集群的信息、Spark 版本、有关数据的信息,每个帖子仅提出 1 个问题,... 答案

您的信息来自哪里?这些问题太笼统了,如果不了解如何使用集群,您就无法真正回答这些问题。

在开始填写数字之前您需要询问一些注意事项。

您的计算会占用大量内存/CPU 吗?
  • 这将告诉您瓶颈可能在哪里
    您的司机会做什么?您会执行大量
  • .collect
  • 操作或执行许多非分布式计算吗?
    如果几乎所有代码都位于分布式数据对象(如 DataFrame)上,则您的驱动程序不会做太多事情(因此无需担心)
    • 如果您要在大对象上调用
    • .collect
    • ,您可能需要大量内存(一般情况下尽量避免这种情况)
      
      
    你会进行大量的洗牌操作吗?他们会被歪曲吗?
  • 这可能会影响您的选择
      spark.sql.shuffle.partitions
    • 连接的性质(倾斜、非等连接等)也可能对您编写的代码产生影响
    您的数据有多大?
  • 这会影响一切:)
    还有很多问题...
  • 所以总而言之,如果您不了解更多实际计算,您填写的所有数字似乎都为时过早。

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