簡體   English   中英

蜂巢/混合狀態如何確保每個映射器都在其本地數據上工作?

[英]How does hive/hadoop assures that each mapper works on data that is local for it?

讓我困擾的兩個基本問題:

  • 如何確定hive用於存儲表的32個文件中的每個文件都位於其唯一的計算機上?
  • 如果發生這種情況,我如何確定hive創建32個映射器,每個映射器都可以在其本地數據上工作? hadoop / hdfs是否可以保證這種魔力,還是作為智能應用程序的蜂巢確保它會發生?

背景:我有一個由32台計算機組成的配置單元集群,並且:

  • 我所有的表格都是使用"CLUSTERED BY(MY_KEY) INTO 32 BUCKETS"
  • 我使用hive.enforce.bucketing = true;
  • 我驗證了,實際上每個表在用戶/配置單元/倉庫中都存儲為32個文件
  • 我正在使用HDFS復制因子2

謝謝!

  1. 數據放置由HDFS確定。 它將嘗試平衡計算機上的字節數。 由於復制,每個文件將位於兩台計算機上,這意味着您有兩台候選計算機用於本地讀取數據。
  2. HDFS知道每個文件的存儲位置,Hadoop使用此信息將映射器放置在與存儲數據相同的主機上。 您可以查看您工作的計數器,以查看“本地數據”和“本地機架”地圖任務計數。 這是Hadoop的一項功能,您無需擔心。

如果沒有聯接,則使用用於數據局部性的常規Hadoop Map Reduce機制(在Spike的答案中進行了描述)。
對於蜂巢,我會特別提到Map joins。 可以告訴hive僅Map聯接的表的最大大小是多少。 當其中一個表足夠小時,Hive將使用分布式緩存機制將此表復制到所有節點,並確保所有聯接過程都在數據本地進行。 對該過程有很好的解釋: http : //www.facebook.com/note.php?note_id=470667928919

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM