Hive作业被杀死,查询execute()仍然挂起

时间:2012-12-19 21:32:59

标签: amazon-ec2 hive amazon-emr emr

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

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

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


    ST stQuery = MY_QUERY;
    try {
        Statement stmt = conn.createStatement();
        stmt.execute(stQuery.render());   // Hangs here without knowing that the job has been killed. Exception does not get raised.
    }
    catch(SQLException sqle){
        sqle.printStackTrace();
        log.error("Failed to run query");
        return;
    }

1 个答案:

答案 0 :(得分:1)

这可能是因为hadoop会杀人 10分钟(600秒)后的任务,如果它没有得到响应和 通过设置参数mapred.task.timeout=0,我们可以避免查杀 运行超过10分钟的任务。

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

  • 在Reporter上调用setStatus()以设置人类可读的描述 任务的进展
  • 在Reporter上调用incrCounter()以增加用户计数器
  • 在Reporter上调用progress()告诉Hadoop您的任务仍在那里(并取得进展)