2014-05-09 29 views
0

我在執行HIVE殼查詢作爲HIVE查詢與Hadoop提供的mapreducers數量之間的關係?

SELECT tradeId, bookid, foid from trades where bookid='"ABCDEFG"' 

「交易」具有指數BOOKID。當查詢運行時,它顯示映射器和減速的細節如下: -

Number of reduce tasks is set to 0 since there's no reduce operator 
Hadoop job information for Stage-1: number of mappers: 48; number of reducers: 0 
Time taken: **606.183 seconds**, Fetched: **18 row(s)** 

如果你看到它花了大量時間來獲取只有18行。我的問題是我在這裏做錯了什麼?應該是否爲非零?它會幫助,如果我設置它使用

set mapred.reduce.tasks = some_number 

不應該索引幫助更快地檢索數據?

+0

如果您可以提供有關羣集的其他信息可能會有幫助。你使用了多少個工作節點? Hadoop/Hive的分佈/版本是什麼?另外,查看在查詢上運行EXPLAIN的輸出,例如'EXPLAIN SELECT tradeId,bookid,foid來自bookid ='「ABCDEFG」''的交易。 – RickH

+0

使用6個節點,Hive版本爲0.12(基於hive-hwi-0.12.0-cdh5.0.0.jar),Hadoop版本爲2.3(基於Hadoop 2.3.0-cdh5.0.0 ) – rajibdotnet

回答

1

當你在做簡單的選擇時,所有的過濾事物和列選擇都由映射器自己完成。這裏沒有減速機任務的目的,因此減速機的數量爲零 - 這很好。你的表中可能有大約48 *塊大小的數據量,因此它產生了48個映射器。每個DN有多少地圖位置,有多少地圖位置在您啓動查詢時是免費的?有可能他們中的48個並不是同時運行。雖然它只返回了18行,但它讀取了整個表格。您的表是否分支並聚集在bookid列上 - 在這種情況下,您可以使用TABLESAMPLE子句使其只讀取包含您的ABCDEFG值的存儲桶。