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

时间:2019-03-29 22:33:18

标签: scala apache-spark hadoop 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'
    }
}

然后,节点日志不断被填充: 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]

问题在于下一个阶段和任务没有执行,因此行为是非常意外的。 Tasks won't run

2 个答案:

答案 0 :(得分:1)

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

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

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

  1. spark.default.parallelism
  2. spark.sql.shuffle.partitions

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

答案 1 :(得分:1)

这显然是正常的GC事件:

此“分配失败”日志不是错误,而是在JVM中完全正常的情况。这是一个典型的GC事件,导致触发Java垃圾收集过程。垃圾收集可以删除死对象,压缩回收的内存,从而有助于释放内存以分配新的对象。

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

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