运行pyspark时,如果在进程中间执行 Ctrl + Z ,则会停止作业运行,但不会关闭SparkContext。这意味着端口也没有关闭,并且火花必须跳过几个端口才能在下次有人运行火花作业时连接。我想阻止人们在运行这些脚本时使用 Ctrl + Z ,但是当SparkContext运行时,标准的python处理程序似乎不起作用,我假设是因为它在Java中运行技术并且我只为python设置了一个处理程序?这是我写的一个例子。
import signal
from pyspark import SparkContext
sc = SparkContext()
def handler(signum, frame):
print 'Please refrain from using CTRL + Z, use CTRL + C instead'
signal.signal(signal.SIGTSTP, handler)
while True:
pass
当我运行此代码时,按 Ctrl + Z 仍然执行暂停的默认行为,而不是执行我的处理函数。
如果我消除了火花内容,那么这段代码就像我想要的那样工作:
import signal
def handler(signum, frame):
print 'Please refrain from using CTRL + Z, use CTRL + C instead'
signal.signal(signal.SIGTSTP, handler)
while True:
pass
答案 0 :(得分:0)
我最终做的是在spark-submit之前将trap "" SIGTSTP
添加到我的spark-submit shell脚本中。