NodeManager節點自身健康狀態檢測機制

2021-09-20 07:12:30 字數 2884 閱讀 1640

每個 nodemanager 節點內建提供了檢測自身健康狀態的機制(詳情參見nodehealthcheckerservice);通過這種機制,nodemanager 會將診斷出來的監控狀態通過心跳機制匯報給 resourcemanager,然後resourcemanager 端會通過rmnodeeventtype.status_update更新 nodemanager 的狀態;如果此時的 nodemanager 節點不健康,那麼 resourcemanager 將會把 nodemanager 狀態變為nodestate.unhealthy。關於 nodemanager 的狀態之間的轉移請參見nodemanager生命週期介紹。這種內建的健康檢測機制主要包括以下兩種:

每個 nodemanager 上都有乙個名為nodehealthscriptrunner的類,其會啟動乙個名為nodehealthmonitor-timer的 timer 定期執行(預設每個十分鐘實行一次,由參yarn.nodemanager.health-checker.interval-ms指定)使用者編寫的用於檢測 nodemanager 健康狀態的指令碼,這個指令碼是通過引數yarn.nodemanager.health-checker.script.path指定的。一旦發現以下幾種結果則認為節點處於不健康狀態:

如果執行指令碼出現了 exitcodeexception 異常,並不認為 nodemanager 節點健康出現異常,因為我們的指令碼可能編寫錯誤。nodehealthscriptrunner類涉及到的引數如下:

健康檢測指令碼這種機制有點好處:目前的 yarn 資源管理主要是記憶體核cpu,其他的比如磁碟使用、系統負載、網路等並沒有監控到,我們可以使用這種機制來主動告訴 resourcemanager 自身的監控狀態。

下面是乙個簡單的健康檢測的指令碼(假設指令碼的儲存路徑為/user/iteblog/check_memory_usage.sh),如果記憶體的使用率達到了 95% 以上,則認為此節點處於不健康的狀況:

#!/bin/bash

echo$1

echo$2

mem_usage=$(echo`free-m |awk'/^mem/ '`)

echo"usage is $mem_usage%"

if[ $mem_usage -ge95 ]then

echo'error: memory usage is greater than 95%'

else

echo'normal: memory usage is less than 95%'

fi

然後我們可以在 nodemanager 進行如下配置:

<property>

<name>yarn.nodemanager.health-checker.script.path

<value>/user/iteblog/check_memory_usage.sh

<property>

<name>yarn.nodemanager.health-checker.script.opts

<value>第乙個引數 第二個引數

除了管理員提供的健康檢測指令碼之外,nodemanager 還提供了檢測磁碟好壞的機制。檢測的磁碟目錄主要是yarn.nodemanager.local-dirsyarn.nodemanager.log-dirs引數指定的目錄,這兩個目錄分別用於儲存應用程式執行的中間結果,比如mapreduce作業中map task的中間輸出結果)和日誌檔案存放目錄列表。這兩個引數都可以配置多個目錄,多個目錄之間使用逗號分隔。如果這兩個引數配置的目錄不可用的比例達到一定的設定,則認為該節點不健康。某個目錄可不可用的定義是:執行 nodemanager 節點的程序是否對這個目錄可讀、可寫、可執行。如果這些條件都滿足,這個目錄則健康,否則該目錄就被放入 faileddirs 列表裡面。本地目錄健康檢測主要涉及到以下幾個引數:

以上兩種檢測機制都會隨著 nodemanager 節點啟動而執行,並且檢測到的狀態會隨心跳資訊傳送到 resourcemanager 端,然後 resourcemanager 端會根據相關的資訊得到當前節點的可用情況,一旦發現這個節點不健康,則會標記此節點的狀態為nodestate.unhealthy,此後將不會忘這個節點分配任務,直到該節點狀態正常。

原文:

hadoop節點nodemanager啟動失敗

在正常啟動的hadoop的時候系統沒有報錯,但是jps檢視程序的時候發現缺少了節點管理器,檢視後台的日誌程序.問題 發現如下錯誤 fatal org.apache.hadoop.yarn.server.nodemanager.nodemana ger 啟動nodemanager時出錯 org.apa...

linux開機啟動nodemanager步驟

1 編輯檔案 etc init.d nodemanagerservice 複製 如程式設計客棧下 oracle weblogic 01 vi etc init.d nodemanagerservice bin bash chkconfig 345 80 70 description start st...

unity中序列化自身節點

普通的序列化字需要用 serializedfield 屬性修飾某個類 結構體或者物件即可 當需要自身序列化自身的時候,比如做乙個節點編輯器,自身節點持有父節點和一些子節點,這個時候就不能只用 serializedfield 屬性修飾本身這個類,這樣會導致報錯,主要是因為自身序列化自身會導致死迴圈的效...