2011-08-04 50 views
5

2個基本問題,那麻煩我:hive/hadoop如何確保每個映射器都能處理本地數據?

  • 我怎麼能相信,每個32個文件蜂巢用它來存儲我的表坐在其獨特的機器?
  • 如果發生這種情況,我怎麼能確定,如果配置單元創建32個映射器,它們中的每一個將在其本地數據上工作? hadoop/hdfs可以保證這種魔力,或者作爲一個智能應用程序來確保它會發生?

背景: 我有32臺機的蜂巢星團,以及:

  • 我所有的表都與"CLUSTERED BY(MY_KEY) INTO 32 BUCKETS"
  • 創建我用hive.enforce.bucketing = true;
  • 我證實,確實每個表存儲作爲用戶/配置單元/倉庫中的32個文件
  • 我使用的HDFS複製因子爲2

謝謝!

回答

5
  1. 數據放置由HDFS決定。它會嘗試在機器上平衡字節。由於複製,每個文件將在兩臺計算機上,這意味着您有兩臺用於本地讀取數據的候選計算機。
  2. HDFS知道每個文件的存儲位置,Hadoop使用此信息將映射器放置在與存儲數據相同的主機上。您可以查看作業的計數器,以查看「數據本地」和「機架本地」地圖任務計數。這是Hadoop的一個功能,您不必擔心。
+0

默認情況下,HDFS會將塊複製三次(同一節點和兩個其他節點,最好在另一個機架中)。 – cftarnas

+1

好的,謝謝,根據你的回答,我改述並提出了一個更好地描述我的問題的新問題:http://stackoverflow.com/questions/6953383/is-a-collocated-join-a-la-netezza-theoretically - 可以在蜂巢中 – ihadanny

+0

@SpikeGronim你能提供洞察這個Hadoop問題嗎? [是否可以限制MapReduce作業訪問遠程數據?](http://stackoverflow.com/q/31789176/320399) – blong

1

如果沒有連接,通常會使用Hadoop Map Reduce機制來實現數據局部性(這在Spike的答案中有描述)。
專門爲蜂房我會提到地圖連接。有可能告訴配置單元什麼是僅限Map連接的表的最大大小。當其中一個表足夠小時,Hive會使用分佈式緩存機制將此表複製到所有節點,並確保所有連接過程都在本地對數據進行。 對此過程有很好的解釋: http://www.facebook.com/note.php?note_id=470667928919

相關問題