【问题标题】:spark on yarn cluster creates a spark job with the number of workers that is much smaller than what is specified in the spark context纱线集群上的火花创建一个火花作业,其工人数量远小于火花上下文中指定的数量
【发布时间】:2020-06-09 19:31:26
【问题描述】:

纱线集群上的 Spark 创建了一个 Spark 作业,其工作人员的数量(只有 4 个工作人员)远小于 Spark 上下文中指定的数量(100): 这是我创建火花上下文和会话的方法:

config_list = [
    ('spark.yarn.dist.archives','xxxxxxxxxxx'),
    ('spark.yarn.appMasterEnv.PYSPARK_PYTHON','xxxxxxxxx'),
    ('spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON','xxxxxxxxxxx'),
    ('spark.local.dir','xxxxxxxxxxxxxxxxxx'),
    ('spark.submit.deployMode','client'),
    ('spark.yarn.queue','somequeue'),
    ('spark.dynamicAllocation.minExecutors','100'),
    ('spark.dynamicAllocation.maxExecutors','100'),
    ('spark.executor.instances','100'),
    ('spark.executor.memory','40g'),
    ('spark.driver.memory','40g'),
    ('spark.yarn.executor.memoryOverhead','10g')
]

conf = pyspark.SparkConf().setAll(config_list)

spark = SparkSession.builder.master('yarn')\
    .config(conf=conf)\
    .appName('myapp')\
    .getOrCreate()

sc = spark.sparkContext

希望有任何想法

【问题讨论】:

  • 即使指定min executors为100,如果你的集群总共只有4个节点(包括master和worker),也无法指定100个executors。
  • 我同意 Ashwin Agrawal 的观点。指定集群总共有多少个节点、每个节点有多少个核心和多少内存会很有用。

标签: python apache-spark pyspark hadoop-yarn


【解决方案1】:

如果您指定最小工作程序节点大于等于集群中实际工作程序/执行程序的数量,则 Spark 会话将在您的作业运行时分配最大数量的可用工作程序节点。

您还可以通过查看会话中分配的执行程序数量来验证这一点,方法如下:

sc._conf.get('spark.executor.instances')

希望你能理解

【讨论】:

  • 我明白了,随着时间的推移,我在集群上的 spark 作业确实会动态分配更多的工人。不过奇怪的是,即使该工作有更多的工人,并发作业/进程的最大数量似乎只固定在 4 个(我开始工作时可用的工人数量)。有没有办法动态调整 spark/yarn 集群上作业的最大并发进程数,使其随着工人数量的增加而增加?
猜你喜欢
  • 2016-10-11
  • 1970-01-01
  • 2018-02-22
  • 2014-12-17
  • 1970-01-01
  • 2023-03-09
  • 2017-12-25
  • 2017-08-27
  • 1970-01-01
相关资源
最近更新 更多