我正在使用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]
答案 0 :(得分:1)
以下链接提供了有关如何分配执行程序内存的描述
我发现它非常有用,但是发现以下参数
需要根据我们的应用要求进行更新
答案 1 :(得分:1)
这显然是正常的GC事件:
此“分配失败”日志不是错误,而是在JVM中完全正常的情况。这是一个典型的GC事件,导致触发Java垃圾收集过程。垃圾收集可以删除死对象,压缩回收的内存,从而有助于释放内存以分配新的对象。
来源:https://medium.com/@technospace/gc-allocation-failures-42c68e8e5e04
编辑:如果接下来的阶段没有执行,也许您应该检查stderr
而不是stdout
。