我正在使用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]
问题是,下一个阶段和任务没有执行,因此行为非常意外。
2条答案
按热度按时间gxwragnw1#
这显然是一个正常的gc事件:
这个“分配失败”日志不是一个错误,但在jvm中是完全正常的。这是一个典型的gc事件,它会触发java垃圾收集进程。垃圾收集会移除死对象,压缩回收的内存,从而有助于释放内存以分配新的对象。
资料来源:https://medium.com/@technospace/gc-分配故障-42c68e8e5e04
编辑:如果下一个阶段没有执行,也许你应该检查一下
stderr
而不是stdout
.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分区
需要根据我们的申请要求进行更新