2011-10-03 142 views
14

當我上傳文件到HDFS,如果我的複製因子設置爲1,然後將文件分割會駐留在一臺機器上或拆分將被分發到整個網絡的多臺機器?HDFS複製因子

hadoop fs -D dfs.replication=1 -copyFromLocal file.txt /user/ablimit 

回答

11

按照Hadoop : Definitive Guide

Hadoop的默認策略是把第一個副本相同的節點客戶端(在集羣外運行 客戶,一個節點是隨機選擇的,雖然系統 嘗試不挑選太滿或太忙的節點)。第二個複製品放置在與第一個(機架外)不同的機架上,隨機選擇。第三個副本放置在與第二個副本相同的機架上,但在隨機選擇的不同節點上。儘管系統試圖避免在同一機架上放置太多複製品,但其他複製品 被放置在羣集上的隨機節點上。

這個邏輯很有意義,因爲它減少了不同節點之間的網絡抖動。但是,這本書於2009年發佈,Hadoop框架發生了很多變化。

我認爲這取決於客戶端是否與Hadoop節點相同。如果客戶端是Hadoop節點,則所有分割將位於同一節點上。儘管集羣中有多個節點,但這並沒有提供更好的讀/寫吞吐量。如果客戶端與Hadoop節點不同,那麼隨機爲每個分裂選擇節點,因此分裂分散在集羣中的節點上。現在,這提供了更好的讀/寫吞吐量。寫作到多個節點的

一個優點是,即使節點的一個出現故障,一對夫婦分裂的可能是下跌,但至少有一些數據可以以某種方式從剩餘的分裂恢復。

+0

我想你最後的陳述是不正確的。如果其中一個節點關閉並且有輸入數據塊,則NameNode無法恢復文件,甚至無法分配剩餘的塊(假設複製因子爲1) –

+0

#brain storm,您是絕對正確的。 –

+0

塊位置選擇策略是記錄在不同的Hadoop的文檔,請https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html#Replica_Placement:_The_First_Baby_Steps。 –

1

如果設置複製爲1,那麼該文件將只存在於客戶端節點上,也就是從那裏你上傳該文件的節點。

+1

這是真的_iff_客戶端節點也運行DataNode服務。 –

+0

即使客戶端本地數據節點已滿,情況是否如此?即複製失敗而不是使用不同的DN? – Wheezil

0
  • 如果您的羣集是單節點,那麼當您上傳文件時,它將根據塊大小進行溢出並保留在單臺機器上。
  • 如果羣集是多節點然後當你上傳將根據塊大小灑出一個文件,它會通過管道被分配到不同的數據節點的集羣和NameNode的將決定應將數據在集羣中移動。

HDFS複製因子用於複製數據(即)如果您的複製因子是2,那麼您上傳到HDFS的所有數據都將具有副本。

+0

如果更改hdfs-site中的複製因子值,該怎麼辦?xml文件上傳到hdfs之後 - 系統會自動複製它,還是需要執行hdfs平衡器命令? –