我在测试我的第一个 Spark Streaming
处理来自 Kafka
. 但是,在几次测试运行之后,我得到了以下错误消息 There is insufficient memory for the Java Runtime Environment to continue.
我的测试数据非常小,因此这不应该发生。在调查了 process
,我意识到以前提交的spark作业可能没有完全删除?
我通常提交如下工作,我正在使用
Spark 2.2.1 /usr/local/spark/bin/spark-submit --packages org.apache.spark:spark-streaming-kafka-0-8_2.11:2.0.2 ~/script/to/spark_streaming.py
并使用“ctrl+c”停止
脚本的最后几行如下所示:
ssc.start()
ssc.awaitTermination()
更新
在我改变了提交spark流作业的方式(如下所示的命令)之后,我仍然遇到了相同的问题,即在终止作业之后,内存不会被释放。我只是开始了 Hadoop
以及 Spark
对于这4个ec2节点。
/bin/spark-submit --packages org.apache.spark:spark-streaming-kafka-0-8_2.11:2.0.2 --py-files ~/config.py --master spark://<master_IP>:7077 --deploy-mode client ~/spark_kafka.py
2条答案
按热度按时间gblwokeq1#
这可能是一堆驱动程序(spark-app-driver-process)进程在用于提交spark作业的主机上运行的问题。试着做一些像
或者根据您的平台来了解当前正在运行的进程。或者你也可以在stackoverflow上看看答案,spark streaming with actor never terminates,它可能会让你对正在发生的事情有一个了解。
h79rfbju2#
当您按下ctrl-c时,只有提交者进程被中断,作业本身继续运行。最终您的系统会耗尽内存,因此无法启动新的jvm。
此外,即使重新启动集群,所有以前运行的作业也将重新启动。
阅读如何正确停止正在运行的spark应用程序。