2015-10-12 71 views
0

我已經安裝了Apache Hadoop 2.x以及5個異構節點,其中一個節點純粹專用於NameNode。用於異構Hadoop集羣的HDFS中的數據分佈和分佈

我正在使用下面的命令將我的輸入文件放入HDFS

$ hdfs dfs -put /home/hduser/myspace/data /user/hduser/inputfile 

HDFS複製在三個DataNodes (DN)該輸入文件時,它意味着一個第四DataNode不具有輸入塊。如果我使用8個映射器(通過使用NLineInputFormat()方法設置分割大小),那麼將這8個映射器分配給所有4個DN。我認爲它應該是。在這種情況下,來自其他DN的數據塊將移至第4個DN,由分配給它的映射器計算,這會增加總體執行時間。

我的問題是:

  1. 我們能否以某種方式設法將數據塊上的每個DNS,這樣就沒有必要對一個特定的DN映射器移動數據。它可以通過hdfs的「放」命令來完成嗎?

  2. 同樣在異構集羣的情況下,我們可以根據節點的計算能力將不同大小的數據放在不同的DN上嗎?

回答

0

我們無法管理將數據塊放在每個DN上。您提到HDFS將文件複製到3個DN。只有在文件大小小於塊大小的情況下才是如此。 HDFS通過將文件分成多個塊來複制數據。因此,文件數據(塊)分佈在所有4個DN上的可能性更大。

+0

讓我們有一個大小爲40 MB的輸入文件。當我們把它放到hdfs中時,它會變成3個DN(讓DN1,DN2,DN3),那麼如果我們使用4個映射器運行,在DN4上運行的映射器將如何得到輸入? –

0

塊位置完全取決於Hadoop和將要管理的塊放置在內部可以通過

dfs.replication.factor

或大小由

只配置複製的數量

dfs.block.size

塊來完成你的願望。

如果您要檢查的塊配置,你可以打開HDFS的Web UI是

的Namenode:50070

,並瀏覽到該文件在這裏它會告訴你塊放置在所有節點中。

+0

這是否意味着如果我想在DN4本地創建數據塊,那麼我必須將複製因子設置爲4? –

+0

是的,它會幫助你或一個奇怪的方法是停止一個Datanode,然後dn4,並把數據它肯定會放在那裏副本。 –

相關問題