【问题标题】:Hive job gets killed and query execute() remains hangingHive 作业被杀死并且查询 execute() 仍然挂起
【发布时间】:2012-12-21 18:05:09
【问题描述】:

我正在使用 hive-jdbc-0.7.1-cdh3u5.jar。我在 EMR 上运行了一些内存密集型查询,这些查询偶尔会失败。当我查看作业跟踪器时,我看到查询已被终止,并且我看到以下错误:

java.io.IOException:任务进程以非零状态退出 137

但是,Hive JDBC 驱动程序 execute() 调用没有检测到这一点,而是挂起。没有发现异常。有任何想法吗?谢谢:

ST stQuery = MY_QUERY; 尝试 { 语句 stmt = conn.createStatement(); stmt.execute(stQuery.render()); // 在不知道作业已被终止的情况下挂在这里。不会引发异常。 } 捕获(SQLException sql){ sqle.printStackTrace(); log.error("查询失败"); 返回; }

【问题讨论】:

    标签: amazon-ec2 hive amazon-emr emr


    【解决方案1】:

    这可能是由于hadoop会杀死 10 分钟(600 秒)后的任务,如果它没有得到响应,并且 通过设置参数mapred.task.timeout=0可以免杀 运行时间超过 10 分钟的任务。

    同样在这些情况下,我们可以编写映射器/缩减器,以便定期报告进度(比每 10 分钟更频繁)。这可以通过多种方式实现:

    • 在 Reporter 上调用 setStatus() 以设置人类可读的描述 任务进度
    • 在 Reporter 上调用 incrCounter() 以增加用户计数器
    • 在 Reporter 上致电 progress(),告诉 Hadoop 您的任务仍然存在(并且正在取得进展)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-10
      • 2014-09-24
      • 1970-01-01
      • 1970-01-01
      • 2011-09-30
      • 2013-05-11
      • 1970-01-01
      • 2015-04-28
      相关资源
      最近更新 更多