spark节点保持打印gc(分配失败),并且没有任务运行

ldxq2e6h  于 2021-05-27  发布在  Hadoop
关注(0)|答案(2)|浏览(461)

我正在使用scala运行spark作业,但是它无法执行工作节点的任务。
目前我将此提交给livy,livy提交给我们的spark cluster,它有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]

问题是,下一个阶段和任务没有执行,因此行为非常意外。

gxwragnw

gxwragnw1#

这显然是一个正常的gc事件:
这个“分配失败”日志不是一个错误,但在jvm中是完全正常的。这是一个典型的gc事件,它会触发java垃圾收集进程。垃圾收集会移除死对象,压缩回收的内存,从而有助于释放内存以分配新的对象。
资料来源:https://medium.com/@technospace/gc-分配故障-42c68e8e5e04
编辑:如果下一个阶段没有执行,也许你应该检查一下 stderr 而不是 stdout .

62lalag4

62lalag42#

下面的链接提供了如何分配executor内存的说明
https://aws.amazon.com/blogs/big-data/best-practices-for-successfully-managing-memory-for-apache-spark-applications-on-amazon-emr/
我发现它非常有用,但是发现以下参数
spark.default.parallelism并行性
spark.sql.shuffle.partitions分区
需要根据我们的申请要求进行更新

相关问题