本發明涉及大數據,特別涉及一種基于hadoop的數據處理方法。
背景技術:
云計算通過互聯網將龐大的數據存儲和計算處理程序分布到集群系統的計算機中,并且提供相應的應用程序服務。用戶在對資源提交訪問請求時,系統能夠自動地將請求切換到實際的存放資源的計算機和存儲系統。虛擬化技術的云計算平臺在海量數據處理方面取得了令人滿意的成果。但云計算將海量數據分布在大規模集群上進行并行處理,由于目前主流云計算平臺底層采用虛擬化技術,其上所有軟件和應用均運行在虛擬硬件之上,這種策略必然帶來一定程度上的性能降低。而且mapreduce內部實現機制是采用先存儲數據再讀出轉發處理的策略,當中間數據量變大、個數增多時,這種模式必然產生大量的無用的磁盤i/o操作;如果數據在遠端,這樣會增加網絡負載;如果數據在本地,則會受i/o瓶頸限制,從而降低了任務執行的效率。
技術實現要素:
為解決上述現有技術所存在的問題,本發明提出了一種基于hadoop的數據處理方法,包括:
使用異構硬件架設云基礎設施服務層,基于多級容錯的并行計算接口建立分布式計算架構。
優選地,所述基于hadoop的云計算平臺架構包括異構計算節點、基于并行計算接口的容錯單元、監控模塊、作業管理模塊、任務管理模塊、分布式數據庫和mapreduce計算框架;
所述作業管理模塊,用于保存作業隊列,管理作業的調度,監控作業的執行,支持遠程作業提交以及結果返回;所述監控模塊,用于管理可用主機列表,發現異常節點并根據負載情況對節點排序,首先選擇負載最小的節點執行任務;所述任務管理模塊用于任務劃分和分配調度,任務執行,收集并返回結果。
優選地,所述作業管理模塊中包含作業通信子模塊,根據用戶交互,實現作業提交與結果反饋;作業通信子模塊初始化后,依照用戶的設定,需要綁定的本地套接服務器地址以及作業管理子模塊的套接服務器遠程地址,并創建兩個工作線程:等待線程:循環等待接收來自任務管理模塊反饋的作業結果;發送線程,一旦用戶提交了新作業,基于作業管理子模塊的服務器地址,借助套接字把用戶輸入的作業打包發送給作業管理子模塊;作業管理子模塊等待作業通信子模塊提交給自己的作業;創建兩個工作線程:解析線程,維護本地的套接服務器,得到作業通信子模塊遠程提交的作業,解析該信息并確認該信息是否符合規則,將合格的作業綁定作業提交者的地址后放置到多優先級作業隊列中,以待被調度執行;掃描線程,循環掃描多優先級作業隊列以確定隊列中是否有較高優先級的作業,若有較高優先級的作業存在,則取出作業,依據作業構造命令行并啟動多個任務執行模塊的進程來完成本次并行計算作業;循環等待本次并行計算作業執行結束;如果是作業不是正常執行完成則判斷發生異常,則重新調度執行本次作業。
本發明相比現有技術,具有以下優點:
本發明提出了一種基于hadoop的數據處理方法,提高了云計算的效率,以滿足高性能云計算的需要。
附圖說明
圖1是根據本發明實施例的基于hadoop的數據處理方法的流程圖。
具體實施方式
下文與圖示本發明原理的附圖一起提供對本發明一個或者多個實施例的詳細描述。結合這樣的實施例描述本發明,但是本發明不限于任何實施例。本發明的范圍僅由權利要求書限定,并且本發明涵蓋諸多替代、修改和等同物。在下文描述中闡述諸多具體細節以便提供對本發明的透徹理解。出于示例的目的而提供這些細節,并且無這些具體細節中的一些或者所有細節也可以根據權利要求書實現本發明。
本發明的一方面提供了一種基于hadoop的數據處理方法。圖1是根據本發明實施例的基于hadoop的數據處理方法流程圖。
本發明設計的高性能云計算平臺不經過虛擬化,直接使用異構計算節點構建云平臺底層;采用增加多級容錯功能的并行計算接口技術和多線程技術重寫mapreduce,在計算中避免大量的無用的i/o操作,從而提高了云計算的效率,以滿足高性能云計算的需要。在節點異構環境下,基于hadoop,使用異構硬件架設云基礎設施服務層,實現作業二次調度,作業/任務回滾和動態遷移,基于多級容錯并行計算接口的建立mapreduce架構。對中間結果進行直接處理,減少不必要的i/o操作。
本發明的基于hadoop的云計算平臺架構包括異構計算節點、基于并行計算接口的容錯單元、監控模塊、作業管理模塊、任務管理模塊、分布式數據庫和mapreduce計算框架。
作業管理模塊用于保存作業隊列,管理作業的調度,監控作業的執行,提供相應的容錯,支持遠程作業提交以及結果返回。監控模塊用于管理可用主機列表,發現異常節點并根據負載情況對節點排序,以首先選擇負載最小的節點執行任務。任務管理模塊用于任務劃分和分配調度,任務執行,收集并返回結果。
作業管理模塊中包含作業通信子模塊,根據用戶交互,實現作業提交與結果反饋;作業管理子模塊據作業的管理和調度,維護作業隊列,按優先級進行作業調度;監控模塊據監控所有節點的運行情況和負載程度,并據此為任務執行模塊提供所需的主機列表文件。
任務管理模塊是作業的具體執行模塊,對作業進行分片,并對分片進行合理調度,最后收集并反饋計算結果。任務管理模塊得到作業管理與調度模塊分發的作業后,按設定的策略將作業劃分成多個任務,與監控模塊進行交互以生成調度執行并行計算任務所需的主機列表文件;然后基于并行計算接口的動態進程創建與管理模型,分配符合主機列表文件要求的負載進程主節點將任務通過map過程分發給負載節點,并從負載節點那里通過reduce過程得到對應的任務結果;歸并這些中間結果就可以得到本次并行計算作業的最終結果,最后把這個結果遠程反饋給任務提交者。一旦主節點偵測到某一個負載節點發生異常,則與監控模塊交互以產生新的主機列表文件,并分配新的負載節點來接替異常的負載節點執行任務。
作業通信子模塊初始化后,依照用戶的設定,需要綁定的本地套接服務器地址以及作業管理子模塊的套接服務器遠程地址,并創建兩個工作線程:等待線程:循環等待接收來自任務管理模塊反饋的作業結果;發送線程,一旦用戶提交了新作業,基于作業管理子模塊的服務器地址,借助套接字把用戶輸入的作業打包發送給作業管理子模塊。
作業管理子模塊等待作業通信子模塊提交給自己的作業。在工作線程中,創建了兩個工作線程。解析線程,用于維護本地的套接服務器,得到作業通信子模塊遠程提交的作業,解析該信息并確認該信息是否符合規則,將合格的作業綁定作業提交者的地址后放置到多優先級作業隊列中,以待被調度執行。掃描線程,循環掃描多優先級作業隊列以確定隊列中是否有較高優先級的作業,若有較高優先級的作業存在,則取出作業,依據作業構造命令行并啟動多個任務執行模塊的進程來完成本次并行計算作業;循環等待本次并行計算作業執行結束;如果是作業不是正常執行完成則判斷發生異常,則重新調度執行本次作業。
主節點進程啟動后,分析傳入的命令行參數以得到本次并行接口作業的相關信息。依據監控模塊生成的主機列表文件,動態分配多個負載節點并構成一個通信域,然后等待負載節點申請任務或提交任務結果。
主節點將作業分成獨立的任務,并維護一個初始值均為0的任務狀態數組,用以記錄任務執行情況。一但有負載節點申請任務,則先搜索得到狀態數組中為0的項所對應的任務,將任務分配給申請者并將狀態數組中對應項置1;如果某任務完成,則狀態數組中對應項應該被置為2;如果執行某個任務的進程異常,則狀態數組中對應項應該被重置為0,以等待重新分配給其他節點執行;如果狀態數組中標記為1的某項所對應的任務在規定時間范圍內沒有反饋結果,則判定執行該任務的進程異常,并將狀態數組中該任務對應的項重置0,以期被重新分配給其他節點執行。
如果主節點發現任務對應的狀態數組中的所有項都是2,則表明本次并行計算作業已經完成,主節點將最終的作業結果通過套接字通信遠程反饋給相對應的任務提交者。
負載節點啟動后,分析其父進程是否存在,若不存在,則拒絕執行;若存在,則判定自身是由主節點啟動。負載節點向主節點申請任務,得到任務后就按預定的業務方案執行任務;任務執行完成后,將任務的結果反饋給主節點并申請下一個任務。如果負載節點得到的任務信息是無效,則本次并行計算任務成功完成,負載節點結束業務。
在本發明提出的高性能云計算平臺中包括三級容錯方案:一級容錯即作業二次調度。當系統偵測到集群中某一節點在執行任務中異常,則系統會立即重新調度執行本次任務。二級容錯即作業/任務回滾。系統回滾作業/任務至最近檢查點處執行。如果主節點異常,則本次并行計算作業失敗,系統二次調度本次并行計算作業并回滾作業的執行狀態至最近的檢查點處并繼續執行作業;如果負載節點異常,則系統嘗試重啟異常節點并回滾其任務執行狀態至最近的檢查點處并繼續執行任務。三級容錯是動態遷移。當異常的負載節點在短時間內無法得到回滾,也就是說二級容錯失敗的情況下,系統會主動將異常的工作節點的任務遷移至其他工作節點執行。為了保證并行接口集群計算能力的穩定性,并行云計算平臺通過動態分配新的負載進程來替代異常負載進程。
本發明系統中監控模塊用于生成可用的主機列表:根據cpu核心數目和正在執行任務的進程數量比較,若進程數小于核心數則將主機名加入主機列表。若進程數不小于cpu核心數,則將主機名從主機列表中移除。監控程序中的0號進程所在的節點為監控服務器,非0進程所在的節點任務節點。進程模型的監控的具體步驟為:
1)在每個非0進程上創建一個內核對象即事件信號,執行任務時進程打開此事件信號,計算完成觸發事件信號。此信號用于獲取進程是否等待退出。
2)得到主機名,計算出正在執行任務的進程數量m和進程中己經執行完成等待退出的數量k,建立可用主機列表文件。
3)若正在執行任務的進程數量m等于進程中己經執行完成等待退出的數量k,則將此主機名寫入主機列表文件。
主機列表的更新有兩種策略:定時更新和任務調度前更新。對于定時更新,監控程序保持一直運行,調度程序和監控不發生交互;對于任務前更新,監控程序的運行發生在分配任務前,監控程序在執行任務前自動啟動更新主機列表,然后退出,主節點進程根據可用主機列表進行動態一組進程執行任務,若其中有進程任務中途失敗,則再次自動啟動監控程序更新列表,主節點進程再根據可用主機列表啟動相應的數量的進程完成失敗進程的任務。
本發明任務調度基于作業的分片。作業從作業隊列里取出來以后,先進行作業的一級分片,將一級分片分配到節點,然后在節點內進行二次分片,將二級分片分配到線程,任務的分配采用負載池加線程池的方法。對于map操作,一級分片的分配是根據空閑負載節點申請原則,計算能力強的節點申請更多的分片,計算能力弱的節點完成較少的分片。負載節點進行完map任務之后,直接將map的結果作為reduce的輸入進行第一次reduce,然后將結果發送給主節點做第二次reduce,并得到最終結果。
負載向負載池申請任務,主節點將查詢查詢一級分片表,若查到狀態值為未執行的分片,就將此分片信息發送給負載進程。當主節點在執行任務動態遷移的容錯策略吋,發送分片任務的起始點和終止點的位置,而且將待遷移的一級分片中的所有二級分片的執行信息表一起打包發送給負載。
若此作業是第一次被調度,則主節點將所有的一級分片都放入負載池進行調度。若作業不是第一次被調度,則主節點挑選狀態值為未完成的片進行調度。在執行調度的過程中主節點持續更新執行狀態表的內容。
主節點根據負載發送的負載內部狀態表的內容,若檢測到此時負載上的此一級分片執行到一定進度而未完成,則給它發送另外一個分片任務。主節點若檢測到執行狀態表中的內容都為已完成,則整個任務完成,給負載節點發送等待退出信號,此作業完成。對于負載節點,—級分片發送到負載之后,負載先對此一級分片做內存映射,然后檢測節點上所有處理器總的核心數,開啟相應數量的線程,啟動線程池執行任務。
在負載中,用負載內部狀態表代表一級分片。線程池根據負載內部狀態表,取出還沒有執行的分片執行map任務,然后將map任務的結果作為reduce任務的輸入執行reduce任務,在執行的過程中,每完成一個二級分片就更新負載內部狀態表的內容,并將執行得到結果和對負載內部狀態表的修改信息一并發給主節點,主節點再根據負載內部狀態表更新所有分片的執行狀態表。直到執行狀態全部為執行完成,所有分片執行完成。
作業從提交到得到結果的流程如下:作業通信子模塊提交優先級的作業;作業管理子模塊從任務隊列取出最高優先級的作業;主節點對作業進行分片,得到一級分片,放入負載池。負載節點向主節點申請任務,主節點通過查詢狀態表得到一級分片的信息,然后獲取到此分片中所有二級分片的執行信息打包發送給負載;負載接收到任務,對此片做內存映射和二次分片,檢測總的核心數,建立線程池,然后將分片放入線程池,線程通過負載內部狀態表取得二級任務片,直到表中內容全部為執行完成,退出線程,線程池銷毀。負載節點的每個線程執行完成一個二級任務片后進行一次reduce,將reduce結果和內部狀態表發送給主節點,主節點確定是否給此負載發送另外一個分片,若需要發送新的任務,則繼續取任務發送給負載。直到狀態表中內容全部為執行完成后,主節點給每個負載發送退出指令,負載觸發事件信號,通知監控等待退出,所有負載和主節點等待一起退出。主節點將負載發送來的結果進行reduce操作。主節點將結果發送給作業的提交者作業通信子模塊。
在節點數據緩存策略中,部署在云平臺的負載節點緩存云平臺中節點子網中的作業。將本地索引服務器被部署在每一個子網內,存儲正在所處云平臺內共享的作業,以及各個作業對應的節點列表。負載節點以資源提供者的身份向本地索引服務器注冊自己所緩存的作業。本地索引服務器組織云平臺內在線節點構建云平臺中的子網,幫助子網用戶方便地找到負載節點。管理服務器周期性地從每個云平臺內的本地索引服務器收集作業請求信息;每次運行緩存算法之后,管理服務器為每個云平臺生成兩張緩存對象清單,并且將這兩個作業列表分別發送給在云平臺中部署的兩個負載節點;每一個存儲在節點中的作業的當前狀態也周期性地上報給管理服務器。負載節點根據從管理服務器收到的作業列表,更新自己的進程空間;一旦某個新的緩存對象同步完成,負載節點就會計算它的內容hash值,并向所處云平臺內的本地索引服務器注冊作業。
當某個云平臺的用戶啟動一個作業時,該節點同時加入全局節點子網以及云平臺中的子網。并向本地索引服務器上報每個作業的運行狀態,本地索引服務器監控云平臺內子網,將云平臺內每一個活動作業的相關信息發送給管理服務器,包括作業的唯一hash標識,作業大小,正在訪問的用戶數,云平臺內當前可用的副本數,最近請求該作業的子網用戶數等。根據從本地索引服務器收集到的信息,管理服務器定期執行一次緩存算法以得出每個云平臺內的負載節點需要更新和刪除的作業。并將得出的作業清單立即發送給各個負載節點。當同步完成一個作業之后,負載節點立即向云平臺內的本地索引服務器注冊該作業。然后負載節點為本地請求該作業的用戶提供數據上傳。
進一步地,通過以下過程把待分發的作業分片主動發送給有空閑帶寬的節點。在管理服務器設置決策單元,根據收集到的信息,決定需要發送的作業,并對其進行分片,發送給輔助節點的大作業分片,并向用戶的存儲器分派存儲作業。給每個選中的發送目標節點增加了一個作業,該作業在后臺運行,該作業與用戶自主執行的小作業同時進入資源提供狀態,共用上傳帶寬。當用戶離開系統,該后臺運行的作業結束。管理服務器選擇發送目標節點,通知每個被選中的節點存儲發送目標作業的一個分片;接收到發送作業的節點從云平臺和節點子網存儲指定的作業分片。發送的作業分片存儲完成后,發送目標節點為其他存儲節點提供上傳,作為輔助節點;當分發過程結束,管理服務器向所有接收過發送作業的節點發出消息,通知其存儲器從用戶的進程空間中清除先前發送的作業分片。
綜上所述,本發明提出了一種基于hadoop的數據處理方法,提高了云計算的效率,以滿足高性能云計算的需要。
顯然,本領域的技術人員應該理解,上述的本發明的各模塊或各步驟可以用通用的計算系統來實現,它們可以集中在單個的計算系統上,或者分布在多個計算系統所組成的網絡上,可選地,它們可以用計算系統可執行的程序代碼來實現,從而,可以將它們存儲在存儲系統中由計算系統來執行。這樣,本發明不限制于任何特定的硬件和軟件結合。
應當理解的是,本發明的上述具體實施方式僅僅用于示例性說明或解釋本發明的原理,而不構成對本發明的限制。因此,在不偏離本發明的精神和范圍的情況下所做的任何修改、等同替換、改進等,均應包含在本發明的保護范圍之內。此外,本發明所附權利要求旨在涵蓋落入所附權利要求范圍和邊界、或者這種范圍和邊界的等同形式內的全部變化和修改例。