2012-07-07 85 views
1

我很好奇你是否可以將HDFS文件系統從MapReduce框架中分離出來。我知道Hadoop的主要目的是運行映射並減少有問題的數據在機器上,但我想知道是否可以更改* .xml文件來更改jobtracker,namenode和datanodes正在運行。如何將Hadoop MapReduce與HDFS分開?

目前,我的配置是2個虛擬機的設置:一個(主)與Namenode,Datanode,JobTracker,Tasktracker(和SecondaryNameNode),另一個(從屬)DataNode,Tasktraker。從本質上講,我想要改變的是擁有NameNode DataNode(s)的Job Master,JobTracker,並且只有TaskTracker的從機執行計算(後來,只有TaskTracker有更多的奴隸;每個都有一個) 。瓶頸將是兩臺虛擬機之間爲了計算地圖和減少數據而進行的數據傳輸,但由於這個階段的數據非常小,我不主要關心它。我只想知道這個配置是否可行,以及如何去做。有小費嗎?

謝謝!

回答

1

您不在配置文件中指定這種選項。 你需要做的是照顧你在每臺機器上啓動的是什麼類型的虛擬機(你稱之爲虛擬機,但我認爲你的意思是機器)。

我想你通常使用start-all.sh腳本啓動所有的東西,你可以在hadoop安裝目錄下的bin目錄中找到它。

如果你看看這個腳本,你會看到它所做的是調用一些與啓動datanodes,tasktrackers和namenode,jobtracker相對應的子腳本。

爲了才達到你說什麼,我會做這樣的:

  1. 修改主機和從機的文件,因爲這: 主文件應包含的MACHINE1 奴隸的名稱應包含機2的名稱

  2. 運行start-mapred.sh

  3. 修改主機和從機的文件,因爲這: 主文件應包含在MACHINE1 奴隸文件應包含MACHINE1

  4. 運行start-dfs.sh

我必須告訴你,我從來沒有試過這樣的配置,所以我不知道這是怎麼回事工作,但你可以試試看。無論如何,解決方案是在這個方向!

+0

這可能會起作用,但是爲了停止羣集,必須再次更改主/從文件。 – 2012-07-07 03:05:04

+0

這似乎現在爲我的目的工作!謝謝! – 2012-07-16 19:06:08

0

從本質上講,我想改變的是與NameNode的數據節點(或多個),JobTracker的主人,並與只向TaskTracker從執行計算(和以後,有更多的奴隸僅有的TaskTracker上他們;每一個)。

首先,我不確定爲什麼要從存儲中分離計算。 MR地區的全部目的都消失了,以爲你可以成功地完成這項工作。

使用dfs.hostsdfs.hosts.exclude參數來控制哪些數據節點可以連接到名稱節點和mapreduce.jobtracker.hosts.filenamemapreduce.jobtracker.hosts.exclude.filename參數來控制哪些的TaskTracker可以連接到的JobTracker。這種方法的一個缺點是datanodes和tasktracker在被排除的節點上啓動,並且不屬於Hadoop集羣。

另一種方法是修改代碼以使tasktracker和datanode具有單獨的slave文件。目前,這在Hadoop中不受支持,並且需要更改代碼。

+0

要回答你爲什麼要將MR與HDFS分開的問題 - 可能需要插入一個不同的DFS來代替HDFS。我們用MR + Ceph組合進行了一些實驗。 – Shatu 2015-09-05 12:38:27