0

我想知道是否可以安裝「後臺」hadoop集羣。我的意思是,畢竟它意味着能夠處理有時不可用或緩慢的節點。臨時掛起hadoop節點 - 後臺hadoop集羣

因此,假設某所大學設有計算機實驗室。比方說,100個盒子都裝有高檔桌面硬件,千兆以太網,甚至可能是相同的軟件安裝。 Linux在這裏也很受歡迎。

但是,這100個盒子當然是學生桌面系統。有些時候實驗室將會是滿的,但也有時候實驗室是空的。用戶數據大多存儲在中央存儲設備上 - 比如說NFS--因此本地磁盤使用量不大。

聽起來對我來說,在空閒時間將系統用作Hadoop集羣是個好主意。最簡單的設置當然是有一個cron作業在晚上啓動集羣,並在早上關閉。然而,在白天,許多計算機也將被閒置。

但是,Hadoop會如何對例如節點在任何用戶登錄時關閉?是否可以輕鬆地「暫停」(搶佔!)hadoop中的節點,並在需要時將其移動到交換位置?理想情況下,我們會讓Hadoop有機會在暫停任務之前移除計算(也釋放內存)。如何做這樣的設置?有沒有辦法向Hadoop發信號通知節點將被暫停?

據我所知,datanodes不應停止,也許複製需要增加到有超過3個副本。使用YARN還可能存在一個問題,即通過將任務跟蹤器移動到任意節點,它可能會在某個時間點被暫停。但也許可以控制,有一小部分節點始終處於打開狀態,並且會運行任務跟蹤器。

只適用於stoptasktracker或發送SIGSTOP(然後用SIGCONT恢復)?第一個可能會讓hadoop有機會作出反應,第二個會在用戶很快退出時繼續更快(因爲工作可以繼續)。 YARN怎麼樣?

回答

0

首先,hadoop不支持'搶佔',你是如何描述它的。 Hadoop只需重新啓動任務(如果檢測到),該任務跟蹤器就會死機。 因此,在您的情況下,當用戶登錄到主機時,某些腳本只會殺死 tasktracker,並且jobtracker會將所有在死亡的tasktracker上運行 的mappers/reducers標記爲FAILED。之後,這些任務將在不同節點上重新安排 。

當然這種情況並不是免費的。根據設計,映射器和減速器 保留本地主機上的所有中間數據。此外,reducers直接從執行mapper的tasktrackers獲取mapper 數據。所以,當 tasktracker將被殺死,所有這些數據將會丟失。並且在映射器的 的情況下,它不是一個大問題,映射器通常在相對較小的數據量(千兆字節?)上工作,但減速器將受到更大的影響。 Reducer運行shuffle,這在網絡帶寬和cpu中是昂貴的。如果tasktracker運行某個reducer,則重新啓動這個reducer意味着,所有數據都應該再次重新加載到新主機上。 我記得,那個jobtracker沒有立即看到,那個 tasktracker已經死了。所以,殺死的任務不應該立即重啓。

如果你的工作負載很輕,datanodes可以永遠活着,不要讓它們脫機, 當用戶登錄時。 Datanode吃少量的內存(如果數據量很小,256M應該足夠 ),如果你的工作量很輕,不要吃太多的cpu和磁盤io的 。

作爲結論,您可以設置此類配置,但不要依賴 良好且可預測的作業執行在已審覈的工作負載上。

+0

那麼,90%的時間可用的100個節點仍然意味着它會帶來一些額外的好處,我想。但顯然這不是保證響應時間的完美設置。但也許可以讓學生在沒有購買大量額外硬件的情況下進行實驗。 –

+0

在學生操場的情況下,這種設置將起作用。我試圖描述在殺掉tasktracker的情況下會發生什麼。我建議不要打擾NFS,只是不要停止datanode。 – octo