【问题标题】:SparkException: Job 2 cancelled because SparkContext was shut down, Spark Yarn handling large datasetSparkException:Job 2 由于 SparkContext 已关闭而取消,Spark Yarn 处理大型数据集
【发布时间】:2020-11-21 00:40:50
【问题描述】:

我通过 Google Dataproc 在 Spark 集群上运行 hail0.1。

我成功运行了 1 Tb 数据集,导入 vcf 并写入 vds。 当我尝试运行 3 Tb 数据集时,使用相同的代码,它报告:SparkException: Job 2 cancelled because SparkContext was shut down 我猜这是 OOM 异常,因此我升级 drive.mem 和 executor.mem,仍然报告相同的错误,但它完成了更多任务。 (第一次在 10000/600000 左右终止,第二次在 30000/60000 终止)

这里有哪些故障排除步骤?我想我的 driver 和 executor mem 已经很高了。

第一次集群配置:

Master node
Standard (1 master, N workers)
Machine type
n1-highmem-32
Number of GPUs
0
Primary disk type
pd-standard
Primary disk size
200GB
Local SSDs
0
Worker nodes
4
Machine type
n1-highmem-16
Number of GPUs
0
Primary disk type
pd-standard
Primary disk size
100GB
Local SSDs
1
Secondary worker nodes
10
Machine type
n1-highmem-16
Number of GPUs
0
Primary disk type
pd-standard
Primary disk size
100GB
Local SSDs
0
Preemptible
true
Properties
distcp:mapreduce.map.java.opts
-Xmx1664m
distcp:mapreduce.map.memory.mb
2048
distcp:mapreduce.reduce.java.opts
-Xmx1664m
distcp:mapreduce.reduce.memory.mb
2048
hdfs:dfs.namenode.handler.count
80
hdfs:dfs.namenode.service.handler.count
40
hdfs:dfs.replication
1
mapred-env:HADOOP_JOB_HISTORYSERVER_HEAPSIZE
4000
mapred:mapreduce.map.cpu.vcores
1
mapred:mapreduce.map.java.opts
-Xmx3276m
mapred:mapreduce.map.memory.mb
4096
mapred:mapreduce.reduce.cpu.vcores
2
mapred:mapreduce.reduce.java.opts
-Xmx8192m
mapred:mapreduce.reduce.memory.mb
10240
mapred:yarn.app.mapreduce.am.command-opts
-Xmx8192m
mapred:yarn.app.mapreduce.am.resource.cpu-vcores
2
mapred:yarn.app.mapreduce.am.resource.mb
10240
spark-env:SPARK_DAEMON_MEMORY
4000m
spark:spark.driver.extraJavaOptions
-Xss4M
spark:spark.driver.maxResultSize
60g
spark:spark.driver.memory
200g
spark:spark.executor.cores
8
spark:spark.executor.extraJavaOptions
-Xss4M
spark:spark.executor.memory
37237m
spark:spark.kryoserializer.buffer.max
1g
spark:spark.task.maxFailures
20
spark:spark.yarn.am.memory
37237m
spark:spark.yarn.am.memoryOverhead
3723
spark:spark.yarn.executor.memoryOverhead
3723
yarn-env:YARN_NODEMANAGER_HEAPSIZE
4000
yarn-env:YARN_RESOURCEMANAGER_HEAPSIZE
4000
yarn-env:YARN_TIMELINESERVER_HEAPSIZE
4000
yarn:yarn.nodemanager.resource.memory-mb
81920
yarn:yarn.scheduler.maximum-allocation-mb
81920
yarn:yarn.scheduler.minimum-allocation-mb
2048

我第二次升级master节点到n1-highmem-96,工作节点到n1-highmem-32,spark.driver.memory 600g,spark.driver.maxResultSize 180g,其他设置由Yarn自动调整。

【问题讨论】:

    标签: apache-spark pyspark hadoop-yarn google-cloud-dataproc


    【解决方案1】:

    你的工作需求取决于工作做什么,比如它是否进行重新分区、分组或按键归约等。

    在可扩展配置的作业中,理想情况下运行驱动程序的主机不需要大量内存。一些常见的陷阱有时会导致主节点上的空间使用量过大:

    1. 不小心在 Spark 代码中显式设置了 .setMaster("local[*]"),这可能是出于本地测试目的的保留 - 这会告诉 Spark 以单节点模式运行,即使完整的分布式集群可用
    2. 在庞大的分布式数据集上调用“collect()”
    3. 在任何分布式数据帧或 RDD 操作之外的主程序中执行显式处理逻辑。

    您应该确保您的工作人员实际上得到了分配给他们的任何工作,而不是仅仅因为上面列出的原因之一而在您的主节点中出现瓶颈。

    如果您的工作人员确实在工作,则可能不是导致问题的主节点 OOM。查看您的配置,对于数据集大小,您的磁盘似乎非常小。如果一项工作绝对是“仅限地图”,这有时是可以的,但在几乎所有情况下,从成本的角度来看,向所有节点添加更大的磁盘会更好,因为Google Compute Engine disk performance scales up with its size。而且由于即使是 2000GB 的 pd 标准每小时也只花费大约 2 个 CPU,如果您正在运行非常大的机器,例如 96 核 highmem 实例,消除任何磁盘性能瓶颈几乎肯定会为您节省时间和金钱从长远来看(例如,在 96 核机器上,从 100GB 升级到 2000GB 甚至可以提高 2% 的性能,额外的磁盘成本超过了自身的成本)。

    如果发生任何重新分区、分组等,那么您的工作人员将依赖本地磁盘来获取暂存/随机播放空间。在这种情况下,如果您的总磁盘空间小于所需的 shuffle 数据工作集,您的作业将不会成功。总的来说,将所有节点上的磁盘空间增加到 2000GB 可能是解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-02
      • 2014-08-09
      • 1970-01-01
      • 2021-01-18
      • 2023-04-02
      • 2017-12-11
      • 2018-03-31
      相关资源
      最近更新 更多