一種適合迭代計算的MapReduce優(yōu)化方法
【專利摘要】本發(fā)明公開了一種適合迭代計算的MapReduce優(yōu)化方法,是應(yīng)用在一種Hadoop集群系統(tǒng)中,該集群系統(tǒng)包括一個主節(jié)點以及多個從節(jié)點,所述方法包括:主節(jié)點接收用戶提交的多個Hadoop作業(yè),主節(jié)點的作業(yè)服務(wù)進(jìn)程將作業(yè)放入作業(yè)隊列中,并等待主節(jié)點的作業(yè)調(diào)度器進(jìn)行作業(yè)調(diào)度,主節(jié)點等待從節(jié)點發(fā)來的任務(wù)請求,并在接收到任務(wù)請求后,主節(jié)點的作業(yè)調(diào)度器優(yōu)先調(diào)度本地化任務(wù),如果在發(fā)出任務(wù)請求的從節(jié)點上沒有本地化任務(wù),則根據(jù)Hadoop作業(yè)的任務(wù)類型進(jìn)行預(yù)測調(diào)度。本發(fā)明能夠支持傳統(tǒng)數(shù)據(jù)密集型應(yīng)用,又能夠透明高效地支持迭代計算,并分別從動態(tài)數(shù)據(jù)和靜態(tài)數(shù)據(jù)兩個方面進(jìn)行研究并實現(xiàn)數(shù)據(jù)傳輸量的減少。
【專利說明】一種適合迭代計算的MapReduce優(yōu)化方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于并行計算和海量數(shù)據(jù)處理領(lǐng)域,更具體地,涉及一種適合迭代計算的MapReduce優(yōu)化方法。
【背景技術(shù)】
[0002]進(jìn)入到21世紀(jì),數(shù)據(jù)的處理規(guī)模越來越大,TB級別的規(guī)模越來越常見,甚至出現(xiàn)了 PB級別的規(guī)模。這種級別的數(shù)據(jù)規(guī)模遠(yuǎn)遠(yuǎn)超出了個人電腦的處理能力。正是這種處理能力的需求促進(jìn)了并行或分布式計算模型的發(fā)展。這種情況下,Google的MapReduce模型應(yīng)運(yùn)而生,它是一種流行的大集群環(huán)境下數(shù)據(jù)密集型計算模型。
[0003]MapReduce是一種編程模型,用于大規(guī)模數(shù)據(jù)集(大于1TB)的并行運(yùn)算。概念“Map(映射)”和“Reduce(化簡)”,和他們的主要思想,都是從函數(shù)式編程語言里借來的,還有從矢量編程語言里借來的特性。他極大地方便了編程人員在不會分布式并行編程的情況下,將自己的程序運(yùn)行在分布式系統(tǒng)上。在這個模型中,所有數(shù)據(jù)的組織形式是一種〈key ,value)對。編程時,程序員需要做的只是實現(xiàn)Map和Reduce函數(shù)。Map函數(shù)處理輸入〈key, value〉對并輸出零個或者若干個鍵值對,Reduce函數(shù)讀取Map的中間輸出,最終得到零個或若干個結(jié)果。MapReduce模型結(jié)構(gòu)遵循相對獨(dú)立原則,即Map或Reduce之間不存在數(shù)據(jù)依賴關(guān)系O
[0004]MapReduce模型的設(shè)計思路讓它善于進(jìn)行批處理模式的計算,譬如日志分析和文本處理等。然而除了這些批處理方式的應(yīng)用,還存在著基于機(jī)器學(xué)習(xí)或模式識別的應(yīng)用,典型的有計算機(jī)視覺和數(shù)據(jù)挖掘應(yīng)用等。在這些應(yīng)用中,核心算法是基于迭代方式設(shè)計的。然而目前的Hadoop (MapReduce模型開源實現(xiàn))不能透明高效地支持迭代計算,甚至Hadoop的某些特性不適合迭代計算。隨著社交網(wǎng)絡(luò)、計算機(jī)視覺、數(shù)據(jù)挖掘等的發(fā)展,這類應(yīng)用的數(shù)據(jù)處理規(guī)模越來越大。能夠有效支持這類應(yīng)用的并行計算模型的需求越來越大。
【發(fā)明內(nèi)容】
[0005]針對現(xiàn)有技術(shù)的以上缺陷或改進(jìn)需求,本發(fā)明提供了 一種適合迭代計算的MapReduce優(yōu)化方法,其目的在于,在Hadoop的基礎(chǔ)上加以改進(jìn),既能夠支持傳統(tǒng)數(shù)據(jù)密集型應(yīng)用,又能夠透明高效地支持迭代計算,并分別從動態(tài)數(shù)據(jù)和靜態(tài)數(shù)據(jù)兩個方面進(jìn)行研究并實現(xiàn)數(shù)據(jù)傳輸量的減少。
[0006]為實現(xiàn)上述目的,按照本發(fā)明的一個方面,提供了 一種適合迭代計算的MapReduce優(yōu)化方法,是應(yīng)用在一種Hadoop集群系統(tǒng)中,該集群系統(tǒng)包括一個主節(jié)點以及多個從節(jié)點,所述方法包括以下步驟:
[0007](I)主節(jié)點接收用戶提交的多個Hadoop作業(yè),主節(jié)點的作業(yè)服務(wù)進(jìn)程將作業(yè)放入作業(yè)隊列中,并等待主節(jié)點的作業(yè)調(diào)度器進(jìn)行作業(yè)調(diào)度;
[0008](2)主節(jié)點等待從節(jié)點發(fā)來的任務(wù)請求,并在接收到任務(wù)請求后,主節(jié)點的作業(yè)調(diào)度器優(yōu)先調(diào)度本地化任務(wù),如果在發(fā)出任務(wù)請求的從節(jié)點上沒有本地化任務(wù),則根據(jù)Hadoop作業(yè)的任務(wù)類型進(jìn)行預(yù)測調(diào)度,針對計算型任務(wù)直接對該Hadoop作業(yè)進(jìn)行調(diào)度,針對傳輸型任務(wù)則延遲一定間隔,當(dāng)總延遲時間間隔達(dá)到延遲閾值時才對該Hadoop作業(yè)進(jìn)行調(diào)度;
[0009](3)從節(jié)點在接收到主節(jié)點調(diào)度的Hadoop作業(yè)的任務(wù)后,判斷Hadoop作業(yè)類型進(jìn)行不同處理,作業(yè)類型分為迭代型和非迭代型兩種,針對非迭代型作業(yè)按照Hadoop的常規(guī)處理方式進(jìn)行處理,針對迭代型作業(yè),在Map階段之前增加Map端混洗過程,用于為Map任務(wù)讀取動態(tài)數(shù)據(jù),在Reduce階段,將動態(tài)數(shù)據(jù)進(jìn)行本地緩存并交由從節(jié)點的動態(tài)數(shù)據(jù)緩存組件管理,并在作業(yè)處理完畢后將最終的處理結(jié)果保存在HDFS中。
[0010]優(yōu)選地,步驟(2)具體包括以下子步驟:
[0011](2-1)主節(jié)點上的作業(yè)服務(wù)進(jìn)程監(jiān)控并等待從節(jié)點上的任務(wù)服務(wù)進(jìn)程發(fā)送來的心跳信息,該心跳信息包括當(dāng)前從節(jié)點的運(yùn)行信息,具體包括總槽數(shù)和當(dāng)前正在運(yùn)行的槽數(shù);
[0012](2-2)主節(jié)點在接收到從節(jié)點發(fā)來的心跳信息后,根據(jù)該心跳信息計算當(dāng)前從節(jié)點的空閑槽數(shù)和整個Hadoop集群系統(tǒng)的平均運(yùn)行槽數(shù),根據(jù)計算的結(jié)果判斷是否需要向當(dāng)前從節(jié)點分配該作業(yè)的任務(wù),如果不需要分配任務(wù),則返回步驟(2-1),否則執(zhí)行步驟(2-3);
[0013](2-3)設(shè)置計數(shù)器i=0 ;
[0014](2-4)判斷第i個Hadoop作業(yè)是否在當(dāng)前從節(jié)點有本地化任務(wù),即當(dāng)前從節(jié)點是否存儲有第i個Hadoop作業(yè)的輸入數(shù)據(jù)分片(Split),若沒有則轉(zhuǎn)入步驟(2-5),若有則轉(zhuǎn)入步驟(2-11);
[0015](2-5)設(shè)置i=i+l,并判斷i是否等于Hadoop作業(yè)的個數(shù),若等于則進(jìn)入步驟(2-7),否則返回步驟(2-4);
[0016](2-6)設(shè)置計數(shù)器j=0 ;
[0017](2-7)判斷第j個Hadoop作業(yè)的任務(wù)類型是計算型任務(wù)還是傳輸型任務(wù),若為計算型任務(wù),則進(jìn)入步驟(2-11),若為傳輸型任務(wù),則進(jìn)入步驟(2-8 );
[0018](2-8)將第j個Hadoop作業(yè)的任務(wù)調(diào)度延遲一個心跳時間;
[0019](2-9)判斷第j個Hadoop作業(yè)任務(wù)調(diào)度的總延遲時間是否達(dá)到一個閾值,若達(dá)到,則轉(zhuǎn)入步驟(2-11),否則轉(zhuǎn)入步驟(2-10);
[0020](2-10)設(shè)置j=j+l,并判斷j是否等于Hadoop作業(yè)的個數(shù),若等于則進(jìn)入步驟(2-12),否則返回步驟(2-1);
[0021](2-11)將第i個Hadoop作業(yè)的本地化任務(wù)調(diào)度到當(dāng)前從節(jié)點,然后過程結(jié)束;
[0022](2-12)對第j個Hadoop作業(yè)的任務(wù)調(diào)度到當(dāng)前從節(jié)點,然后過程結(jié)束。
[0023]優(yōu)選地,步驟(2-2)具體為,當(dāng)前從節(jié)點的空閑槽數(shù)等于總槽數(shù)減去當(dāng)前正在運(yùn)行的槽數(shù),整個Hadoop集群系統(tǒng)的平均運(yùn)行槽數(shù)為跟蹤進(jìn)程監(jiān)控到的所有從節(jié)點正在運(yùn)行的槽數(shù)的和除以所有從節(jié)點的槽數(shù),如果當(dāng)前節(jié)點的空閑槽數(shù)等于0,則不需要分配任務(wù),同時如果當(dāng)前從節(jié)點正在運(yùn)行的槽數(shù)大于整個Hadoop集群系統(tǒng)的平均運(yùn)行槽數(shù),則不需要分配任務(wù)。
[0024]優(yōu)選地,步驟(3)具體包括以下子步驟:
[0025](3-1)接收主節(jié)點調(diào)度的Hadoop作業(yè)的任務(wù);[0026](3-2)判斷任務(wù)的作業(yè)類型是迭代型作業(yè)還是非迭代型作業(yè),如果是迭代型作業(yè)則轉(zhuǎn)入步驟(3-3 ),如果是非迭代型作業(yè)則轉(zhuǎn)入步驟(3-4 );
[0027](3-3)判斷該迭代型作業(yè)的任務(wù)類型是Map任務(wù)還是Reduce任務(wù),如果是Map任務(wù)則轉(zhuǎn)入步驟(3-5),如果是Reduce任務(wù)則轉(zhuǎn)入步驟(3_9);
[0028](3-4)判斷該非迭代型作業(yè)的任務(wù)類型是Map任務(wù)還是Reduce任務(wù),如果是Map任務(wù)則轉(zhuǎn)入步驟(3-8),如果是Reduce任務(wù)則轉(zhuǎn)入步驟(3_9);
[0029](3-5)判斷該迭代型作業(yè)是否是第一次運(yùn)行,如果不是則轉(zhuǎn)入步驟(3-6),如果是則轉(zhuǎn)入步驟(3-7);
[0030](3-6) Map任務(wù)進(jìn)程(Mapper)所在從節(jié)點的任務(wù)服務(wù)進(jìn)程啟動多個數(shù)據(jù)拷貝線程,通過HTTP方式請求Reduce任務(wù)進(jìn)程所在從節(jié)點獲取Reduce任務(wù)進(jìn)程計算得到的動態(tài)數(shù)據(jù)文件,然后轉(zhuǎn)入步驟(3-8);
[0031](3-7) Map任務(wù)進(jìn)程讀取動態(tài)數(shù)據(jù)初始化值,然后轉(zhuǎn)入步驟(3_8);
[0032](3-8) Hadoop集群系統(tǒng)將作業(yè)的輸入文件分解成一個個的分片,Map任務(wù)進(jìn)程對分片進(jìn)行處理,然后轉(zhuǎn)入步驟(3-14);
[0033](3-9)從節(jié)點上的Reducer任務(wù)進(jìn)程啟動數(shù)據(jù)拷貝線程,通過HTTP方式請求Map任務(wù)進(jìn)程所在從節(jié)點獲取Map任務(wù)進(jìn)程的中間輸出文件,中間輸出文件存儲在從節(jié)點的本地磁盤中,拷貝過來的文件會先放在內(nèi)存緩沖區(qū)中,多個拷貝文件會根據(jù)會合并成最終的大文件,這個大文件按照key排序,然后轉(zhuǎn)入步驟(3-10);
[0034](3-10) Reduce任務(wù)進(jìn)程從得到的大文件中以〈key, iterator〉形式讀取記錄,并執(zhí)行Reduce O方法,然后轉(zhuǎn)入步驟(3_11);
[0035](3-11)判斷作業(yè)類型是迭代型還是非迭代型,如果是迭代型作業(yè),則轉(zhuǎn)入步驟(3-12),如果是非迭代型作業(yè),則轉(zhuǎn)入步驟(3-13);
[0036](3-12)從節(jié)點的動態(tài)數(shù)據(jù)緩存組件將Reduce任務(wù)進(jìn)程執(zhí)行后的結(jié)果緩存在內(nèi)存當(dāng)中,當(dāng)緩沖區(qū)滿時溢出到本地磁盤文件中,然后轉(zhuǎn)入步驟(3-14);
[0037](3-13) Reduce任務(wù)進(jìn)程將執(zhí)行后的結(jié)果寫入到HDFS中,然后轉(zhuǎn)入步驟(3_14);
[0038](3-14)任務(wù)執(zhí)行結(jié)束,然后返回步驟(3-1)。
[0039]優(yōu)選地,步驟(3-6)中的動態(tài)數(shù)據(jù)文件由從節(jié)點的動態(tài)數(shù)據(jù)緩存組件管理,保存在內(nèi)存和本地磁盤中;拷貝過來的動態(tài)數(shù)據(jù)也由動態(tài)數(shù)據(jù)緩存組件來管理,同一從節(jié)點的多個Map任務(wù)進(jìn)程從從節(jié)點本地請求動態(tài)數(shù)據(jù)文件,這些數(shù)據(jù)將作為Map任務(wù)進(jìn)程需要的動態(tài)數(shù)據(jù)輸入。
[0040]優(yōu)選地,步驟(3-8)中,分片的大小默認(rèn)為HDFS塊大小,塊大小通過配置文件配置,Map任務(wù)進(jìn)程將分片分解成Map任務(wù)進(jìn)程需要的〈key, value)形式的記錄,執(zhí)行Map O方法,將執(zhí)行的結(jié)果緩存在內(nèi)存當(dāng)中,當(dāng)緩沖區(qū)滿時會溢出到磁盤當(dāng)中,溢出的文件會記錄分區(qū)的信息,單個溢出文件首先按照分區(qū)排序,然后按照key排序;如果有多個溢出文件需要合并成一個大文件,這個過程對多個溢出文件進(jìn)行歸并排序。
[0041]總體而言,通過本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,能夠取得下列有益效果:
[0042]( I)任務(wù)的數(shù)據(jù)本地性更好:由于采用了步驟(2),本發(fā)明中提出的調(diào)度策略相較于延遲調(diào)度策略,更好地平衡了任務(wù)本地化需求和任務(wù)延遲開銷,即將Hadoop中的任務(wù)(task)概念劃分為計算密集型和傳輸密集型兩類,并結(jié)合集群網(wǎng)絡(luò)的負(fù)載信息實時地預(yù)測延遲時間。這樣既能達(dá)到提高任務(wù)本地化比例,又能有效地降低作業(yè)的整體延遲開銷。因此本發(fā)明有明顯的優(yōu)勢。
[0043](2)動態(tài)數(shù)據(jù)傳輸開銷更小:由于采用了步驟(3),本發(fā)明提出的動態(tài)數(shù)據(jù)緩存策略極大地降低了讀寫動態(tài)數(shù)據(jù)帶來的集群網(wǎng)絡(luò)傳輸開銷。理論證明并實驗驗證,迭代型作業(yè)的動態(tài)數(shù)據(jù)傳輸總量只與任務(wù)所在節(jié)點數(shù)目成正比,并有確切上限,即集群節(jié)點數(shù)目。因此本發(fā)明有明顯的優(yōu)勢。
[0044](3)集群在多作業(yè)和多用戶使用環(huán)境下效能更高:在多作業(yè)和多用戶環(huán)境下,集群的網(wǎng)絡(luò)資源成為集群效率的瓶頸,將會極大地限制集群的使用效能。本發(fā)明通過優(yōu)化Hadoop的網(wǎng)絡(luò)數(shù)據(jù)流,降低集群網(wǎng)絡(luò)傳輸開銷,有效地緩解集群網(wǎng)絡(luò)負(fù)載,減小用戶之間及作業(yè)之間的網(wǎng)絡(luò)資源競爭,提高了在多作業(yè)和多用戶下的集群使用效能。因此本發(fā)明有明顯的優(yōu)勢。
[0045](4)高效透明地支持迭代計算。相較于傳統(tǒng)的Hadoop,本發(fā)明既可以支持傳統(tǒng)的批處理作業(yè),又可以更好地支持迭代型作業(yè),所以本發(fā)明的使用領(lǐng)域更廣泛,例如社交網(wǎng)絡(luò)、計算機(jī)視覺、數(shù)據(jù)挖掘等。因此本發(fā)明有明顯的優(yōu)勢。
【專利附圖】
【附圖說明】
[0046]圖1是本發(fā)明適合迭代計算的MapReduce優(yōu)化方法的流程圖。
[0047]圖2是本發(fā)明步驟(2)的細(xì)化流程圖。
[0048]圖3是本發(fā)明步驟(3)的細(xì)化流程圖。
【具體實施方式】
[0049]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個實施方式中所涉及到的技術(shù)特征只要彼此之間未構(gòu)成沖突就可以相互組合。
[0050]以下首先對本發(fā)明的技術(shù)術(shù)語進(jìn)行解釋和說明:
[0051]動態(tài)數(shù)據(jù):迭代計算問題中,一個直接或間接地不斷由舊值遞推出新值的變量。
[0052]靜態(tài)數(shù)據(jù):迭代計算問題中,不會有任何的改變的數(shù)據(jù),一般為算法的原始輸入數(shù)據(jù)。
[0053]計算型任務(wù):任務(wù)的計算時間在Map任務(wù)的全部處理過程里占主要部分的任務(wù)。
[0054]傳輸型任務(wù):任務(wù)的數(shù)據(jù)傳輸時間在Map任務(wù)的全部處理過程中占主要部分的任務(wù)。
[0055]本地化任務(wù):在從節(jié)點本地存儲有輸入數(shù)據(jù)分片的Map任務(wù)。
[0056]延遲調(diào)度策略:一種延遲非本地化任務(wù)調(diào)度的策略。
[0057]本發(fā)明的整體思路在于,著眼于多用戶和多作業(yè)集群環(huán)境,通過優(yōu)化靜態(tài)數(shù)據(jù)流和共享數(shù)據(jù)流來減小集群的網(wǎng)絡(luò)傳輸負(fù)載。針對靜態(tài)數(shù)據(jù)流的優(yōu)化,本發(fā)明主要貢獻(xiàn)了一個預(yù)測調(diào)度算法;針對共享數(shù)據(jù)流的優(yōu)化,本發(fā)明通過數(shù)據(jù)緩存策略和增加Map端的shuffle過程來達(dá)到目的。[0058]本發(fā)明適合迭代計算的MapReduce優(yōu)化方法是應(yīng)用在一種Hadoop集群系統(tǒng)中,該集群系統(tǒng)包括一個主(Master )節(jié)點以及多個從(Slave)節(jié)點,該方法包括以下步驟(如圖1所示):
[0059](I)主節(jié)點接收用戶提交的多個Hadoop作業(yè),主節(jié)點的作業(yè)服務(wù)進(jìn)程(JobTracker)將作業(yè)放入作業(yè)隊列中,并等待主節(jié)點的作業(yè)調(diào)度器進(jìn)行作業(yè)調(diào)度;
[0060](2)主節(jié)點等待從節(jié)點發(fā)來的任務(wù)請求,并在接收到任務(wù)請求后,主節(jié)點的作業(yè)調(diào)度器優(yōu)先調(diào)度本地化任務(wù),如果在發(fā)出任務(wù)請求的從節(jié)點上沒有本地化任務(wù),則根據(jù)Hadoop作業(yè)的任務(wù)類型進(jìn)行預(yù)測調(diào)度,針對計算型任務(wù)直接對該Hadoop作業(yè)進(jìn)行調(diào)度,針對傳輸型任務(wù)則延遲一定間隔,當(dāng)總延遲時間間隔達(dá)到延遲閾值時才對該Hadoop作業(yè)進(jìn)行調(diào)度。具體包括以下子步驟(如圖2所示):
[0061](2-1)主節(jié)點上的作業(yè)服務(wù)進(jìn)程監(jiān)控并等待從節(jié)點上的任務(wù)服務(wù)進(jìn)程(TaskTracker)發(fā)送來的心跳信息,該心跳信息包括當(dāng)前從節(jié)點的運(yùn)行信息,具體包括總槽(slot)數(shù)和當(dāng)前正在運(yùn)行的槽數(shù)等;
[0062](2-2)主節(jié)點在接收到從節(jié)點發(fā)來的心跳信息后,根據(jù)該心跳信息計算當(dāng)前從節(jié)點的空閑槽數(shù)和整個Hadoop集群系統(tǒng)的平均運(yùn)行槽數(shù),根據(jù)計算的結(jié)果判斷是否需要向當(dāng)前從節(jié)點分配該作業(yè)的任務(wù),如果不需要分配任務(wù),則返回步驟(2-1),否則執(zhí)行步驟(2-3);具體而言,當(dāng)前從節(jié)點的空閑槽數(shù)等于總槽數(shù)減去當(dāng)前正在運(yùn)行的槽數(shù),整個Hadoop集群系統(tǒng)的平均運(yùn)行槽數(shù)為跟蹤進(jìn)程監(jiān)控到的所有從節(jié)點正在運(yùn)行的槽數(shù)的和除以所有從節(jié)點的槽數(shù);如果當(dāng)前節(jié)點的空閑槽數(shù)等于0,則不需要分配任務(wù),同時如果當(dāng)前從節(jié)點正在運(yùn)行的槽數(shù)大于整個Hadoop集群系統(tǒng)的平均運(yùn)行槽數(shù),則不需要分配任務(wù);
[0063]( 2-3)設(shè)置計數(shù)器i=0 ;
[0064](2-4)判斷第i個Hadoop作業(yè)是否在當(dāng)前從節(jié)點有本地化任務(wù),即當(dāng)前從節(jié)點是否存儲有第i個Hadoop作業(yè)的輸入數(shù)據(jù)分片(Split),若沒有則轉(zhuǎn)入步驟(2-5),若有則轉(zhuǎn)入步驟(2-11);
[0065](2-5)設(shè)置i=i+l,并判斷i是否等于Hadoop作業(yè)的個數(shù),若等于則進(jìn)入步驟(2-7),否則返回步驟(2-4);
[0066](2-6)設(shè)置計數(shù)器j=0 ;
[0067](2-7)判斷第j個Hadoop作業(yè)的任務(wù)類型是計算型任務(wù)還是傳輸型任務(wù),若為計算型任務(wù),則進(jìn)入步驟(2-11),若為傳輸型任務(wù),則進(jìn)入步驟(2-8 );
[0068](2-8)將第j個Hadoop作業(yè)的任務(wù)調(diào)度延遲一個心跳時間;具體而言,心跳時間為從節(jié)點發(fā)送心跳信息的時間間隔,具體為3秒;
[0069](2-9)判斷第j個Hadoop作業(yè)任務(wù)調(diào)度的總延遲時間是否達(dá)到一個閾值,若達(dá)到,則轉(zhuǎn)入步驟(2-11),否則轉(zhuǎn)入步驟(2-10);閾值的取值可由集群管理員配置,配置的依據(jù)是:當(dāng)閾值越大,任務(wù)的本地化率會越大,但是延遲的開銷也會越大;閾值越小,本地化率相對越小,但是延遲的開銷也會越小,閾值默認(rèn)為3分鐘;
[0070](2-10)設(shè)置j=j+l,并判斷j是否等于Hadoop作業(yè)的個數(shù),若等于則進(jìn)入步驟(2-12),否則返回步驟(2-1);
[0071](2-11)將第i個Hadoop作業(yè)的本地化任務(wù)調(diào)度到當(dāng)前從節(jié)點,然后過程結(jié)束;
[0072](2-12)對第j個Hadoop作業(yè)的任務(wù)調(diào)度到當(dāng)前從節(jié)點,然后過程結(jié)束。[0073]本步驟的優(yōu)點在于:將任務(wù)進(jìn)行分類,對計算型任務(wù)使用默認(rèn)的方式進(jìn)行調(diào)度,對傳輸型任務(wù)進(jìn)行預(yù)測調(diào)度。這樣可以既可以提高任務(wù)的本地化比例,又可以減小延遲帶來的開銷。
[0074](3)從節(jié)點在接收到主節(jié)點調(diào)度的Hadoop作業(yè)的任務(wù)后,判斷Hadoop作業(yè)類型進(jìn)行不同處理,作業(yè)類型分為迭代型和非迭代型兩種,針對非迭代型作業(yè)按照Hadoop的常規(guī)處理方式進(jìn)行處理,針對迭代型作業(yè),在Map階段之前增加了一個Map端混洗(shuffle)過程,用于為Map階段的任務(wù)(即Map任務(wù))讀取動態(tài)數(shù)據(jù),在Reduce階段,將動態(tài)數(shù)據(jù)進(jìn)行本地緩存并交由從節(jié)點的動態(tài)數(shù)據(jù)緩存組件管理,并在作業(yè)處理完畢后將最終的處理結(jié)果保存在Hadoop分布式文件系統(tǒng)(Hadoop Distributed File System,簡稱HDFS)中;本步驟具體包括以下子步驟(如圖3所示):
[0075](3-1)接收主節(jié)點調(diào)度的Hadoop作業(yè)的任務(wù);
[0076](3-2)判斷任務(wù)的作業(yè)類型是迭代型作業(yè)還是非迭代型作業(yè),如果是迭代型作業(yè)則轉(zhuǎn)入步驟(3-3 ),如果是非迭代型作業(yè)則轉(zhuǎn)入步驟(3-4 );
[0077](3-3)判斷該迭代型作業(yè)的任務(wù)類型是Map任務(wù)還是Reduce任務(wù),如果是Map任務(wù)則轉(zhuǎn)入步驟(3-5),如果是Reduce任務(wù)則轉(zhuǎn)入步驟(3_9);
[0078](3-4)判斷該非迭代型作業(yè)的任務(wù)類型是Map任務(wù)還是Reduce任務(wù),如果是Map任務(wù)則轉(zhuǎn)入步驟(3-8),如果是Reduce任務(wù)則轉(zhuǎn)入步驟(3_9);
[0079](3-5)判斷該迭代型作業(yè)是否是第一次運(yùn)行,如果不是則轉(zhuǎn)入步驟(3-6),如果是則轉(zhuǎn)入步驟(3-7);
[0080](3-6) Map任務(wù)進(jìn)程(Mapper)所在從節(jié)點的任務(wù)服務(wù)進(jìn)程啟動多個數(shù)據(jù)拷貝線程,通過HTTP方式請求Reduce任務(wù)進(jìn)程(Reducer)所在從節(jié)點獲取Reduce任務(wù)進(jìn)程計算得到的動態(tài)數(shù)據(jù)文件,然后轉(zhuǎn)入步驟(3-8);這些動態(tài)數(shù)據(jù)文件由從節(jié)點的動態(tài)數(shù)據(jù)緩存組件管理,保存在內(nèi)存和本地磁盤中;拷貝過來的動態(tài)數(shù)據(jù)也由動態(tài)數(shù)據(jù)緩存組件來管理,同一從節(jié)點的多個Map任務(wù)進(jìn)程從從節(jié)點本地請求動態(tài)數(shù)據(jù)文件,這些數(shù)據(jù)將作為Map任務(wù)進(jìn)程需要的動態(tài)數(shù)據(jù)輸入;
[0081]本子步驟的優(yōu)點在于:1,Reduce階段后的動態(tài)數(shù)據(jù)保存在本次,減少了寫入到HDFS帶來的開銷;2,由Map任務(wù)進(jìn)程所在的從節(jié)點請求Reduce階段后的動態(tài)數(shù)據(jù),并保存在Map任務(wù)進(jìn)程的從節(jié)點的本地,Map任務(wù)進(jìn)程從從節(jié)點本地請求數(shù)據(jù),這樣大大地減少了動態(tài)數(shù)據(jù)的網(wǎng)絡(luò)傳輸量。
[0082](3-7) Map任務(wù)進(jìn)程讀取動態(tài)數(shù)據(jù)初始化值,然后轉(zhuǎn)入步驟(3_8);簡單而言,迭代型作業(yè)需要并產(chǎn)生一些動態(tài)數(shù)據(jù),這個數(shù)據(jù)在第一次作業(yè)執(zhí)行時是需要由用戶提供該動態(tài)數(shù)據(jù)的初始化值;
[0083](3-8) Hadoop集群系統(tǒng)將作業(yè)的輸入文件分解成一個個的分片,Map任務(wù)進(jìn)程對分片進(jìn)行處理,然后轉(zhuǎn)入步驟(3-14);具體而言,分片的大小默認(rèn)為HDFS塊大小,塊大小通過配置文件配置,Map任務(wù)進(jìn)程將分片分解成Map任務(wù)進(jìn)程需要的〈key, value)形式的記錄,執(zhí)行Map O方法,將執(zhí)行的結(jié)果緩存在內(nèi)存當(dāng)中,當(dāng)緩沖區(qū)滿時會溢出到磁盤當(dāng)中;溢出的文件會記錄分區(qū)的信息,單個溢出文件首先按照分區(qū)排序,然后按照key排序;如果有多個溢出文件需要合并成一個大文件,這個過程對多個溢出文件進(jìn)行歸并排序;
[0084](3-9)從節(jié)點上的Reducer任務(wù)進(jìn)程啟動數(shù)據(jù)拷貝線程,通過HTTP方式請求Map任務(wù)進(jìn)程所在從節(jié)點獲取Map任務(wù)進(jìn)程的中間輸出文件,中間輸出文件存儲在從節(jié)點的本地磁盤中,拷貝過來的文件會先放在內(nèi)存緩沖區(qū)中,多個拷貝文件會根據(jù)會合并成最終的大文件,這個大文件按照key排序,然后轉(zhuǎn)入步驟(3-10);
[0085](3-10) Reduce任務(wù)進(jìn)程從得到的大文件中以〈key, iterator〉形式讀取記錄,并執(zhí)行Reduce O方法,然后轉(zhuǎn)入步驟(3_11);
[0086](3-11)判斷作業(yè)類型是迭代型還是非迭代型,如果是迭代型作業(yè),則轉(zhuǎn)入步驟(3-12),如果是非迭代型作業(yè),則轉(zhuǎn)入步驟(3-13);
[0087](3-12)從節(jié)點的動態(tài)數(shù)據(jù)緩存組件將Reduce任務(wù)進(jìn)程執(zhí)行后的結(jié)果緩存在內(nèi)存當(dāng)中,當(dāng)緩沖區(qū)滿時溢出到本地磁盤文件中,然后轉(zhuǎn)入步驟(3-14);
[0088](3-13) Reduce任務(wù)進(jìn)程將執(zhí)行后的結(jié)果寫入到HDFS中,然后轉(zhuǎn)入步驟(3_14);
[0089](3-14)任務(wù)執(zhí)行結(jié)束,然后返回步驟(3-1)。
[0090]實例:
[0091]為了驗證本發(fā)明的可行性和有效性,在下列表1所示的實驗配置環(huán)境下執(zhí)行編寫的計算機(jī)程序,對發(fā)明進(jìn)行測試,測試結(jié)果如下列表2和表3所示:
[0092]表1:實驗配置環(huán)境
【權(quán)利要求】
1.一種適合迭代計算的MapReduce優(yōu)化方法,是應(yīng)用在一種Hadoop集群系統(tǒng)中,該集群系統(tǒng)包括一個主節(jié)點以及多個從節(jié)點,其特征在于,所述方法包括以下步驟: (1)主節(jié)點接收用戶提交的多個Hadoop作業(yè),主節(jié)點的作業(yè)服務(wù)進(jìn)程將作業(yè)放入作業(yè)隊列中,并等待主節(jié)點的作業(yè)調(diào)度器進(jìn)行作業(yè)調(diào)度; (2)主節(jié)點等待從節(jié)點發(fā)來的任務(wù)請求,并在接收到任務(wù)請求后,主節(jié)點的作業(yè)調(diào)度器優(yōu)先調(diào)度本地化任務(wù),如果在發(fā)出任務(wù)請求的從節(jié)點上沒有本地化任務(wù),則根據(jù)Hadoop作業(yè)的任務(wù)類型進(jìn)行預(yù)測調(diào)度,針對計算型任務(wù)直接對該Hadoop作業(yè)進(jìn)行調(diào)度,針對傳輸型任務(wù)則延遲一定間隔,當(dāng)總延遲時間間隔達(dá)到延遲閾值時才對該Hadoop作業(yè)進(jìn)行調(diào)度; (3)從節(jié)點在接收到主節(jié)點調(diào)度的Hadoop作業(yè)的任務(wù)后,判斷Hadoop作業(yè)類型進(jìn)行不同處理,作業(yè)類型分為迭代型和非迭代型兩種,針對非迭代型作業(yè)按照Hadoop的常規(guī)處理方式進(jìn)行處理,針對迭代型作業(yè),在Map階段之前增加Map端混洗過程,用于為Map任務(wù)讀取動態(tài)數(shù)據(jù),在Reduce階段,將動態(tài)數(shù)據(jù)進(jìn)行本地緩存并交由從節(jié)點的動態(tài)數(shù)據(jù)緩存組件管理,并在作業(yè)處理完畢后將最終的處理結(jié)果保存在HDFS中。
2.根據(jù)權(quán)利要求1所述的MapReduce優(yōu)化方法,其特征在于,步驟(2)具體包括以下子步驟: (2-1)主節(jié)點上的作業(yè)服務(wù)進(jìn)程監(jiān)控并等待從節(jié)點上的任務(wù)服務(wù)進(jìn)程發(fā)送來的心跳信息,該心跳信息包括當(dāng)前從節(jié)點的運(yùn)行信息,具體包括總槽數(shù)和當(dāng)前正在運(yùn)行的槽數(shù); (2-2)主節(jié)點在接收到從節(jié)點發(fā)來的心跳信息后,根據(jù)該心跳信息計算當(dāng)前從節(jié)點的空閑槽數(shù)和整個Hadoop集群系統(tǒng)的平均運(yùn)行槽數(shù),根據(jù)計算的結(jié)果判斷是否需要向當(dāng)前從節(jié)點分配該作業(yè)的任務(wù),如果不需要分配任務(wù),則返回步驟(2-1),否則執(zhí)行步驟(2-3); (2-3)設(shè)置計數(shù)器i=0; (2-4)判斷第i個Hadoop作業(yè)是否在當(dāng)前從節(jié)點有本地化任務(wù),即當(dāng)前從節(jié)點是否存儲有第i個Hadoop作業(yè)的輸入數(shù)據(jù)分片(Split),若沒有則轉(zhuǎn)入步驟(2-5),若有則轉(zhuǎn)入步驟(2-11); (2-5)設(shè)置i=i+l,并判斷i是否等于Hadoop作業(yè)的個數(shù),若等于則進(jìn)入步驟(2_7),否則返回步驟(2-4); (2-6)設(shè)置計數(shù)器j=0; (2-7)判斷第j個Hadoop作業(yè)的任務(wù)類型是計算型任務(wù)還是傳輸型任務(wù),若為計算型任務(wù),則進(jìn)入步驟(2-11),若為傳輸型任務(wù),則進(jìn)入步驟(2-8 ); (2-8)將第j個Hadoop作業(yè)的任務(wù)調(diào)度延遲一個心跳時間; (2-9)判斷第j個Hadoop作業(yè)任務(wù)調(diào)度的總延遲時間是否達(dá)到一個閾值,若達(dá)到,則轉(zhuǎn)入步驟(2-11),否則轉(zhuǎn)入步驟(2-10); (2-10)設(shè)置j=j+l,并判斷j是否等于Hadoop作業(yè)的個數(shù),若等于則進(jìn)入步驟(2_12),否則返回步驟(2-1); (2-11)將第i個Hadoop作業(yè)的本地化任務(wù)調(diào)度到當(dāng)前從節(jié)點,然后過程結(jié)束; (2-12)對第j個Hadoop作業(yè)的任務(wù)調(diào)度到當(dāng)前從節(jié)點,然后過程結(jié)束。
3.根據(jù)權(quán)利要求2所述的MapReduce優(yōu)化方法,其特征在于,步驟(2_2)具體為,當(dāng)前從節(jié)點的空閑槽數(shù)等于總槽數(shù)減去當(dāng)前正在運(yùn)行的槽數(shù),整個Hadoop集群系統(tǒng)的平均運(yùn)行槽數(shù)為跟蹤進(jìn)程監(jiān)控到的所有從節(jié)點正在運(yùn)行的槽數(shù)的和除以所有從節(jié)點的槽數(shù),如果當(dāng)前節(jié)點的空閑槽數(shù)等于O,則不需要分配任務(wù),同時如果當(dāng)前從節(jié)點正在運(yùn)行的槽數(shù)大于整個Hadoop集群系統(tǒng)的平均運(yùn)行槽數(shù),則不需要分配任務(wù)。
4.根據(jù)權(quán)利要求1所述的MapReduce優(yōu)化方法,其特征在于,步驟(3)具體包括以下子步驟: (3-1)接收主節(jié)點調(diào)度的Hadoop作業(yè)的任務(wù); (3-2)判斷任務(wù)的作業(yè)類型是迭代型作業(yè)還是非迭代型作業(yè),如果是迭代型作業(yè)則轉(zhuǎn)入步驟(3-3 ),如果是非迭代型作業(yè)則轉(zhuǎn)入步驟(3-4); (3-3)判斷該迭代型作業(yè)的任務(wù)類型是Map任務(wù)還是Reduce任務(wù),如果是Map任務(wù)則轉(zhuǎn)入步驟(3-5),如果是Reduce任務(wù)則轉(zhuǎn)入步驟(3-9); (3-4)判斷該非迭代型作業(yè)的任務(wù)類型是Map任務(wù)還是Reduce任務(wù),如果是Map任務(wù)則轉(zhuǎn)入步驟(3-8),如果是Reduce任務(wù)則轉(zhuǎn)入步驟(3_9); (3-5)判斷該迭代型作業(yè)是否是第一次運(yùn)行,如果不是則轉(zhuǎn)入步驟(3-6),如果是則轉(zhuǎn)入步驟(3-7); (3-6) Map任務(wù)進(jìn)程(Mapper)所在從節(jié)點的任務(wù)服務(wù)進(jìn)程啟動多個數(shù)據(jù)拷貝線程,通過HTTP方式請求Reduce任務(wù)進(jìn)程所在從節(jié)點獲取Reduce任務(wù)進(jìn)程計算得到的動態(tài)數(shù)據(jù)文件,然后轉(zhuǎn)入步驟(3-8); (3-7) Map任務(wù)進(jìn)程讀取動態(tài)數(shù)據(jù)初始化值,然后轉(zhuǎn)入步驟(3-8); (3-8) Hadoop集群系統(tǒng)將作業(yè)的輸入文件分解成一個個的分片,Map任務(wù)進(jìn)程對分片進(jìn)行處理,然后轉(zhuǎn)入步驟(3-14); (3-9)從節(jié)點上的Reducer任務(wù)進(jìn)程啟動數(shù)據(jù)拷貝線程,通過HTTP方式請求Map任務(wù)進(jìn)程所在從節(jié)點獲取Map任務(wù)進(jìn)程的中間輸出文件,中間輸出文件存儲在從節(jié)點的本地磁盤中,拷貝過來的文件會先放在內(nèi)存緩沖區(qū)中,多個拷貝文件會根據(jù)會合并成最終的大文件,這個大文件按照key排序,然后轉(zhuǎn)入步驟(3-10); (3-10) Reduce任務(wù)進(jìn)程從得到的大文件中以〈key, iterator〉形式讀取記錄,并執(zhí)行Reduce ()方法,然后轉(zhuǎn)入步驟(3-11); (3-11)判斷作業(yè)類型是迭代型還是非迭代型,如果是迭代型作業(yè),則轉(zhuǎn)入步驟(3-12),如果是非迭代型作業(yè),則轉(zhuǎn)入步驟(3-13); (3-12)從節(jié)點的動態(tài)數(shù)據(jù)緩存組件將Reduce任務(wù)進(jìn)程執(zhí)行后的結(jié)果緩存在內(nèi)存當(dāng)中,當(dāng)緩沖區(qū)滿時溢出到本地磁盤文件中,然后轉(zhuǎn)入步驟(3-14); (3-13) Reduce任務(wù)進(jìn)程將執(zhí)行后的結(jié)果寫入到HDFS中,然后轉(zhuǎn)入步驟(3_14); (3-14)任務(wù)執(zhí)行結(jié)束,然后返回步驟(3-1)。
5.根據(jù)權(quán)利要求4所述的MapReduce優(yōu)化方法,其特征在于,步驟(3_6)中的動態(tài)數(shù)據(jù)文件由從節(jié)點的動態(tài)數(shù)據(jù)緩存組件管理,保存在內(nèi)存和本地磁盤中;拷貝過來的動態(tài)數(shù)據(jù)也由動態(tài)數(shù)據(jù)緩存組件來管理,同一從節(jié)點的多個Map任務(wù)進(jìn)程從從節(jié)點本地請求動態(tài)數(shù)據(jù)文件,這些數(shù)據(jù)將作為Map任務(wù)進(jìn)程需要的動態(tài)數(shù)據(jù)輸入。
6.根據(jù)權(quán)利要求4所述的MapReduce優(yōu)化方法,其特征在于,步驟(3-8)中,分片的大小默認(rèn)為HDFS塊大小,塊大小通過配置文件配置,Map任務(wù)進(jìn)程將分片分解成Map任務(wù)進(jìn)程需要的〈key,value)形式的記錄,執(zhí)行MapO方法,將執(zhí)行的結(jié)果緩存在內(nèi)存當(dāng)中,當(dāng)緩沖區(qū)滿時會溢出到磁盤當(dāng)中,溢出的文件會記錄分區(qū)的信息,單個溢出文件首先按照分區(qū)排序,然后按照key排序; 如果有多個溢出文件需要合并成一個大文件,這個過程對多個溢出文件進(jìn)行歸并排序。
【文檔編號】G06F9/50GK103617087SQ201310600745
【公開日】2014年3月5日 申請日期:2013年11月25日 優(yōu)先權(quán)日:2013年11月25日
【發(fā)明者】金海 , 鄭然 , 余根茂, 章勤, 朱磊 申請人:華中科技大學(xué)