python - 使用Python将多阶段作业的HIVE刷新错误转换为stderr

标签 python hadoop subprocess hive

我想知道是否有可能在发生时将消息从Hive CLI刷新到stderr。当前,我正在尝试执行一个多阶段查询(只是一个示例而不是实际的):

SELECT  COUNT(*) FROM ( 
SELECT user from users
where datetime = 05-10-2013
UNION ALL
SELECT user from users
where datetime = 05-10-2013 
) a

这将启动3个作业,但是如果作业1由于被杀死而失败,则我不想运行作业2。当前,我的代码如下所示,但是,在所有子查询完成之前,hive不会写入stderr返回错误。
def execute_hive_query(query):
    return_code = None
    cmd = ["hive", "-e", query]
    proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    while return_code is None:
        out = proc.stdout.read()
        error = proc.stderr.read()
        handle_hive_exception(out,error)
        time.sleep(10)
        return_code = proc.poll()

def handle_hive_exception(stdout,stderr):
      if stderr != '':
      raise Exception(stderr)

谢谢!

最佳答案

我怀疑查询的各个阶段正在并行执行。如果按顺序执行它们,则失败将导致整个作业失败。

尝试在查询中设置hive.exec.parallel=false

关于python - 使用Python将多阶段作业的HIVE刷新错误转换为stderr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16825066/

相关文章:

hadoop - Spark ml 模型保存到 hdfs

python - 文件相关操作 python 子进程 vs 原生 python

python - 对于 OpenCV,我的 Python 代码可以显示网络摄像头,但我的 C++ 不能

python - 最大 unicode 代码点的索引

python - 如何使用 Python 正确记录错误/信息?

python - 登录 Hadoop

python - 使用 python 请求的 bool 值无效

hadoop减少拆分大小

python - 子进程在 PyCharm 中正确显示 sys.stdout 但在控制台中不正确

Python运行带有子进程的cm​​d命令(ffmpeg)并在执行某些代码之前等待cmd关闭