Spark节点继续打印GC(分配失败),并且没有任务运行

Eri*_*ows 5 hadoop scala apache-spark livy

我正在使用Scala运行Spark作业,但由于工作节点无法执行和执行任务而陷入困境。

目前,我将此提交给Livy,后者将使用以下配置将其提交给我们的Spark集群,该集群具有8个内核和12GB RAM:

data={
    'file': bar_jar.format(bucket_name),
    'className': 'com.bar.me',
    'jars': [
        common_jar.format(bucket_name),
    ],
    'args': [
        bucket_name,
        spark_master,
        data_folder
    ],
    'name': 'Foo',
    'driverMemory': '2g',
    'executorMemory': '9g',
    'driverCores': 1,
    'executorCores': 1,
    'conf': {
        'spark.driver.memoryOverhead': '200',
        'spark.executor.memoryOverhead': '200',
        'spark.submit.deployMode': 'cluster'
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,节点日志将被不断填充:

2019-03-29T22:24:32.119+0000: [GC (Allocation Failure) 2019-03-29T22:24:32.119+0000:
[ParNew: 68873K->20K(77440K), 0.0012329 secs] 257311K->188458K(349944K), 
0.0012892 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
Run Code Online (Sandbox Code Playgroud)

问题在于下一个阶段和任务没有执行,因此行为是出乎意料的。 任务无法运行

小智 7

这显然是一个正常的 GC 事件:

\n
\n

这个 \xe2\x80\x98Allocation failure\xe2\x80\x99 日志不是错误,而是 JVM 中完全正常的情况。这是一个典型的 GC 事件,它会导致 Java 垃圾收集过程被触发。垃圾收集会删除死对象,压缩回收的内存,从而有助于释放内存以用于新的对象分配。

\n
\n

来源:https ://medium.com/@technospace/gc-allocation-failures-42c68e8e5e04

\n

编辑:如果接下来的阶段没有执行,也许您应该检查stderr而不是stdout.

\n


sam*_*977 4

以下链接提供了有关如何分配执行程序内存的描述

https://aws.amazon.com/blogs/big-data/best-practices-for-successively-managing-memory-for-apache-spark-applications-on-amazon-emr/

我发现它非常有用,但发现以下参数

  1. Spark.默认并行度
  2. Spark.sql.shuffle.partitions

需要根据我们的应用程序要求进行更新