【问题标题】:HIVE flush errors of multi-stage jobs to stderr in PythonPython中多阶段作业的HIVE将错误刷新到stderr
【发布时间】:2013-05-29 22:38:02
【问题描述】:

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

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)

谢谢!

【问题讨论】:

标签: python hadoop subprocess hive


【解决方案1】:

我怀疑查询的各个阶段是并行执行的。如果它们是串行执行的,那么一个失败将导致整个作业失败。

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

【讨论】:

  • 不,这不起作用,同样的问题。即使它确实有效,也不是长期修复,因为我希望查询并行运行。我只想将错误刷新为标准错误。我在这里打开了一个关于 Hive 的 Jira 的问题:issues.apache.org/jira/browse/HIVE-4631
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-23
  • 2019-12-25
  • 1970-01-01
  • 1970-01-01
  • 2020-10-04
  • 1970-01-01
相关资源
最近更新 更多