所以這是我的情況:使用Hadoop,我可以在沒有運行數據節點的機器上創建任務跟蹤器嗎?
我有一個使用HBase的mapreduce作業。我的映射器需要一行文本輸入並更新HBase。我沒有減速器,也沒有寫入任何輸出到光盤。我希望能夠在我預計會出現一次利用率時向羣集添加更多處理能力,然後在利用率降低時縮小範圍。假設我暫時無法使用Amazon或任何其他雲提供商;我在一個私人集羣中運行。
當我需要更多容量時,一種解決方案是將新機器添加到羣集中。但是,我希望能夠無需等待或麻煩地添加和刪除這些機器。我不想在每次需要添加或刪除節點時重新平衡HDFS。所以看起來好的策略是擁有一個「核心」集羣,每個機器運行一個任務跟蹤器和一個數據節點,當我需要增加容量時,我可以啓動一些「一次性」機器,正在運行tasktrackers,但不是datanode。這可能嗎?如果是這樣,有什麼影響?
我意識到在沒有datanode的機器上運行的tasktracker不會有數據局部性的好處。但在實踐中,這是什麼意思?我在想,當在一個「一次性」機器上安排工作時,jobtracker將通過網絡發送一行輸入到tasktracker,然後該tasktracker將該行輸入並直接送到Mapper,而無需寫任何東西到光盤。這是怎麼回事?
哦,我正在使用Cloudera cdh3u3。不知道這是否重要。
謝謝。這正是我需要的。 – sangfroid 2012-04-27 16:59:21
@Chris:上述案例中的拆分信息從哪裏來?它是否來自用戶提供的輸入格式(顯式地說InputSplit []返回的位置)? – 2013-06-07 09:17:58
是的,輸入格式的getSplits方法被調用並返回一個InputSplit對象數組。 getSplits方法使用配置的作業信息(大多數基於文件的輸入格式爲'mapred.input.dir')來計算分割 – 2013-06-07 12:01:42