簡體   English   中英

滿負荷使用 PySpark

[英]Use PySpark at full capacity

我在使用 Compute Engine 的 Google Dataproc 上有一個 Spark 集群。 該集群有 1 個具有 4 個內核和 16GB RAM 的主節點和 5 個具有 8 個內核和 32GB RAM 的 Worker 節點。

運行SparkConf().getAll()時,我得到以下結果:

[('spark.eventLog.enabled', 'true'),
 ('spark.dynamicAllocation.minExecutors', '1'),
 ('spark.driver.maxResultSize', '2048m'),
 ('spark.executor.memory', '12859m'),
 ('spark.yarn.am.memory', '640m'),
 ('spark.executor.cores', '4'),
 ('spark.eventLog.dir',
  'gs://dataproc-temp-europe-west1-907569830041-jsgvqmyn/0255e376-31c9-4b52-8e63-a4fe6188eba3/spark-job-history'),
 ('spark.executor.instances', '2'),
 ('spark.yarn.unmanagedAM.enabled', 'true'),
 ('spark.submit.deployMode', 'client'),
 ('spark.extraListeners',
  'com.google.cloud.spark.performance.DataprocMetricsListener'),
 ('spark.driver.memory', '4096m'),
 ('spark.sql.cbo.joinReorder.enabled', 'true'),
 ('spark.sql.autoBroadcastJoinThreshold', '96m'),
 ('spark.shuffle.service.enabled', 'true'),
 ('spark.metrics.namespace',
  'app_name:${spark.app.name}.app_id:${spark.app.id}'),
 ('spark.scheduler.mode', 'FAIR'),
 ('spark.yarn.historyServer.address', 'congenial-sturdy-bassoon-m:18080'),
 ('spark.sql.adaptive.enabled', 'true'),
 ('spark.yarn.jars', 'local:/usr/lib/spark/jars/*'),
 ('spark.scheduler.minRegisteredResourcesRatio', '0.0'),
 ('spark.hadoop.hive.execution.engine', 'mr'),
 ('spark.app.name', 'PySparkShell'),
 ('spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version', '2'),
 ('spark.dynamicAllocation.maxExecutors', '10000'),
 ('spark.ui.proxyBase', '/proxy/application_1663842742689_0013'),
 ('spark.master', 'yarn'),
 ('spark.ui.port', '0'),
 ('spark.sql.catalogImplementation', 'hive'),
 ('spark.rpc.message.maxSize', '512'),
 ('spark.executorEnv.OPENBLAS_NUM_THREADS', '1'),
 ('spark.submit.pyFiles', ''),
 ('spark.yarn.isPython', 'true'),
 ('spark.dynamicAllocation.enabled', 'true'),
 ('spark.ui.showConsoleProgress', 'true'),
 ('spark.history.fs.logDirectory',
  'gs://dataproc-temp-europe-west1-907569830041-jsgvqmyn/0255e376-31c9-4b52-8e63-a4fe6188eba3/spark-job-history'),
 ('spark.sql.cbo.enabled', 'true')]

我不明白為什么當我有32g PER WORKER 時參數spark.executor.memory設置為12859mspark.executor.cores也是如此,當我的每個工人都有8個核心時設置為4

使用少量資源是否正常,或者我應該在啟動我的 sparkSession 時設置它? 我現在使用的代碼是:

spark = SparkSession \
    .builder \
    .appName('my_app') \
    .getOrCreate()

我讀了一些關於yarn.nodemanager.resource.memory-mb內容,但我不確定它是否適用於 PySpark 集群。

預先感謝您的幫助

編輯:為了添加更多上下文,我正在嘗試從 Google Cloud Storage 讀取 10M+ Json 文件,無論我嘗試什么,我最終都會遇到來自 JVM 的 OOM 錯誤,有什么我可以專門設置來解決這類問題嗎?

理想情況下,您可以在單個執行程序中使用多達 75% 到 80% 的資源。 假設您有一個 8 核和 16GB RAM 的執行程序 - 您可以使用大約 6 個核和 12GB RAM 來運行 spark(將剩余資源留給該 VM 或 pod 的其他操作,如 OS、mem alloc 等)。

This doc has details around how to size executors for spark - https://spoddutur.github.io/spark-notes/distribution_of_executors_cores_and_memory_for_spark_application.html#:~:text=Leave%201%20core%20per%20node, )%20%3D %20150%2F5%20%3D%2030

您可以在您的 spark 配置中使用這些參數 - --num-executors, --executor-cores and --executor-memory ,您可以使用您的 spark 作業並查看哪些配置和基礎設施適合您的用例。

暫無
暫無

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

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