簡體   English   中英

如何解決火花上的紗線容器上漿問題?

[英]How to solve yarn container sizing issue on spark?

我想在YARN上啟動一些 pyspark 作業。 我有 2 個節點,每個節點 10 GB。 我可以像這樣打開 pyspark shell: pyspark

現在,當我嘗試啟動一個非常簡單的示例時:

import random
NUM_SAMPLES=1000
def inside(p):
    x, y = random.random(), random.random()
    return x*x + y*y < 1

count = sc.parallelize(xrange(0, NUM_SAMPLES)) \
             .filter(inside).count()
print "Pi is roughly %f" % (4.0 * count / NUM_SAMPLES)

結果我得到了一個很長的帶有錯誤輸出的火花日志。 最重要的信息是:

ERROR cluster.YarnScheduler: Lost executor 1 on (ip>: Container marked as failed: <containerID> on host: <ip>. Exit status 1.  Diagnostics: Exception from container-launch.  ......

后來在日志中我看到...

ERROR scheduler.TaskSetManager: Task 0 in stage 0.0 failed 1 times: aborting job
INFO cluster.YarnClientSchedulerBackend: Asked to remove non-existent executor 1
INFO spark.ExecutorAllocationManager: Existing executor 1 has been removed (new total is 0)

從我從上面的日志中收集的信息來看,這似乎是紗線中的容器大小問題。

我的yarn-site.xml文件具有以下設置:

yarn.scheduler.maximum-allocation-mb = 10240
yarn.nodemanager.resource.memory-mb = 10240

並在spark-defaults.conf包含:

spark.yarn.executor.memoryOverhead=2048
spark.driver.memory=3g

如果您想了解任何其他設置,請告訴我。

如何適當地設置紗線中的容器尺寸?
(對可以幫助我的人的賞金)

讓我首先解釋在 YARN 集群上調整 Spark 應用程序所需的基本屬性集。

注意: YARN 中的 Container 相當於 Spark 中的 Executor。 為了便於理解,您可以認為兩者是相同的。

在 yarn-site.xml 上:

yarn.nodemanager.resource.memory-mb是給定節點集群可用的總內存。

yarn.nodemanager.resource.cpu-vcores是來自給定節點的集群可用的 CPU vcores 總數。

yarn.scheduler.maximum-allocation-mb是每個紗線容器可以分配的最大內存(以 mb 為單位)。

yarn.scheduler.maximum-allocation-vcores是每個紗線容器可以分配的最大 vcores 數。

示例:如果一個節點有 16GB 和 8vcores,並且您想為集群貢獻 14GB 和 6vcores(對於容器),則設置如下所示的屬性:

yarn.nodemanager.resource.memory-mb : 14336 (14GB)

yarn.nodemanager.resource.cpu-vcores:6

並且,要創建每個具有 2GB 和 1vcore 的容器,請設置以下屬性:

yarn.scheduler.maximum-allocation-mb:2049

yarn.scheduler.maximum-allocation-vcores : 1

注意:即使有足夠的內存(14GB)來創建 7 個 2GB 的容器,上面的配置也只會創建 6 個 2GB 的容器,並且只有 14GB 中的 12GB 將用於集群。 這是因為集群只有 6 個 vcores 可用。

現在在 Spark 方面,

下面的屬性指定每個執行程序/容器要請求的內存

spark.driver.memory

spark.executor.memory

下面的屬性指定每個執行程序/容器要請求的 vcore

spark.driver.cores

spark.executor.cores

IMP: Spark 的所有內存和 vcore 屬性都應該小於或等於 YARN 的配置

下面的屬性指定了 YARN 集群中可用於 Spark 應用程序的執行程序/容器的總數。

spark.executor.instances

此屬性應小於 YARN 集群中可用的容器總數。

一旦 yarn 配置完成,spark 應該請求可以根據 YARN 配置分配的容器。 這意味着如果 YARN 配置為每個容器最多分配 2GB 並且 Spark 請求一個具有 3GB 內存的容器,那么作業將停止或停止,因為 YARN 無法滿足 Spark 的請求。

現在針對您的用例:通常,集群調優基於工作負載。 但是下面的配置應該更合適。

可用內存:10GB * 2 個節點可用 Vcor​​es :5 * 2 個 vcores [假設]

在yarn-site.xml [在兩個節點中]

yarn.nodemanager.resource.memory-mb :10240

yarn.nodemanager.resource.cpu-vcores :5

yarn.scheduler.maximum-allocation-mb :2049

yarn.scheduler.maximum-allocation-vcores : 1

使用上面的配置,您可以在每個具有 2GB,1vcore 每個容器的節點上創建最多 10 個容器。

火花配置

spark.driver.memory 1536mb

spark.yarn.executor.memoryOverhead 512mb

spark.executor.memory 1536mb

spark.yarn.executor.memoryOverhead 512mb

spark.driver.cores 1

spark.executor.cores 1

spark.executor.instances 19

請隨意使用這些配置以滿足您的需求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM