簡體   English   中英

暫時掛起hadoop節點-后台hadoop集群

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM