Apache spark 防止总线错误

Apache spark 防止总线错误,apache-spark,pyspark,spark-dataframe,Apache Spark,Pyspark,Spark Dataframe,我正在AWS EMR集群上运行spark提交应用程序(EMR 5.0.0、spark 2.0.0、30 r3.4XL)。要启动脚本,我将SSH连接到主节点,然后运行以下命令: time spark-submit --conf spark.sql.shuffle.partitions=5000 \ --conf spark.memory.storageFraction=0.3 --conf spark.memory.fraction=0.95 \ --executor-memory 8G --dr

我正在AWS EMR集群上运行spark提交应用程序(EMR 5.0.0、spark 2.0.0、30 r3.4XL)。要启动脚本,我将SSH连接到主节点,然后运行以下命令:

time spark-submit --conf spark.sql.shuffle.partitions=5000 \
--conf spark.memory.storageFraction=0.3 --conf spark.memory.fraction=0.95 \
--executor-memory 8G --driver-memory 10G dataframe_script.py
应用程序使用默认的AWS spark配置,该配置的spark.master=spirn,deploy mode=client

应用程序加载约220GB的数据,进行类似SQL的聚合,然后写入s3。写入的数据看起来处理正确。代码运行时,我看到错误消息,但代码仍在运行:

ERROR LiveListenerBus: Dropping SparkListenerEvent because no remaining room in event queue. This likely means one of the SparkListeners is too slow and cannot keep up with the rate at which tasks are being started by the scheduler.
应用程序完成写入后,应用程序在>10分钟内不会返回命令行,并发出警告:

WARN ExecutorAllocationManager: No stages are running, but numRunningTasks != 0
然后,数万行出现错误消息:

16/10/12 00:40:03 ERROR LiveListenerBus: SparkListenerBus has already stopped! Dropping event SparkListenerExecutorMetricsUpdate(176,WrappedArray())
进度条还会继续在错误消息之间移动,例如:

[Stage 17:=================================================>   (465 + 35) / 500]
主要步骤的写入和结束代码:

def main():
    # some processing
    df.select(selection_list).write.json('s3path', compression=codec)
    print 'Done saving, shutting down'
    sc.stop()
有一个,是指。看起来旧版本的Spark有修复程序,但我不太明白问题出在哪里


如何避免这些错误消息

我想我找到了问题所在。在我的Spark脚本中,我在main()函数外部启动SparkContext,但在main函数内部停止它。当脚本退出并再次尝试关闭SparkContext时,这会导致问题。通过将SparkContext初始化移到main函数中,这些错误大部分都消失了