2012-12-19 27 views
0

我正在使用hive-jdbc-0.7.1-cdh3u5.jar。我有一些內存密集型查詢在EMR上運行,偶爾會失敗。當我看到作業服務器我看到查詢被打死,我看到以下錯誤:Hive作業被殺並查詢execute()仍然掛起

產生java.io.IOException:用137

非零狀態,但是任務進程退出,蜂房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

這也許是由於事實的Hadoop將殺死 任務10分鐘(600秒)後,如果它沒有通過設置參數mapred.task.timeout=0我們可以免殺得到響應和 運行超過10分鐘的任務。

此外,在這些情況下,可以編寫mapper/reducer,以定期報告進度(比每10分鐘更頻繁一次)。這可以通過多種方式來實現:在記者

  • 呼叫setStatus()設置的 任務進度的記者
  • 呼叫incrCounter()人類可讀的描述來增加用戶計數器
  • 呼叫progress()上記者告訴Hadoop你的任務仍然在那裏(並取得進展)