我想知道是否有可能在发生时将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)
谢谢!
答案 0 :(得分:0)
我怀疑查询的各个阶段是并行执行的。如果他们是连续执行的,那么一个人的失败将导致整个工作失败。
尝试在查询中设置hive.exec.parallel=false
。