2017-08-08 139 views
1

我已經將MR配置爲配置單元執行引擎的CDH-5.9集羣。我有一個名爲「users」的配置表格,有50行。每當我執行如下select * from users工作正常查詢:如何提交配置單元sql查詢作爲配置單元中的先生作業

hive> select * from users; 
OK 

Adam  1  38  ATK093 CHEF 
Benjamin 2  24  ATK032 SERVANT 
Charles 3  45  ATK107 CASHIER 
Ivy  4  30  ATK384 SERVANT 
Linda  5  23  ATK132 ASSISTANT 
. 
. 
. 

Time taken: 0.059 seconds, Fetched: 50 row(s) 

但發行select max(age) from users提交的先生工作後失敗。容器日誌也沒有任何信息來找出爲什麼它失敗。

 hive> select max(age) from users; 
     Query ID = canballuser_20170808020101_5ed7c6b7-097f-4f5f-af68-486b45d7d4e 
     Total jobs = 1 
     Launching Job 1 out of 1 
     Number of reduce tasks determined at compile time: 1 
     In order to change the average load for a reducer (in bytes): 
     set hive.exec.reducers.bytes.per.reducer=<number> 
     In order to limit the maximum number of reducers: 
     set hive.exec.reducers.max=<number> 
     In order to set a constant number of reducers: 
     set mapreduce.job.reduces=<number> 
     Starting Job = job_1501851520242_0010, Tracking URL = http://hadoop-master:8088/proxy/application_1501851520242_0010/ 
     Kill Command = /opt/cloudera/parcels/CDH-5.9.1-1.cdh5.9.1.p0.4/lib/hadoop/bin/hadoop job -kill job_1501851520242_0010 
     Hadoop job information for Stage-1: number of mappers: 0; number of reducers: 0 
     2017-08-08 02:01:11,472 Stage-1 map = 0%, reduce = 0% 
     Ended Job = job_1501851520242_0010 with errors 
     Error during job, obtaining debugging information... 
     FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask 
     MapReduce Jobs Launched: 
     Stage-Stage-1: HDFS Read: 0 HDFS Write: 0 FAIL 
     Total MapReduce CPU Time Spent: 0 msec 

如果我從配置單元cli中獲得配置單元查詢執行的工作流程,可能會對我進一步調試問題有幫助。

+0

去跟蹤URL = HTTP:// Hadoop的主:AM 8088 /代理/ application_1501851520242_0010 /,仔細檢查日誌,也沒(沒死)容器嘗試。應該有信息。 – leftjoin

+0

@leftjoin感謝您的信息,它是我的錯誤,我查看了舊的應用程序日誌,而不是問題中提到的應用程序ID。現在它是一個jar依賴問題,我解決了它。但是,如果您瞭解工作流程,請分享知識。 –

回答

1

在Hive查詢執行流程中涉及很多組件。高級體系結構解釋如下:https://cwiki.apache.org/confluence/display/Hive/Design

本文檔中有更多詳細組件文檔的鏈接。

典型查詢執行流程(高電平)

  1. 的UI調用執行接口的驅動程序。
  2. 驅動程序爲查詢創建會話句柄並將查詢發送給編譯器以生成執行計劃。
  3. 編譯器從Metastore中獲取必要的元數據。此元數據用於查詢查詢樹中的表達式爲 ,以及基於查詢謂詞修剪分區。
  4. 編譯器生成的計劃是一個階段的DAG,每個階段都是一個map/reduce作業,一個元數據操作或一個在HDFS上的操作。對於map/reduce階段,該計劃包含映射運算符樹(在映射程序上執行的運算符樹)和 reduce操作符樹(用於需要reducers的操作)。
  5. 執行引擎提交這些階段以適當的組件在各任務(映射器/減速機)相關聯的 與工作臺或中間輸出解串器用於讀取從 HDFS文件的行和這些被傳遞通過相關聯的操作員 樹。一旦生成輸出,它將通過串行器寫入臨時的 HDFS文件(這種情況發生在映射器中,以防 的操作不需要減少)。使用臨時文件 爲計劃的後續地圖/縮小階段提供數據。對於DML 操作,最終的臨時文件將被移至表格的 位置。此方案用於確保不會讀取髒數據 (文件重命名是HDFS中的原子操作)。
  6. 對於查詢,執行引擎直接從HDFS讀取臨時文件的內容,作爲從驅動程序 獲取調用的一部分。

Hive文檔根目錄在這裏:https://cwiki.apache.org/confluence/display/Hive/Home您可以找到有關不同組件的更多詳細信息。 你也可以研究一些類實現的更多細節的來源。

的Hadoop作業服務器文檔:https://wiki.apache.org/hadoop/JobTracker

+0

感謝您的解釋。我閱讀Hive體系結構文檔並需要閱讀更多參考資料以深入瞭解其內部工作原理。這可能是我開始學習Hive的起點。再次感謝。 –

+1

請參閱TEZ執行框架https://cwiki.apache.org/confluence/display/Hive/Hive+on+Tez – leftjoin