我使用的是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; }
答案 0 :(得分:1)
这可能是因为hadoop会杀人
10分钟(600秒)后的任务,如果它没有得到响应和
通过设置参数mapred.task.timeout=0
,我们可以避免查杀
运行超过10分钟的任务。
同样在这些案例中,人们可以编写映射器/缩减器,以便定期报告进度(比每10分钟更频繁地报告)。这可以通过多种方式实现:
setStatus()
以设置人类可读的描述
任务的进展incrCounter()
以增加用户计数器progress()
告诉Hadoop您的任务仍在那里(并取得进展)