[英]Suspending hadoop nodes temporarily - background hadoop cluster
我想知道是否可以安裝“后台” hadoop群集。 我的意思是,畢竟,這意味着能夠應付有時不可用或速度緩慢的節點。
因此,假設某所大學設有計算機實驗室。 假設有100個盒子,全部裝有高檔台式機硬件,千兆位以太網,甚至可能安裝了相同的軟件。 Linux在這里也很受歡迎。
但是,這100個盒子當然是學生的台式系統 。 有時實驗室將滿,但有時實驗室將空着。 用戶數據主要存儲在中央存儲設備(例如NFS)上,因此本地磁盤使用率不高。
對於我來說,在空閑時間將系統用作Hadoop集群是一個好主意。 最簡單的設置當然是讓cron工作在晚上啟動集群,並在早上關閉集群。 但是,在白天,許多計算機也將不使用。
但是, 當任何用戶登錄時 ,Hadoop如何應對例如關閉的節點 ? 是否可以輕松地“暫停”(搶占!)hadoop中的節點,並在需要時將其移到交換位置? 理想情況下,我們將為Hadoop提供一個在掛起任務之前移走計算的機會(也可以釋放內存)。 如何進行這樣的設置? 有沒有辦法通知Hadoop節點將被掛起?
據我所知,不應停止數據節點,並且可能需要將復制增加到具有3個以上的副本。 使用YARN可能還會出現一個問題,即通過將任務跟蹤器移動到任意節點,它可能會在某個時刻被掛起。 但是也許可以控制的是,有一小組始終處於運行狀態的節點將運行任務跟蹤器。
僅stop
tasktracker
或發送SIGSTOP
(然后使用SIGCONT
恢復)是否合適? 第一個可能會給hadoop做出反應的機會,第二個可能會在用戶很快注銷時繼續更快(因為該工作可以繼續)。 YARN怎么樣?
首先,hadoop不支持“搶占”,即您所描述的方式。 Hadoop僅在檢測到任務跟蹤器死機后重新啟動任務。 因此,在您的情況下,當用戶登錄到主機時,某些腳本會簡單地殺死tasktracker,而jobtracker會將在被殺死的tasktracker上運行的所有映射器/還原器標記為FAILED。 之后,將在不同節點上重新安排此任務。
當然,這種情況不是免費的。 通過設計,映射器和化簡器將所有中間數據保留在本地主機上。 此外,化簡器直接從執行映射器的任務跟蹤器獲取映射器數據。 因此,當tasktracker被殺死時,所有這些數據都將丟失。 在使用映射器的情況下,這不是什么大問題,映射器通常只能處理相對少量的數據(千兆字節?),但是reducer會遭受更大的損失。 Reducer運行改組,這在網絡帶寬和cpu方面是昂貴的。 如果tasktracker運行某些reducer,則重新啟動該reducer意味着應再次將所有數據重新下載到新主機上。 我還記得,jobtracker不會立即看到,tasktracker已經死了。 因此,被殺死的任務不應立即重啟。
如果您的工作量很輕,則數據節點可以永久存在,用戶登錄時不要使它們脫機。 Datanode占用少量內存(如果有少量數據,則需要256M內存),如果您的工作量很輕,則不要占用大量的cpu和磁盤io。
結論是,您可以設置這樣的配置,但不要依賴於適度的工作負載來執行良好且可預測的作業執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.