如何从spark-submit获取返回代码?

时间:2017-04-10 10:48:01

标签: linux apache-spark ssh pyspark

我正在尝试使用远程位置的ssh连接执行spark作业。

有些情况下作业失败但调度程序将其标记为“成功”,因此我想检查spark-submit的返回代码,以便我可以强制失败。

以下是我正在使用的代码

def execute_XXXX():
    f = open('linux.pem','r')
    s = f.read()
    keyfile = StringIO.StringIO(s)
    mykey = paramiko.RSAKey.from_private_key(keyfile)
    sshcon   = paramiko.SSHClient()
    sshcon.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    sshcon.connect('XXX.XXX.XXX.XXX', username='XXX', pkey=mykey)
    stdin, stderr, stdout= sshcon.exec_command('spark-submit XXX.py')

    logger.info("XXX ------>"+str(stdout.readlines()))
    logger.info("Error--------->"+str(stderr.readlines()))

如何获取spark-submit作业的返回码,以便强行完成任务。 或者你能否提出另一种解决方案。

谢谢,Chetan

2 个答案:

答案 0 :(得分:0)

您需要实现sparkListener。更多信息可在以下链接中找到。

How to implement custom job listener/tracker in Spark?

答案 1 :(得分:0)

所以这就是我解决我面临的问题的方法。简单的1行代码就足够了。

def execute_XXXX():
    f = open('linux.pem','r')
    s = f.read()
    keyfile = StringIO.StringIO(s)
    mykey = paramiko.RSAKey.from_private_key(keyfile)
    sshcon   = paramiko.SSHClient()
    sshcon.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    sshcon.connect('XXX.XXX.XXX.XXX', username='XXX', pkey=mykey)
    stdin, stderr, stdout= sshcon.exec_command('spark-submit XXX.py')
    if (stdout.channel.recv_exit_status())!= 0:
         logger.info("XXX ------>"+str(stdout.readlines()))
         logger.info("Error--------->"+str(stderr.readlines()))
         sys.exit(1)