亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

面向HDFS/Hadoop存儲集群的資源監(jiān)控系統(tǒng)及方法與流程

文檔序號:12010742閱讀:1612來源:國知局
面向HDFS/Hadoop存儲集群的資源監(jiān)控系統(tǒng)及方法與流程
本發(fā)明涉及HDFS后臺云存儲的存儲管理服務器名稱節(jié)點、存儲集群中的若干數(shù)據(jù)節(jié)點,具體是通過狀態(tài)參考信息收集模塊管理、心跳協(xié)議優(yōu)化模塊管理、參考信息處理模塊管理,針對HDFS僅能對磁盤相關(guān)性能參數(shù)進行監(jiān)控這一缺陷,設計并實現(xiàn)了資源監(jiān)控模塊,支持對多維資源信息的實時收集與管理,優(yōu)化HDFS的心跳協(xié)議及相關(guān)數(shù)據(jù)結(jié)構(gòu),在支持多維信息更新的同時,增強了對節(jié)點動態(tài)加入的動態(tài)集成能力,為動態(tài)負載均衡優(yōu)化設計提供了決策依據(jù)。

背景技術(shù):
近年來,隨著網(wǎng)絡及計算能力的不斷提高,面向新型分布式環(huán)境的數(shù)據(jù)存儲技術(shù)受到業(yè)界廣泛關(guān)注,云存儲更因資源聚集復用能力及擴展性強、易于部署而成為支持“大數(shù)據(jù)處理”的熱點支撐技術(shù)而備受青睞。在面向海量數(shù)據(jù)存儲的云存儲應用領域,HDFS由于其良好特性和開源實現(xiàn),漸漸成為云存儲基本支撐平臺的主流應用文件系統(tǒng),無論在學術(shù)界還是工業(yè)界都有各種基于HDFS的研究和應用。分布式云存儲系統(tǒng)HDFS系統(tǒng)的應用場景是面對大規(guī)模用戶的文件訪問請求,工作負載主要來自于文件存儲要求和訪問請求,處理多集中于讀和寫為基礎,但HDFS僅能對磁盤容量相關(guān)性能參數(shù)進行監(jiān)控,沒有針對讀寫性能優(yōu)化提供支持的資源監(jiān)控。針對此問題,本發(fā)明設計并實現(xiàn)了一種面向HDFS/Hadoop存儲集群的資源實時監(jiān)控方法,彌補了HDFS不能對影響數(shù)據(jù)讀寫性能的狀態(tài)信息監(jiān)控的缺陷,動態(tài)收集數(shù)據(jù)節(jié)點實時信息,并將信息數(shù)據(jù)傳輸?shù)矫Q節(jié)點。

技術(shù)實現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題是針對HDFS僅能對磁盤容量相關(guān)性能參數(shù)進行監(jiān)控,沒有針對讀寫性能優(yōu)化提供支持的資源監(jiān)控的局限性,提出了一種面向HDFS/Hadoop存儲集群的資源實時監(jiān)控系統(tǒng)及其監(jiān)控方法,該系統(tǒng)收集數(shù)據(jù)讀寫性能相關(guān)的關(guān)鍵狀態(tài)信息磁盤I/O使用率、CPU使用率和內(nèi)存使用率,支持數(shù)據(jù)節(jié)點端多維資源信息的實時收集,名稱節(jié)點端并以一定頻率實時更新與管理,實現(xiàn)名稱節(jié)點對于數(shù)據(jù)節(jié)點狀態(tài)性能信息的實時監(jiān)控和集中式管理。本發(fā)明所述的一種面向HDFS/Hadoop存儲集群的資源監(jiān)控系統(tǒng),包括HDFS存儲管理服務器名稱節(jié)點、HDFS存儲集群中的若干數(shù)據(jù)節(jié)點,此外其還設有:1)狀態(tài)參考信息收集模塊:部署在HDFS存儲集群的數(shù)據(jù)節(jié)點上,收集數(shù)據(jù)讀寫性能相關(guān)的關(guān)鍵狀態(tài)信息,支持數(shù)據(jù)節(jié)點端多維資源信息的實時收集與保存,并以一定頻率實時更新與管理;2)心跳協(xié)議優(yōu)化模塊:部署在HDFS存儲集群的數(shù)據(jù)節(jié)點上,負責將節(jié)點參考信息傳送到名稱節(jié)點,以一定的頻率實時獲取數(shù)據(jù)節(jié)點的實時狀態(tài)信息,通過優(yōu)化心跳傳輸協(xié)議,以一定的頻率RPC調(diào)用名稱節(jié)點的傳輸方法,傳送當前節(jié)點的實時狀態(tài)信息,保證傳送過去的數(shù)據(jù)最新,支持多維信息的推送;3)參考信息處理模塊:部署在HDFS存儲管理服務器名稱節(jié)點,名稱節(jié)點得到實時狀態(tài)數(shù)據(jù)后,通過優(yōu)化相關(guān)數(shù)據(jù)結(jié)構(gòu)和方法,處理數(shù)據(jù)節(jié)點傳送過來的狀態(tài)信息,更新和保存數(shù)據(jù)節(jié)點的最新性能狀態(tài)參考信息,使名稱節(jié)點端實時了解數(shù)據(jù)節(jié)點提供數(shù)據(jù)存儲和訪問的性能狀態(tài)。本發(fā)明還提供了一種面向HDFS/Hadoop存儲集群的資源監(jiān)控方法,其包括以下步驟:1)從系統(tǒng)需要的角度,確定數(shù)據(jù)節(jié)點端收集的狀態(tài)參考信息,將影響讀和寫性能的關(guān)鍵影響因素磁盤I/O使用率、CPU使用率和內(nèi)存使用率這三者共同納入資源監(jiān)控的狀態(tài)信息,加入類DatanodeStat用于存儲上述三個新增入的狀態(tài)信息;2)數(shù)據(jù)節(jié)點啟動后,后臺收集狀態(tài)信息的線程collectDatanodeStat在數(shù)據(jù)節(jié)點端實時獲取集群中存儲節(jié)點的實時狀態(tài)信息,更新到DatanodeStat類實例中,保證它所記錄的參考數(shù)據(jù)信息能反映當前節(jié)點的狀態(tài);3)數(shù)據(jù)節(jié)點實時從DatanodeStat對象中獲取數(shù)據(jù)節(jié)點的實時狀態(tài)信息磁盤I/O使用率、CPU使用率和內(nèi)存使用率,線程collectDatanodeStat在數(shù)據(jù)節(jié)點端實時獲取集群中存儲節(jié)點的實時狀態(tài)信息;新加入的狀態(tài)信息從源監(jiān)控模塊里得到,收集性能參考信息的線程不斷的獲取節(jié)點狀態(tài)信息,并將數(shù)據(jù)保存到全局DatanodeStat類實例里,每收集一次信息就對其更新一次,保證數(shù)據(jù)最新;4)心跳協(xié)議sendHeartbeat負責將數(shù)據(jù)節(jié)點的狀態(tài)信息發(fā)送給名稱節(jié)點,之后名稱節(jié)點把心跳協(xié)議的工作移交給FSNamesystem的handleHeartbeat,更新名稱節(jié)點中對這個數(shù)據(jù)節(jié)點的狀態(tài)信息;5)名稱節(jié)點得到實時狀態(tài)數(shù)據(jù)后,通過優(yōu)化相關(guān)數(shù)據(jù)結(jié)構(gòu)和方法,處理數(shù)據(jù)節(jié)點傳送過來的狀態(tài)信息,更新和保存數(shù)據(jù)節(jié)點的最新性能狀態(tài)參考信息,名稱節(jié)點端實時了解數(shù)據(jù)節(jié)點提供存儲訪問服務的性能狀況。步驟2)具體流程是:21)數(shù)據(jù)節(jié)點啟動后臺收集狀態(tài)信息的線程collectDatanodeStat,在數(shù)據(jù)節(jié)點端實時獲取集群中存儲節(jié)點的實時狀態(tài)信息;22)數(shù)據(jù)節(jié)點從系統(tǒng)文件/proc/stat中獲取內(nèi)核活動信息,從不同的時間點對數(shù)據(jù)采樣,計算出CPU利用率;23)數(shù)據(jù)節(jié)點從系統(tǒng)文件/proc/meminfo文件中獲取信息描述系統(tǒng)內(nèi)存使用狀況,從不同的時間點對數(shù)據(jù)采樣,計算出內(nèi)存利用率;24)數(shù)據(jù)節(jié)點從iostat中可以得到磁盤讀和寫次數(shù)、合并讀和合并寫次數(shù)等,磁盤I/O利用率則可以用單位時間讀寫扇區(qū)次數(shù)rsec/s、wsec/s和設備I/O操作的平均服務時間svctm,得到單位時間內(nèi)I/O操作所占的百分比,util百分比=(rsec/s+wsec/s)*(svctm/1000);25)從數(shù)據(jù)節(jié)點的Linux系統(tǒng)中獲取到磁盤I/O使用率、CPU使用率和內(nèi)存使用率獲這些狀態(tài)信息后,通過取后set方法更新DatanodeStat中的各成員,保證它所記錄的參考數(shù)據(jù)信息能反映當前節(jié)點的狀態(tài);26)線程collectDatanodeStat不斷的重復上面132)~135)的工作,保證DatanodeStat類對象中保存的是當前數(shù)據(jù)節(jié)點最新狀態(tài)信息。步驟3)具體流程是:31)數(shù)據(jù)節(jié)點在offerservice里取得名稱節(jié)點代理proxy;32)數(shù)據(jù)節(jié)點利用這個名稱節(jié)點的proxy,調(diào)用心跳協(xié)議sendHeartbeat將磁盤、線程信息、CPU、內(nèi)存和磁盤I/O信息一起發(fā)送出去;33)心跳協(xié)議sendHeartbeat將數(shù)據(jù)推送到名稱節(jié)點端后,名稱節(jié)點把心跳協(xié)議的工作移交給FSNamesystem的handleHeartbeat;34)名稱節(jié)點通過心跳協(xié)議中的DatanodeRegistration識別出對應的數(shù)據(jù)節(jié)點,更新名稱節(jié)點中對應數(shù)據(jù)節(jié)點的狀態(tài)信息;35)心跳協(xié)議將新數(shù)據(jù)節(jié)點推送過來的磁盤I/O使用率、CPU使用率和內(nèi)存使用率,寫入名稱節(jié)點端相關(guān)數(shù)據(jù)結(jié)構(gòu),handleHeartbeat除了更新磁盤容量信息以外,還要更新以上三個狀態(tài)信息,保存最新的狀態(tài)數(shù)據(jù)。步驟4)具體流程是:41)名稱節(jié)點端處理心跳協(xié)議handleHeartbeat收到磁盤I/O使用率、CPU使用率和內(nèi)存使用率這些數(shù)據(jù)節(jié)電狀態(tài)信息后,處理過程交由名稱節(jié)點端描述數(shù)據(jù)節(jié)點性能狀態(tài)信息的類DatanodeDescriptor;42)DatanodeDescriptor是名稱節(jié)點內(nèi)用于描述數(shù)據(jù)節(jié)點的內(nèi)部類,它擴展自DatanodeInfo,DatanodeInfo里有一些反應節(jié)點性能的參數(shù)信息,CPU、內(nèi)存和磁盤IO性能這類狀態(tài)信息與DatanodeInfo的狀態(tài)信息屬性相似,把這些狀態(tài)信息作為DatanodeInfo的屬性加入進去,并作一系列的改變;DatanodeInfo中加入針對這三個狀態(tài)信息的set方法,節(jié)點排序線程和節(jié)點分配策略要用到這些狀態(tài)參數(shù),需要獲取這些數(shù)據(jù)的途徑,DatanodeInfo加入三個成員的get方法;存儲文件信息的fsimage映射文件,在數(shù)據(jù)節(jié)點信息改變的情況下,需將數(shù)據(jù)節(jié)點這些更新了的信息按順序?qū)戇M文件里,更新元文件信息,以及按順序讀出文件中狀態(tài)信息,即DatanodeInfo的write和readField方法。write方法主要負責把狀態(tài)信息序列化存儲起來,readFields讀取序列化的信息以及write和readField方法。write方法主要負責把狀態(tài)信息序列化存儲起來,readFields讀取序列化的信息;43)名稱節(jié)點在handleHeartbeat更新數(shù)據(jù)節(jié)點狀態(tài)時用到了DatanodeInfo的updateHeartbeat來更新信息,更新和保存數(shù)據(jù)節(jié)點的最新性能狀態(tài)參考信息,名稱節(jié)點端實時了解數(shù)據(jù)節(jié)點提供存儲訪問服務的性能狀況。本發(fā)明針對HDFS僅能對磁盤容量相關(guān)性能參數(shù)進行監(jiān)控,沒有針對讀寫性能優(yōu)化提供支持的問題,設計并實現(xiàn)了一種面向HDFS/Hadoop存儲集群的資源實時監(jiān)控方法,彌補了HDFS不能對影響數(shù)據(jù)讀寫性能的狀態(tài)信息監(jiān)控的缺陷,動態(tài)收集數(shù)據(jù)節(jié)點實時信息,并將信息數(shù)據(jù)傳輸?shù)矫Q節(jié)點。附圖說明圖1系統(tǒng)架構(gòu)圖;圖2系統(tǒng)模塊交互圖;圖3狀態(tài)信息收集圖;圖4心跳協(xié)議優(yōu)化圖;圖5參考信息處理圖;圖6DatanodeDescriptor層次結(jié)構(gòu)圖。具體實施方式本發(fā)明提供了一種面向HDFS/Hadoop存儲集群的資源實時監(jiān)控方法,為了更好的說明其設計和實現(xiàn)方法,下面結(jié)合附圖進行詳細說明。如圖1是基于HDFS后臺云存儲集群中的系統(tǒng)架構(gòu)圖,本發(fā)明涉及到的系統(tǒng)架構(gòu)中的兩個部分:1)HDFS存儲管理服務器名稱節(jié)點。名稱節(jié)點是整個系統(tǒng)中起控制作用的總調(diào)度師。系統(tǒng)啟動時,名稱節(jié)點讀取相應配置文件中,得到默認副本數(shù),最大連接數(shù),最大堆空間,最大帶寬限制等這些集群部署信息和數(shù)據(jù)控制信息。名稱節(jié)點保存數(shù)據(jù)節(jié)點和文件的元數(shù)據(jù)信息,如數(shù)據(jù)節(jié)點的狀態(tài)信息DatanodeDescriptor,文件塊block,相應編碼矩陣信息InodeFile,每個文件塊和存儲它的數(shù)據(jù)節(jié)點映射信息blockmap等,這些數(shù)據(jù)在讀寫過程中被更新或訪問,系統(tǒng)運行中起樞紐作用。2)HDFS存儲集群中的若干數(shù)據(jù)節(jié)點。HDFS集群由大量廉價、異構(gòu)的機器組成,面向大文件存儲,提供的多副本容錯和實用性適合于拷貝操作。數(shù)據(jù)節(jié)點是文件存儲過程的具體實施者,客戶端從名稱節(jié)點處得到數(shù)據(jù)節(jié)點列表后,直接與數(shù)據(jù)節(jié)點通信,將數(shù)據(jù)塊直接寫入對應的數(shù)據(jù)節(jié)點中,或讀出相應的數(shù)據(jù)塊信息,處理完后ACK給名稱節(jié)點確認任務完成。此外,數(shù)據(jù)節(jié)點是資源監(jiān)控的數(shù)據(jù)收集者和信息傳輸者。數(shù)據(jù)節(jié)點定期更新其本身狀態(tài)信息,并將這些負載信息實時的發(fā)送給名稱節(jié)點作為分配節(jié)點基礎參考信息。集群系統(tǒng)啟動時,數(shù)據(jù)節(jié)點和名稱節(jié)點均要初始化,執(zhí)行一系列啟動性工作,為接下來提供系統(tǒng)服務做準備。數(shù)據(jù)節(jié)點的初始化工作除完成自身文件系統(tǒng)信息初始化,校驗初始文件系統(tǒng)信息正確性外,還要向名稱節(jié)點注冊注,向名稱節(jié)點登記節(jié)點自身的標識信息,匯報數(shù)據(jù)塊信息。名稱節(jié)點檢查這些信息,并在全局數(shù)據(jù)結(jié)構(gòu)中維護數(shù)據(jù)節(jié)點的標識信息,狀態(tài)信息和數(shù)據(jù)塊信息,進行自身的一些更新工作。名稱節(jié)點啟動時,系統(tǒng)讀取日志文件edits與映像文件fsimage,將這兩者的內(nèi)容合并得到最新的系統(tǒng)目錄樹,保證當前的系統(tǒng)狀態(tài)最新,然后將最新的狀態(tài)更新到映像文件fsimage中。平時的運行過程中,為保證效率,名稱節(jié)點只從當前映像文件中fsimage讀取信息,合并工作由第二名稱節(jié)點完成。啟動工作完成后數(shù)據(jù)節(jié)點和名稱節(jié)點相互配合完成資源監(jiān)控,圖2展示的數(shù)據(jù)節(jié)點和名稱節(jié)點中三大模塊交互圖。狀態(tài)參考信息收集模塊部署在HDFS存儲集群的數(shù)據(jù)節(jié)點上,數(shù)據(jù)節(jié)點啟動后臺收集狀態(tài)信息的線程collectDatanodeStat,在數(shù)據(jù)節(jié)點端以一定的頻率實時獲取集群中存儲節(jié)點的實時狀態(tài)信息,更新到DatanodeStat類實例中,保證它所記錄的參考數(shù)據(jù)信息能反映當前節(jié)點的狀態(tài)性能。狀態(tài)參考信息收集的具體步驟是:11)HDFS存儲處理多集中于讀和寫,從系統(tǒng)需要的角度,確定數(shù)據(jù)節(jié)點端收集的狀態(tài)參考信息,將影響讀和寫性能的關(guān)鍵影響因素磁盤I/O使用率、CPU使用率和內(nèi)存使用率這三者共同納入資源監(jiān)控的狀態(tài)信息,加入的一個類DatanodeStat用于存儲新增入的狀態(tài)信息;性能參考指標種類的選取,根據(jù)具體系統(tǒng)和應用需求而定,不同的使用場景下,影響服務效率的主要影響因素不一樣,HDFS集群主要是提供數(shù)據(jù)存儲和訪問服務,因此選取對數(shù)據(jù)讀寫性能影響比較大的下列屬性的組合:內(nèi)存利用率,CPU利用率,磁盤I/O利用率,也就是說在指標評價體系中引入磁盤I/O、CPU和內(nèi)存這三者作為負載的多評價指標,數(shù)據(jù)節(jié)點端的類DatanodeStat就用來保存這些屬性信息。12)加入的一個類DatanodeStat用于存儲新增入的狀態(tài)信息磁盤I/O使用率、CPU使用率和內(nèi)存使用率,對于每個數(shù)據(jù)節(jié)點來說只有一個DatanodeStat對象。反應狀態(tài)信息的DatanodeStat類實例起橋梁作用,用于數(shù)據(jù)節(jié)點收集到的狀態(tài)信息的存儲和名稱節(jié)點實時參考信息的獲取。13)數(shù)據(jù)節(jié)點啟動后臺收集狀態(tài)信息的線程collectDatanodeStat,在數(shù)據(jù)節(jié)點端以一定的頻率實時獲取集群中存儲節(jié)點的實時狀態(tài)信息,更新到DatanodeStat類實例中,保證它所記錄的參考數(shù)據(jù)信息能反映當前節(jié)點的狀態(tài)。上述步驟13)流程是:131)數(shù)據(jù)節(jié)點啟動后臺收集狀態(tài)信息的線程collectDatanodeStat,在數(shù)據(jù)節(jié)點端以一定的頻率實時獲取集群中存儲節(jié)點的實時狀態(tài)信息;132)數(shù)據(jù)節(jié)點從系統(tǒng)文件/proc/stat中獲取內(nèi)核活動信息,從不同的時間點對數(shù)據(jù)采樣,計算出CPU利用率;133)數(shù)據(jù)節(jié)點從系統(tǒng)文件/proc/meminfo文件中獲取信息描述系統(tǒng)內(nèi)存使用狀況,從不同的時間點對數(shù)據(jù)采樣,計算出內(nèi)存利用率;134)數(shù)據(jù)節(jié)點從iostat中可以得到磁盤讀和寫次數(shù)、合并讀和合并寫次數(shù)等,磁盤I/O利用率則可以用單位時間讀寫扇區(qū)次數(shù)rsec/s、wsec/s和設備I/O操作的平均服務時間svctm(毫秒),得到單位時間內(nèi)I/O操作所占的百分比。util百分比=(rsec/s+wsec/s)*(svctm/1000)。與上面相同,多次取數(shù)據(jù)流中的值來計算利用率;135)從數(shù)據(jù)節(jié)點的Linux系統(tǒng)中獲取到磁盤I/O使用率、CPU使用率和內(nèi)存使用率獲等這些狀態(tài)信息后,通過取后set方法更新DatanodeStat中的各成員,保證它所記錄的參考數(shù)據(jù)信息能反映當前節(jié)點的狀態(tài)。心跳協(xié)議優(yōu)化模塊將節(jié)點參考信息傳送到名稱節(jié)點,以一定的頻率實時從DatanodeStat對象中獲取數(shù)據(jù)節(jié)點的實時狀態(tài)信息磁盤I/O使用率、CPU使用率和內(nèi)存使用率,通過優(yōu)化心跳傳輸協(xié)議,以一定的頻率RPC調(diào)用心跳協(xié)議sendHeartbeat將數(shù)據(jù)推送到名稱節(jié)點端后,名稱節(jié)點把心跳協(xié)議的工作移交給FSNamesystem的handleHeartbeat,更新名稱節(jié)點中對這個數(shù)據(jù)節(jié)點的狀態(tài)信息。心跳協(xié)議優(yōu)化的具體步驟是:21)數(shù)據(jù)節(jié)點以一定的頻率實時從DatanodeStat對象中獲取數(shù)據(jù)節(jié)點的實時狀態(tài)信息磁盤I/O使用率、CPU使用率和內(nèi)存使用率,線程collectDatanodeStat在數(shù)據(jù)節(jié)點端以一定的頻率實時獲取集群中存儲節(jié)點的實時狀態(tài)信息;新加入的狀態(tài)信息從源監(jiān)控模塊里得到,收集性能參考信息的線程不斷的獲取節(jié)點狀態(tài)信息,并將數(shù)據(jù)保存到全局DatanodeStat類實例里,每收集一次信息就對其更新一次,保證數(shù)據(jù)最新22)優(yōu)化后的心跳協(xié)議sendHeartbeat跟以前相比,傳遞的參數(shù)多了反應數(shù)據(jù)節(jié)點實時狀態(tài)的磁盤I/O使用率、CPU使用率和內(nèi)存使用率;由于HDFS中名稱節(jié)點一般不主動與數(shù)據(jù)節(jié)點通信,數(shù)據(jù)節(jié)點的狀態(tài)信息需由數(shù)據(jù)節(jié)點主動發(fā)起連接,這些新加入的狀態(tài)信息磁盤I/O使用率、CPU使用率和內(nèi)存使用率需要通過優(yōu)化心跳協(xié)議RPC調(diào)用傳過去;數(shù)據(jù)節(jié)點啟動對心跳協(xié)議的RPC調(diào)用,心跳是針對名稱節(jié)點的方法,具體實現(xiàn)在名稱節(jié)點端,心跳協(xié)議對于名稱節(jié)點端而言,是在啟動時就開啟監(jiān)聽的行為。23)優(yōu)化后的心跳協(xié)議sendHeartbeat將數(shù)據(jù)推送到名稱節(jié)點端后,名稱節(jié)點把心跳協(xié)議的工作移交給FSNamesystem的handleHeartbeat,更新名稱節(jié)點中對這個數(shù)據(jù)節(jié)點的狀態(tài)信息。以往的更新只是有關(guān)磁盤容量的信息,心跳協(xié)議優(yōu)化后系統(tǒng)也優(yōu)化了名稱節(jié)點端相關(guān)數(shù)據(jù)結(jié)構(gòu),加入了多的三個狀態(tài)信息,handleHeartbeat除了更新磁盤容量信息以外,還要更新新加入的狀態(tài)信息,保存最新的狀態(tài)數(shù)據(jù)。上述步驟23)流程是:231)數(shù)據(jù)節(jié)點在offerservice里取得名稱節(jié)點代理proxy;232)數(shù)據(jù)節(jié)點利用這個名稱節(jié)點的proxy,調(diào)用心跳協(xié)議sendHeartbeat將磁盤、線程信息、CPU、內(nèi)存和磁盤I/O信息一起發(fā)送出去;233)優(yōu)化后的心跳協(xié)議sendHeartbeat將數(shù)據(jù)推送到名稱節(jié)點端后,名稱節(jié)點把心跳協(xié)議的工作移交給FSNamesystem的handleHeartbeat;234)名稱節(jié)點通過心跳協(xié)議中的DatanodeRegistration識別出對應的數(shù)據(jù)節(jié)點,更新名稱節(jié)點中對應數(shù)據(jù)節(jié)點的狀態(tài)信息。235)以往的更新只是有關(guān)磁盤容量的信息,心跳協(xié)議優(yōu)化后系統(tǒng)也優(yōu)化了名稱節(jié)點端相關(guān)數(shù)據(jù)結(jié)構(gòu),加入了多的三個狀態(tài)信息,handleHeartbeat除了更新磁盤容量信息以外,還要更新新加入的狀態(tài)信息,保存最新的狀態(tài)數(shù)據(jù)。參考信息處理模塊在名稱節(jié)點端實現(xiàn),得到實時狀態(tài)數(shù)據(jù)后,通過優(yōu)化相關(guān)數(shù)據(jù)結(jié)構(gòu)DatanodeDescriptor,處理數(shù)據(jù)節(jié)點傳送過來的狀態(tài)信息,更新和保存數(shù)據(jù)節(jié)點的最新性能狀態(tài)參考信息,名稱節(jié)點端實時了解數(shù)據(jù)節(jié)點提供存儲訪問服務的性能狀況。參考信息處理的流程是:31)名稱節(jié)點端處理心跳協(xié)議handleHeartbeat收到磁盤I/O使用率、CPU使用率和內(nèi)存使用率這些數(shù)據(jù)節(jié)電狀態(tài)信息后,處理過程交由名稱節(jié)點端描述數(shù)據(jù)節(jié)點性能狀態(tài)信息的類DatanodeDescriptor。32)DatanodeDescriptor是名稱節(jié)點內(nèi)用于描述數(shù)據(jù)節(jié)點的內(nèi)部類,它擴展自DatanodeInfo,DatanodeInfo里有一些反應節(jié)點性能的參數(shù)信息,CPU、內(nèi)存和磁盤IO性能這類狀態(tài)信息與DatanodeInfo的狀態(tài)信息屬性相似,把這些狀態(tài)信息作為DatanodeInfo的屬性加入進去,并作一系列的改變;DatanodeInfo中加入針對這三個狀態(tài)信息的set方法,節(jié)點排序線程和節(jié)點分配策略要用到這些狀態(tài)參數(shù),需要獲取這些數(shù)據(jù)的途徑,DatanodeInfo加入三個成員的get方法;存儲文件信息的fsimage映射文件,在數(shù)據(jù)節(jié)點信息改變的情況下,需將數(shù)據(jù)節(jié)點這些更新了的信息按順序?qū)戇M文件里,更新元文件信息,以及按順序讀出文件中狀態(tài)信息,即DatanodeInfo的write和readField方法。write方法主要負責把狀態(tài)信息序列化存儲起來,readFields讀取序列化的信息以及write和readField方法。write方法主要負責把狀態(tài)信息序列化存儲起來,readFields讀取序列化的信息;33)名稱節(jié)點在handleHeartbeat更新數(shù)據(jù)節(jié)點狀態(tài)時用到了DatanodeInfo的updateHeartbeat來更新信息,更新和保存數(shù)據(jù)節(jié)點的最新性能狀態(tài)參考信息,名稱節(jié)點端實時了解數(shù)據(jù)節(jié)點提供存儲訪問服務的性能狀況。狀態(tài)參考信息收集模塊的重點在于指標的選取與獲取。參考指標種類的選取,根據(jù)具體系統(tǒng)和應用需求而定,HDFS集群主要是提供數(shù)據(jù)存儲和訪問服務,因此選取對數(shù)據(jù)讀寫性能影響比較大的下列屬性的組合:內(nèi)存利用率,CPU利用率,磁盤I/O利用率,也就是說在指標評價體系中引入磁盤I/O、CPU和內(nèi)存這三者作為負載的多評價指標。三個狀態(tài)參數(shù)獲取并存儲的方法分別如下:1)數(shù)據(jù)節(jié)點從系統(tǒng)文件/proc/stat中獲取內(nèi)核活動信息,從不同的時間點對數(shù)據(jù)采樣,計算出CPU利用率;2)數(shù)據(jù)節(jié)點從系統(tǒng)文件/proc/meminfo文件中獲取信息描述系統(tǒng)內(nèi)存使用狀況,從不同的時間點對數(shù)據(jù)采樣,計算出內(nèi)存利用率;3)數(shù)據(jù)節(jié)點從iostat中可以得到磁盤讀和寫次數(shù)、合并讀和合并寫次數(shù)等,磁盤I/O利用率則可以用單位時間讀寫扇區(qū)次數(shù)rsec/s、wsec/s和設備I/O操作的平均服務時間svctm(毫秒),得到單位時間內(nèi)I/O操作所占的百分比。util百分比=(rsec/s+wsec/s)*(svctm/1000)。與上面相同,多次取數(shù)據(jù)流中的值來計算利用率;4)從數(shù)據(jù)節(jié)點的Linux系統(tǒng)中獲取到磁盤I/O使用率、CPU使用率和內(nèi)存使用率獲等這些狀態(tài)信息后,通過取后set方法更新DatanodeStat中的各成員,保證它所記錄的參考數(shù)據(jù)信息能反映當前節(jié)點的最新狀態(tài)。數(shù)據(jù)節(jié)點收集到節(jié)點最新狀態(tài)信息并保存至DatanodeStat類對象中后,心跳協(xié)議優(yōu)化模塊負責將這些多維信息推送到名稱節(jié)點端,如圖4所示。其處理步驟如下:1、數(shù)據(jù)節(jié)點啟動后,線程調(diào)用offerservice模塊,offerservice分別以一定的頻率調(diào)用數(shù)據(jù)塊匯報模塊blockReport和心跳協(xié)議sendHeartbeat。優(yōu)化后的心跳協(xié)議發(fā)送的數(shù)據(jù)包括從全局DatanodeStat類實例中獲取的系統(tǒng)CPU、memory和磁盤I/O信息。2、心跳協(xié)議是數(shù)據(jù)節(jié)點對名稱節(jié)點的RPC調(diào)用,處理由名稱節(jié)點負責,而Namenode則把處理過程移交給FSNamesystem的handleHeartbeat,3、優(yōu)化后的handleHeartbeat跟以前相比,參數(shù)多了新加入的狀態(tài)信息,handleHeartbeat將數(shù)據(jù)處理交由DatanodeDescriptor,updateHeartbeat更新名稱節(jié)點中對這個數(shù)據(jù)節(jié)點的狀態(tài)信息。4以往的更新只是有關(guān)磁盤容量的信息,優(yōu)化后的系統(tǒng)也優(yōu)化了DatanodeDescriptor的數(shù)據(jù)結(jié)構(gòu),加入了多的三個狀態(tài)信息,因此updateHeartbeat此時除了更新磁盤容量信息以外,還要更新新加入的狀態(tài)信息,保存最新的狀態(tài)數(shù)據(jù)。名稱節(jié)點在收到數(shù)據(jù)節(jié)點的心跳后參考信息處理模塊的處理流程做如圖5所示:1數(shù)據(jù)節(jié)點初始化時先獲得名稱節(jié)點的一個代理。2數(shù)據(jù)節(jié)點啟動對心跳協(xié)議的RPC調(diào)用,心跳是針對名稱節(jié)點的方法,具體實現(xiàn)在namenode端,心跳協(xié)議對于namenode端而言,是在啟動時就開啟監(jiān)聽的行為,其具體實現(xiàn)在server的namenode包下namenode這個描述名稱節(jié)點啟動行為的類里??夹畔⑻幚砟K的處理關(guān)鍵在于狀態(tài)信息保存類DatanodeDescriptor的優(yōu)化上上,其結(jié)構(gòu)層次如圖6所示。DatanodeDescriptor是名稱節(jié)點內(nèi)用于描述數(shù)據(jù)節(jié)點的內(nèi)部類,它擴展自DatanodeInfo,DatanodeInfo里有一些反應節(jié)點性能的參數(shù)信息,CPU、內(nèi)存和磁盤IO性能這類狀態(tài)信息與DatanodeInfo的狀態(tài)信息屬性相似,把這些狀態(tài)信息作為DatanodeInfo的屬性加入進去,并作一系列的改變;DatanodeInfo中加入針對這三個狀態(tài)信息的set方法,節(jié)點排序線程和節(jié)點分配策略要用到這些狀態(tài)參數(shù),需要獲取這些數(shù)據(jù)的途徑,DatanodeInfo加入三個成員的get方法;存儲文件信息的fsimage映射文件,在數(shù)據(jù)節(jié)點信息改變的情況下,需將數(shù)據(jù)節(jié)點這些更新了的信息按順序?qū)戇M文件里,更新元文件信息,以及按順序讀出文件中狀態(tài)信息,即DatanodeInfo的write和readField方法。write方法主要負責把狀態(tài)信息序列化存儲起來,readFields讀取序列化的信息以及write和readField方法。write方法主要負責把狀態(tài)信息序列化存儲起來,readFields讀取序列化的信息;名稱節(jié)點在handleHeartbeat更新數(shù)據(jù)節(jié)點狀態(tài)時用到了DatanodeInfo的updateHeartbeat來更新信息,更新和保存數(shù)據(jù)節(jié)點的最新性能狀態(tài)參考信息,名稱節(jié)點端實時了解數(shù)據(jù)節(jié)點提供存儲訪問服務的性能狀況。
當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1