本發明專利技術公開了一種HDFS運行時數據塊平衡方法,該方法首先對節點本地任務列表進行預處理,為每一個節點劃分出完成本地任務和非完全本地任務,以提供啟動HDFS數據塊平衡判斷的依據。接著對各個節點的運行速率就行評估和任務請求預測。完成以上步驟之后對各個節點的分配過程進行設計和實現。之后選擇合適的節點間進行數據塊的移動,從而數據塊的分布就可以匹配預測的節點任務請求序列,最終達到數據塊平衡的目的。本發明專利技術提出基于運行時數據塊移動HDFS平衡策略,通過預測節點任務請求提前判斷可能出現的非本地map任務執行,并在相應的節點間移動合適的數據塊,使得節點發出實際任務請求時候能夠得到本地map任務的分配響應,從而提高Map階段的完成效率。
【技術實現步驟摘要】
一種HDFS運行時數據塊平衡方法
本專利技術屬于計算機
,涉及一種數據塊平衡方法,尤其是一種云計算環境下HDFS (Hadoop Distributed File System)在運行過程中數據塊平衡方法。
技術介紹
Hadoop是由Apache開源組織開發的一個高可靠性和高可擴展性的存儲與分布式并行計算平臺,最早是作為開源搜索引擎項目Nutch的基礎平臺而開發的,之后從Nutch項目中獨立出來,成為典型的開源云計算平臺之一。Hadoop核心實現了按塊存儲的分布式文件系統(Hadoop Distributed File System,HDFS)以及用于分布式計算的MapReduce計算模型。HDFS為Hadoop集群提供由眾多節點組成的存儲系統,在存儲大規模數據文件時,會將文件切分成多個相同大小的數據塊(最后一份數據塊例外),分布在集群中所有節點上。 為了保證可靠性,HDFS會依據配置為每一份數據塊創建多個副本,并放置在集群的不同節點上。HDFS為上層MapReduce計算引擎提供數據存儲服務。Hadoop MapReduce將應用劃分成許多小任務并行執行,每個小任務就對計算節點本地存儲的數據塊進行處理。HDFS文件系統采用分塊機制分布式存儲數據集,并通過數據塊冗余策略來提高系統可靠性,每個數據塊在系統中都有多個副本同時存在,這些副本分布在系統中多個機架內的多個節點上,防止因單個節點出現故障造成數據塊的丟失。此外,這種分布式冗余機制能保證文件的并發讀取,使得HDFS更適合“一次寫,多次讀”的數據處理模式。為實現這種數據塊冗余策略,HDFS文件系統在寫入數據時必須保證有多個副本同時寫入。HDFS文件系統在寫入數據流時需先通過NameNode獲取多個節點構成節點管線, 當數據流到達管線中的第一個節點時,該節點存儲數據并發送給管線中的第二個節點。同樣的,第二個節點存儲數據并發送給管線中的第三個節點……以此類推,完成多份副本的寫入。HDFS文件系統在放置數據塊及其副本時綜合考慮以下幾點I)當提交數據的節點也是HDFS文件系統中存儲數據塊的節點時,該節點上放置一份數據塊的備份;2)—個數據塊的備份必須分布在多個機架上,避免單個機架故障導致整個數據不可用;3)與提交數據節點處于同一個機架內的其他節點上也必須有數據塊的備份,這樣可以盡量減少機架間的通信和IO開銷;4)在滿足前面條件的前提下兼顧考慮節點存儲空間的使用率,盡可能保證各個節點存儲使用率平衡。Hadoop Map階段是整個MapReduce作業執行的第一階段,主要完成將外部輸入數據轉化為〈Key,Value)形式的中間數據,提供給后續Reduce階段作為輸入數據。分布式并行處理環境下,Hadoop Map階段使用分布式文件系統HDFS作為輸入數據源,并在“移動計算比移動數據更經濟”的指導原則下,將用戶在提交作業時指定的Map處理過程分配到各個HDFS數據塊存儲節點上執行。當某個節點被分配的處理過程所需的輸入數據剛好在該節點上存儲時,稱該處理過程滿足數據本地性。Hadoop MapReduce通過節點任務請求分配機制避免了多個數據塊副本重復處理的問題。但從Hadoop Map階段執行過程的分析可知,Map任務輸入數據的本地性對Map任務的執行速率也會產生很大影響。當Map輸入數據與Map任務執行在同一個節點上時將節省數據塊網絡傳輸開銷,提高Map任務執行速率。在現有Hadoop體系結構中,HDFS數據塊副本的分布狀態通過Hadoop任務調度器直接影響Map任務輸入數據的本地性。因此,現有的HDFS數據塊放置策略雖然能保證各個節點間的數據塊數量大致平衡,但由于某些數據塊副本的分布不合理,導致某些節點“竊取”其他節點的本地Map任務后,其他節點由于本地Map任務被分配同樣需要“任務竊取”,這種“任務分配偏移”現象進一步加大了 Map階段非本地數據的傳輸量,給整個網絡帶來巨大的傳輸壓力,影響整個階段的運行效率。此外,當節點間數據塊數目平衡時,節點任務處理速率不同也會導致出現較大程度的非本地化任務處理。
技術實現思路
本專利技術的目的在于解決由于HDFS數據塊分布不均勻而導致的Map階段map任務數據本地性較低的問題,提供一種HDFS運行時數據塊平衡方法,該方法提出基于運行時數據塊移動HDFS平衡策略,通過預測節點任務請求提前判斷可能出現的非本地map任務執行,并在相應的節點間移動合適的數據塊,使得節點發出實際任務請求時候能夠得到本地 map任務的分配響應,從而提高Map階段的完成效率。本專利技術的目的是通過以下技術方案來解決的這種HDFS運行時數據塊平衡方法,包括以下步驟I)節點本地任務列表預處理I. I提出完全本地任務和非完全本地任務當HDFS的各個數據塊存在多個副本的時候,導致同一個任務會出現在不同節點的本地Map任務列表中,從而某個節點本地任務列表中剩余的map任務數η,意味著該節點能夠分配執行的本地任務數是η ;I. 2節點本地任務列表的預處理過程當各個節點依次發出任務請求時,從節點的本地任務列表中獲取當前可執行的任務加入到節點的完全本地任務列表中,而本地任務列表中未被分配的任務則加入到非完全本地任務列表中;2)節點運行時信息統計通過設計NodeEvaluateInfo類來實現在該類中統計節點已經處理的數據塊總數sum、節點已處理數據塊總耗時cost和作業的執行進度tip,知道以上信息后計算節點平均塊處理時間cost/sum、節點當前運行任務剩余時間(1-tip) / (cost/sum);3)節點速率評估與任務請求序列預測3. I節點速率的評估由步驟2),采用COSIVNUMi來表示各個節點的數據處理速率,即節點處理單個任務的平均耗時;其中,NUMi為某一時刻節點i已完成的本地map任務數,COSTi為處理這些本地任務所花費的總耗時;3. 2系統任務請求序列的預測系統任務請求序列即從當前時刻開始到作業完成時為止,各個從節點向主節點申請任務執行的時刻序列;在!'(|時刻,節點i正處理任務的進度為Pi,通過前面速率評估公式得到的節點處理單個數據塊平均耗時為Ti,則該節點的第K 次任務請求時間點tik為T0+(I-Pi) XTi+(k-l) XTi k 彡 I ;其中k表示從當前時刻算起該節點第k次任務請求;獲取各個節點的任務請求序列后,采用如下方式確定系統任務請求序列記系統剩余任務數為m,系統中節點數為n,對每個節點i,取其從當前時刻算起m次任務請求的時間點,記為{tn, ti2,…tim},n個節點將構成nXm個時間點{t11,t12,· · · tim t21,t22,··· t2m,···,tnl,tn2, -tj ;將所有時間點按升序排列,取前m個,則可得到從當前時刻開始對系統中剩余m個任務的請求序列Rm. Rm(J-)^ik 即表明系統中第j個任務請求將由節點i在tik時刻發出,且該請求是節點i的第k個請求;4)節點任務的分配分析與實現在步驟3)預測的節點請求序列下提前確定各個節點的任務分配情況;5)數據塊移動節點對的選擇從任務請求序列中獲取發出請求的節點,接著從該節點的本地任務列表中獲取任務,如果任務為空,則認定該節點是待平衡節點,將其加入本文檔來自技高網...
【技術保護點】
一種HDFS運行時數據塊平衡方法,其特征在于,包括以下步驟:1)節點本地任務列表預處理1.1提出完全本地任務和非完全本地任務:當HDFS的各個數據塊存在多個副本的時候,導致同一個任務會出現在不同節點的本地Map任務列表中,從而某個節點本地任務列表中剩余的map任務數n,意味著該節點能夠分配執行的本地任務數是n;1.2節點本地任務列表的預處理過程:當各個節點依次發出任務請求時,從節點的本地任務列表中獲取當前可執行的任務加入到節點的完全本地任務列表中,而本地任務列表中未被分配的任務則加入到非完全本地任務列表中;2)節點運行時信息統計通過設計NodeEvaluateInfo類來實現:在該類中統計節點已經處理的數據塊總數sum、節點已處理數據塊總耗時cost和作業的執行進度tip,知道以上信息后計算節點平均塊處理時間cost/sum、節點當前運行任務剩余時間(1?tip)/(cost/sum);3)節點速率評估與任務請求序列預測3.1節點速率的評估:由步驟2),采用COSTi/NUMi來表示各個節點的數據處理速率,即節點處理單個任務的平均耗時;其中,NUMi為某一時刻節點i已完成的本地map任務數,COSTi為處理這些本地任務所花費的總耗時;3.2系統任務請求序列的預測:系統任務請求序列即從當前時刻開始到作業完成時為止,各個從節點向主節點申請任務執行的時刻序列;在T0時刻,節點i正處理任務的進度為Pi,通過前面速率評估公式得到的節點 處理單個數據塊平均耗時為Ti,則該節點的第K次任務請求時間點tik為T0+(1?Pi)×Ti+(k?1)×Ti??k≥1;其中k表示從當前時刻算起該節點第k次任務請求;獲取各個節點的任務請求序列后,采用如下方式確定系統任務請求序列:記系統剩余任務數為m,系統中節點數為n,對每個節點i,取其從當前時刻算起m次任務請求的時間點,記為{ti1,ti2,…tim},n個節點將構成n×m個時間點{t11,t12,…t1m,t21,t22,…t2m,…,tn1,tn2,…tnm};將所有時間點按升序排列,取前m個,則可得到從當前時刻開始對系統中剩余m個任務的請求序列Rm.Rm(j)=tik即表明系統中第j個任務請求將由節點i在tik時刻發出,且該請求是節點i的第k個請求;4)節點任務的分配分析與實現:在步驟3)預測的節點請求序列下提前確定各個節點的任務分配情況;5)數據塊移動節點對的選擇:從任務請求序列中獲取發出請求的節點,接著從該節點的本地任務列表中獲取任務,如果任務為空,則認定該節點是待平衡節點,將其加入到待平衡節點列表中;數據塊移動節點對選擇過程的第一步是遍歷allocate數組,構建映射表Map>,記錄所有數據塊源節點上的所有未分配任務;6)節點間數據塊的移動確定好待平衡節點和數據塊源節點后便可進行實際的數據塊移動;由于數據塊移動與節點任務執行相互獨立且考慮到可能有多個數據塊需要移動,為提高效率以及簡化編程實現,采用JAVA線程池技術實現整個數據塊移動。...
【技術特征摘要】
【專利技術屬性】
技術研發人員:曹海軍,伍衛國,董小社,樊源泉,魏偉,朱霍,
申請(專利權)人:西安交通大學,
類型:發明
國別省市:
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。