孟令伍, 楊陽朝, 黃曉明, 練麗萍
1(南京萊斯網(wǎng)信技術(shù)研究院有限公司, 南京 210014)
2(深圳市網(wǎng)聯(lián)安瑞網(wǎng)絡(luò)科技有限公司, 深圳 518038)
3(中電科新型智慧城市研究院有限公司, 深圳 518026)
大數(shù)據(jù)[1]的發(fā)展, 帶動(dòng)了各種分布式計(jì)算、存儲(chǔ)框架的發(fā)展. 其中Spark、Flink等作為開源主流的分布式計(jì)算框架, HBase、MemSQL、Elasticsearch等作為開源主流的分布式存儲(chǔ)框架. 但是計(jì)算存儲(chǔ)框架都存在分區(qū)不合理引發(fā)數(shù)據(jù)傾斜[2,3]而導(dǎo)致的集群負(fù)載不均衡現(xiàn)象, 大大降低了應(yīng)用的分析性能. 因此, 為了提高集群數(shù)據(jù)分析性能, 有必要對(duì)數(shù)據(jù)分區(qū)策略進(jìn)行研究, 最終提高數(shù)據(jù)分析的響應(yīng)速度, 快速為企業(yè)提供決策, 增加效益.
分布式存儲(chǔ)框架Elasticsearch[4]采用主從結(jié)構(gòu), 使用路由 Hash[5]作為存儲(chǔ)方式, 以數(shù)據(jù)分區(qū)Shards作為物理分區(qū), 底層依托Lucene倒排索引結(jié)構(gòu), 并且支持文本分詞, 非常適合關(guān)鍵詞搜索分析. Spark 同樣采用主從結(jié)構(gòu), Master 節(jié)點(diǎn)(主節(jié)點(diǎn))管理整個(gè)集群的資源,Worker 節(jié)點(diǎn)(從節(jié)點(diǎn))管理各計(jì)算節(jié)點(diǎn)的資源, 定期向Master 節(jié)點(diǎn)匯報(bào)節(jié)點(diǎn)資源情況, 并啟動(dòng) Executor 進(jìn)行計(jì)算.
Spark-Elasticsearch[6]集成的應(yīng)用場(chǎng)景, 采用local方式讀取數(shù)據(jù)分析的方式, 通過Elasticsearch Spark Connect組件將二者集成, Spark中Master與Elasticsearch中主節(jié)點(diǎn)連接起來, 然后Spark的Worker節(jié)點(diǎn)可以通過Master節(jié)點(diǎn)獲取到Elasticsearch中主節(jié)點(diǎn)的元數(shù)據(jù)信息, 其元數(shù)據(jù)信息包括數(shù)據(jù)有哪些分區(qū)及各分區(qū)存儲(chǔ)在哪些節(jié)點(diǎn)上, 從而實(shí)現(xiàn)程序進(jìn)行數(shù)據(jù)分析過程中,Spark的Worker節(jié)點(diǎn)利用esRDD接口本地化并行地從Elasticsearch存儲(chǔ)節(jié)點(diǎn)進(jìn)行數(shù)據(jù)讀寫、計(jì)算分析, 如圖1所示. Elasticsearch中最小物理分區(qū)是Shard, 目前每個(gè)節(jié)點(diǎn)默認(rèn)分配相同的Shard數(shù), 這會(huì)因?yàn)榧汗?jié)點(diǎn)資源的異構(gòu)性[7]導(dǎo)致節(jié)點(diǎn)處理能力的不同而引發(fā)節(jié)點(diǎn)之間數(shù)據(jù)傾斜問題. 由于此框架中Spark采用local分析數(shù)據(jù)的方式, 即數(shù)據(jù)在哪個(gè)節(jié)點(diǎn)上面, 就在相應(yīng)節(jié)點(diǎn)上進(jìn)行分析處理, Elasticsearch中的Shard數(shù)目直接反映 Spark 中的 RDD task 數(shù)目, 即任務(wù)量與分區(qū)數(shù)呈正相關(guān)關(guān)系, 如果采用默認(rèn)分區(qū)方式會(huì)導(dǎo)致嚴(yán)重負(fù)載不均衡現(xiàn)象, 如很多分區(qū)塊分布在負(fù)載高的數(shù)據(jù)節(jié)點(diǎn)上進(jìn)行處理分析, 那么會(huì)拖慢整個(gè)作業(yè)完成效率, 因?yàn)镾park 任務(wù)調(diào)度結(jié)束是所有task都完成的時(shí)刻. 現(xiàn)實(shí)應(yīng)用中, 數(shù)據(jù)傾斜問題普遍存在, 由其引起的處理節(jié)點(diǎn)負(fù)載不均衡是 Spark-Elasticsearch集成框架應(yīng)用不可避免的問題.
圖1 Spark讀Elasticsearch中數(shù)據(jù)機(jī)制圖
有關(guān)動(dòng)態(tài)分區(qū)解決負(fù)載均衡性的相關(guān)研究中, 李想等人[8]提出一種改進(jìn)的遺傳算法的數(shù)據(jù)分配策略,采用自適應(yīng)交叉和變異算子策略. 王曉燕等人[9]采用Nash-Pareto優(yōu)化均衡策略協(xié)同自動(dòng)數(shù)據(jù)分布. 王新友等人[7]設(shè)計(jì)一種基于時(shí)間序列模型二次指數(shù)平滑法對(duì)引航事故進(jìn)行預(yù)測(cè), 減少引航事故的發(fā)生. 楊華芬[10]提出一種基于優(yōu)化FA模型的動(dòng)態(tài)遷移算法, 首先構(gòu)建動(dòng)態(tài)遷移框架, 確定數(shù)據(jù)中心和網(wǎng)絡(luò)節(jié)點(diǎn)的拓?fù)浣Y(jié)構(gòu), 然后利用FA仿生群智能算法在數(shù)據(jù)中心區(qū)域范圍內(nèi)更新個(gè)體的位置并尋找最優(yōu)解, 最后引入適應(yīng)度函數(shù)和自適應(yīng)慣性權(quán)重優(yōu)化算法并擴(kuò)大尋優(yōu)范圍, 實(shí)現(xiàn)大數(shù)據(jù)遷移成本最小化. 劉琨[11]采用一次平滑預(yù)測(cè)算法+客觀熵值法權(quán)重模型, 通過確定節(jié)點(diǎn)負(fù)載情況來進(jìn)行虛擬機(jī)資源遷移達(dá)到負(fù)載均衡效果. 陳濤等人[12]提出一種數(shù)據(jù)分布算法CCHDP, 將聚類算法和一致性Hash方法結(jié)合, 根據(jù)設(shè)備可用資源權(quán)重自適應(yīng)調(diào)節(jié)分配數(shù)據(jù). 宋懷明等人[13]設(shè)計(jì)了自適應(yīng)散列和直方圖相結(jié)合的數(shù)據(jù)分布策略, 動(dòng)態(tài)調(diào)整節(jié)點(diǎn)負(fù)載均衡性. 王晶等人[14]設(shè)計(jì)了一種基于動(dòng)態(tài)閾值的遷移時(shí)機(jī)判決算法與基于負(fù)載類型感知的選擇算法相結(jié)合的虛擬機(jī)動(dòng)態(tài)遷移策略, 最終根據(jù)虛擬機(jī)與目的節(jié)點(diǎn)的資源匹配度與遷移代價(jià)選擇目的節(jié)點(diǎn), 對(duì)高負(fù)載與低負(fù)載節(jié)點(diǎn)的虛擬機(jī)動(dòng)態(tài)調(diào)整, 從而優(yōu)化節(jié)點(diǎn)資源配置問題.
針對(duì)Spark-Elasticsearch集成框架進(jìn)行數(shù)據(jù)分析的應(yīng)用場(chǎng)景, 需要提出Elasticsearch分區(qū)策略來改善負(fù)載均衡性, 提高應(yīng)用的響應(yīng)速度. 因此本文提出一種基于節(jié)點(diǎn)負(fù)載的數(shù)據(jù)動(dòng)態(tài)分區(qū)機(jī)制和策略. 基于節(jié)點(diǎn)負(fù)載的數(shù)據(jù)動(dòng)態(tài)分區(qū)機(jī)制包括負(fù)載監(jiān)測(cè)采集、預(yù)測(cè)、數(shù)據(jù)預(yù)分區(qū)、數(shù)據(jù)遷移等模塊; 基于節(jié)點(diǎn)負(fù)載的數(shù)據(jù)分區(qū)策略采用二次平滑法預(yù)測(cè)節(jié)點(diǎn)負(fù)載, 結(jié)合了 AHP 和熵值指標(biāo)權(quán)重法, 能夠根據(jù)不同的數(shù)據(jù)分析應(yīng)用得到相應(yīng)的分區(qū)策略, 動(dòng)態(tài)地調(diào)整系統(tǒng)的負(fù)載均衡性, 提高應(yīng)用的響應(yīng)速度.
針對(duì)Spark-Elasticsearch集成框架的應(yīng)用場(chǎng)景, 即采用local方式讀取數(shù)據(jù)分析的方式, 需要有效地將數(shù)據(jù)進(jìn)行分布來提高系統(tǒng)的負(fù)載均衡性, 通過提高并行度來降低應(yīng)用的響應(yīng)時(shí)間. Spark的Worker節(jié)點(diǎn)local方式并行地從Elasticsearch存儲(chǔ)節(jié)點(diǎn)進(jìn)行數(shù)據(jù)讀寫、計(jì)算分析, 如圖2所示. Elasticsearch中最小的物理單元是Shard, 而Elasticsearch中的Shards數(shù)目直接反映Spark中的RDD task數(shù)目.
圖2 Spark-Elasticsearch集成框架圖
因?yàn)镾park并行訪問Elasticsearch中的每個(gè)分區(qū)中的數(shù)據(jù), 并將每個(gè)分區(qū)中的數(shù)據(jù)轉(zhuǎn)化成自身的一個(gè)RDD分區(qū), 由于Spark中的一個(gè)RDD分區(qū)對(duì)應(yīng)一個(gè)task, 而task需要CPU來處理, 為了減少CPU資源的上下文切換, 充分利用CPU資源, 則Elasticsearch中的Shards數(shù)目的設(shè)置要適中, 不能過小或過大, 經(jīng)相關(guān)技術(shù)人員進(jìn)行長(zhǎng)時(shí)間的研究測(cè)試, 一般選擇可用CPU核數(shù)的2-3倍; 同時(shí)每個(gè)Shards中的數(shù)據(jù)需近似相等,來提高task的并行度.
在數(shù)據(jù)預(yù)分區(qū)階段, Elasticsearch的數(shù)據(jù)分布默認(rèn)是每個(gè)節(jié)點(diǎn)的分區(qū)數(shù)目相同, 而這樣會(huì)因?yàn)榧褐忻總€(gè)節(jié)點(diǎn)資源的異構(gòu)性導(dǎo)致節(jié)點(diǎn)處理能力的不同而引起節(jié)點(diǎn)之間的數(shù)據(jù)傾斜現(xiàn)象, 引發(fā)集群負(fù)載不均衡的問題. 集群節(jié)點(diǎn)偶然會(huì)出現(xiàn)負(fù)載瞬時(shí)高低峰值的情況而影響數(shù)據(jù)分區(qū)決策的擬定; 同時(shí)由于任務(wù)類型的不同,如計(jì)算型、內(nèi)存性、網(wǎng)絡(luò)傳輸?shù)热蝿?wù)類型會(huì)導(dǎo)致每種指標(biāo)的權(quán)重不同, 需要確定每種指標(biāo)權(quán)重來擬定數(shù)據(jù)分區(qū)策略; 如果數(shù)據(jù)已經(jīng)分配完, 但集群在應(yīng)用過程中可能會(huì)因?yàn)樨?fù)載不均衡問題導(dǎo)致任務(wù)執(zhí)行阻塞, 也可能因?yàn)楣?jié)點(diǎn)的增刪操作引發(fā)負(fù)載不均衡等問題, 在現(xiàn)實(shí)應(yīng)用中都可能遇到.
因此, 為了解決上述問題, 需要設(shè)計(jì)相應(yīng)的數(shù)據(jù)動(dòng)態(tài)分區(qū)機(jī)制和策略來改善系統(tǒng)的負(fù)載均衡性來提高應(yīng)用的響應(yīng)速度.
為了動(dòng)態(tài)調(diào)整集群負(fù)載均衡性來提高應(yīng)用的響應(yīng)速度, 提出了基于節(jié)點(diǎn)負(fù)載的數(shù)據(jù)動(dòng)態(tài)分區(qū)機(jī)制, 如圖3所示, 該機(jī)制包括集群節(jié)點(diǎn)資源的監(jiān)測(cè)、采集, 數(shù)據(jù)的預(yù)分區(qū)、遷移等模塊. 整個(gè)Spark-Elasticsearch集成集群一直處于應(yīng)用使用中, 監(jiān)測(cè)模塊定時(shí)讀取從節(jié)點(diǎn)中各個(gè)指標(biāo)的負(fù)載信息, 動(dòng)態(tài)地顯示CPU、內(nèi)存和帶寬的利用率等信息; 然后通過資源采集模塊將負(fù)載信息緩存起來, 并定期持久化到MySQL中, 為負(fù)載預(yù)測(cè)提供指標(biāo)實(shí)時(shí)負(fù)載信息; 接著如果有大量數(shù)據(jù)進(jìn)行導(dǎo)入時(shí), 需要對(duì)每個(gè)節(jié)點(diǎn)的每種指標(biāo)進(jìn)行預(yù)測(cè), 再通過指標(biāo)權(quán)重判定方法獲得每種指標(biāo)的權(quán)重, 接著再依據(jù)負(fù)載預(yù)測(cè)后的指標(biāo)信息與每種指標(biāo)的權(quán)重值來獲得每個(gè)節(jié)點(diǎn)的處理能力, 最后根據(jù)每個(gè)節(jié)點(diǎn)的處理能力進(jìn)行數(shù)據(jù)分布, 完成數(shù)據(jù)的預(yù)分區(qū); 如果集群在實(shí)際應(yīng)用中出現(xiàn)嚴(yán)重的負(fù)載不均衡問題, 如達(dá)到了設(shè)定負(fù)載閾值, 則將高低負(fù)載節(jié)點(diǎn)加入到源、目標(biāo)機(jī)隊(duì)列中, 并結(jié)合遷移策略進(jìn)行分區(qū)塊的遷移.
圖3 基于節(jié)點(diǎn)負(fù)載的數(shù)據(jù)動(dòng)態(tài)分區(qū)機(jī)制流程圖
本文基于節(jié)點(diǎn)負(fù)載來進(jìn)行數(shù)據(jù)有效地分布, 要解決如下問題:
(1)初始情況下, 面對(duì)大量數(shù)據(jù)的導(dǎo)入, 數(shù)據(jù)預(yù)分區(qū)根據(jù)什么原則進(jìn)行數(shù)據(jù)分布.
(2)可能因?yàn)槟承?yīng)用執(zhí)行完或者預(yù)分區(qū)不合理情況導(dǎo)致集群負(fù)載不均衡現(xiàn)象, 通過數(shù)據(jù)遷移調(diào)整負(fù)載.
本節(jié)通過動(dòng)態(tài)分區(qū)策略來改善系統(tǒng)負(fù)載均衡性,提高應(yīng)用的響應(yīng)速度. 采用二次平滑法預(yù)測(cè)節(jié)點(diǎn)負(fù)載,結(jié)合了 AHP 和熵值指標(biāo)權(quán)重法, 能夠根據(jù)不同的數(shù)據(jù)分析應(yīng)用得到相應(yīng)的分區(qū)策略, 動(dòng)態(tài)地調(diào)整系統(tǒng)的負(fù)載均衡性, 提高應(yīng)用的響應(yīng)速度.
2.2.1 數(shù)據(jù)預(yù)分區(qū)策略
(1)負(fù)載預(yù)測(cè)
因數(shù)據(jù)預(yù)分區(qū)不合理、節(jié)點(diǎn)的宕機(jī)刪除節(jié)點(diǎn)、增加節(jié)點(diǎn)進(jìn)行水平擴(kuò)展及出現(xiàn)負(fù)載極其不均衡問題等,都需要進(jìn)行分區(qū)塊的遷移來平衡負(fù)載量, 采用二次指數(shù)平滑法負(fù)載預(yù)測(cè)模塊來決定遷移量.
其中,n代表取的周期數(shù),j代表第j個(gè)周期. 預(yù)測(cè)機(jī)制的流程如圖4所示, 通過調(diào)整平滑系數(shù)α值來計(jì)算偏方差S, 取S最小時(shí)對(duì)應(yīng)的平滑系數(shù)α值.n、d的值由用戶設(shè)定.
圖4 預(yù)測(cè)機(jī)制流程圖
(2)指標(biāo)權(quán)重判定方法
因?yàn)镾park-Elasticsearch集成框架環(huán)境下的應(yīng)用場(chǎng)景, 內(nèi)存變化波動(dòng)較小, 帶寬和CPU變化波動(dòng)較大,如果只考慮客觀熵值法則會(huì)影響內(nèi)存的權(quán)重判定, 如果只考慮主觀AHP權(quán)重法會(huì)忽略某些指標(biāo)的重要性.因此, 本文通過基于二次平滑負(fù)載預(yù)測(cè)法+主客觀AHP與熵值指標(biāo)權(quán)重集成法結(jié)合的指標(biāo)權(quán)重判定方法算出每個(gè)節(jié)點(diǎn)的整體負(fù)載值, 最終再根據(jù)整體負(fù)載值來分配相應(yīng)的數(shù)據(jù)分區(qū)數(shù).
1) AHP
AHP由決策者對(duì)所有評(píng)價(jià)指標(biāo)進(jìn)行兩兩比較, 得到判斷矩陣U=(Aij)n×n. 本論文取CPU利用率、內(nèi)存利用率和帶寬利用率作為負(fù)載的評(píng)價(jià)指標(biāo), 判斷矩陣如下:
其中,A1,A2,A3分別代表CPU利用率、內(nèi)存利用率和帶寬利用率對(duì)節(jié)點(diǎn)整體負(fù)載影響的權(quán)重值. 對(duì)每列進(jìn)行歸一化求取特征向量, 再對(duì)每行進(jìn)行歸一操作求取特征向量, 最后得到各指標(biāo)的權(quán)重配比, 同時(shí)對(duì)判斷矩陣A進(jìn)行一致性檢驗(yàn), 證明判斷矩陣的合理性, 最終可得到CPU、內(nèi)存和帶寬的主觀權(quán)重分別為WS1,WS2,WS3, 并且WS1+WS2+WS3=1.
2) 熵值法
熵值法通過判斷指標(biāo)變化的離散度來反映該指標(biāo)影響程度, 能夠通過指標(biāo)變異度客觀地確定指標(biāo)權(quán)重.具體步驟如下:
① 通過測(cè)試過程得到各指標(biāo)負(fù)載來構(gòu)建負(fù)載信息決策矩陣M
其中,n代表周期數(shù),CUR、MUR和BUR分別代表CPU、內(nèi)存和帶寬的利用率.
② 對(duì)決策矩陣M每列做歸一化處理得到矩陣R
③ 利用熵公式計(jì)算指標(biāo)不確定度
用E表示某種指標(biāo)的熵, 公式如下:
其中,Ej代表指標(biāo)的熵值, 常數(shù)K=1/ln(n), 這樣能保證0≤E≤1, 即E最大為1. 當(dāng)某個(gè)屬性下各值的貢獻(xiàn)度趨于一致時(shí),E趨于1, 可看出屬性列值差異性大小可影響權(quán)系數(shù)大小, 因此可定義Dj為某個(gè)指標(biāo)的貢獻(xiàn)度,Dj= 1-Ej.
④ 計(jì)算每種指標(biāo)的客觀權(quán)重值, 公式如下:
WO1,WO2,WO3代表內(nèi)存、CPU和帶寬對(duì)于節(jié)點(diǎn)負(fù)載影響的客觀權(quán)重值, 并且WO1+WO2+WO3=1. 先通過輸入每種指標(biāo)不同周期負(fù)載值矩陣, 再計(jì)算每種指標(biāo)客觀權(quán)重值, 最后通過熵值法計(jì)算得到每種指標(biāo)的客觀權(quán)重值.
3) 主客觀AHP和熵值法權(quán)重集成法
真實(shí)情況可能出現(xiàn)主、客觀指標(biāo)權(quán)重設(shè)計(jì)的弊端問題, 為了減少弊端影響性. 因此本發(fā)明設(shè)計(jì)主客觀集成的方法來解決此類問題, 平衡兩者的權(quán)重偏差. 集成權(quán)重公式如下:
其中,β為主客觀權(quán)重調(diào)整系數(shù),wi為最終節(jié)點(diǎn)負(fù)載的權(quán)重, 其中i=1,2,3, 并且w1+w2+w3=1. 輸入每種指標(biāo)的主客觀權(quán)重值, 再通過主客觀權(quán)重集成法得到每種指標(biāo)的集成權(quán)重值.
4) 節(jié)點(diǎn)的數(shù)據(jù)分布
首先, 由前面模塊得到了內(nèi)存、CPU、帶寬3種指標(biāo)在負(fù)載中所占的主客觀集成權(quán)重大小后, 分別為w1,w2,w3.
然后, 通過每種指標(biāo)權(quán)重計(jì)算得到每個(gè)節(jié)點(diǎn)的處理能力, 公式如下:
其中,CAUi,MAUi,BAUi分別代表指標(biāo)預(yù)測(cè)后的CPU、內(nèi)存、帶寬利用率,i代表第i節(jié)點(diǎn).
最后, 得出每個(gè)節(jié)點(diǎn)要分配的數(shù)據(jù)量的占比, 公式如下:
其中,DPi代表第i節(jié)點(diǎn)應(yīng)分配的數(shù)據(jù)量占比, 有m個(gè)節(jié)點(diǎn).
通過以上步驟后可知給集群中每個(gè)節(jié)點(diǎn)分配的數(shù)據(jù)量, 即相應(yīng)的分區(qū)數(shù).
2.2.2 數(shù)據(jù)遷移策略
通過設(shè)置高低負(fù)載閾值來作為觸發(fā)數(shù)據(jù)遷移的條件, 構(gòu)造出源機(jī)和目標(biāo)機(jī)的選擇隊(duì)列. 在數(shù)據(jù)預(yù)分區(qū)之后出現(xiàn)負(fù)載不均衡問題或者增刪節(jié)點(diǎn)的情況, 需要選擇源機(jī)和目標(biāo)機(jī)來進(jìn)行數(shù)據(jù)遷移, 源機(jī)作為待遷移數(shù)據(jù)的節(jié)點(diǎn), 目標(biāo)機(jī)作為接受遷移數(shù)據(jù)的節(jié)點(diǎn), 并獲得應(yīng)遷移的分區(qū)數(shù).
(1)源機(jī)選擇
首先, 從負(fù)載緩存數(shù)組中讀取內(nèi)存利用率、CPU利用率和帶寬利用率負(fù)載信息采用二次平滑法進(jìn)行預(yù)測(cè), 預(yù)測(cè)T個(gè)周期后的每種指標(biāo)平均負(fù)載值.
然后, 將每種指標(biāo)的負(fù)載利用率預(yù)測(cè)值與主客觀權(quán)重集成方法得到每種指標(biāo)權(quán)重值相結(jié)合, 進(jìn)而得到每個(gè)節(jié)點(diǎn)的整體負(fù)載值Loadi. 負(fù)載值公式如下:
其中,CURi,MURi,BURi和w1,w2,w3分別為預(yù)測(cè)后的CPU利用率、內(nèi)存利用率、帶寬的利用率和權(quán)重值.
接著, 比較每個(gè)節(jié)點(diǎn)的負(fù)載值Loadi和設(shè)置的閾值Hth, 如果某個(gè)節(jié)點(diǎn)的負(fù)載值超過閾值Hth, 則將該節(jié)點(diǎn)加入到高負(fù)載節(jié)點(diǎn)隊(duì)列中.
然后, 按照Loadi值由大到小構(gòu)成源機(jī)選擇隊(duì)列S源={s1,s2, …,sm}.
最后, 從S源隊(duì)列中選取源機(jī). 對(duì)S源隊(duì)列中的Load值按降序排列, 按Loadi值從大到小的順序進(jìn)行源機(jī)的選擇.
(2)目標(biāo)機(jī)選擇
首先, 從負(fù)載緩存數(shù)組中讀取內(nèi)存利用率、CPU利用率和帶寬利用率負(fù)載信息進(jìn)行預(yù)測(cè), 分別預(yù)測(cè)每種指標(biāo)T個(gè)周期后的平均負(fù)載值.
然后, 將每種指標(biāo)的負(fù)載利用率預(yù)測(cè)值與主客觀權(quán)重集成方法得到每種指標(biāo)的負(fù)載權(quán)重值結(jié)合, 代入主客觀集成法計(jì)算, 進(jìn)而得到每個(gè)節(jié)點(diǎn)的整體負(fù)載值Loadi.
接著, 將每個(gè)節(jié)點(diǎn)的負(fù)載值Loadi與設(shè)置的閾值Lth進(jìn)行比較, 如果某個(gè)節(jié)點(diǎn)的負(fù)載值低于閾值Lth, 則將該節(jié)點(diǎn)加入到低負(fù)載節(jié)點(diǎn)隊(duì)列中.
然后, 按照Loadi值構(gòu)建由小到大目標(biāo)機(jī)選擇隊(duì)列D目={d1,d2, …,dm}.
最后, 從D目隊(duì)列中選取目標(biāo)機(jī). 對(duì)D目隊(duì)列中的Load值按升序進(jìn)行排列, 按Loadi從小到大的順序進(jìn)行目標(biāo)機(jī)的選擇.
(3)遷移的分區(qū)數(shù)
1)如果高低負(fù)載隊(duì)列節(jié)點(diǎn)數(shù)相同, 即S源=D目. 則分別將高低負(fù)載節(jié)點(diǎn)隊(duì)列的數(shù)據(jù)按照順序進(jìn)行匹配并行遷移, 遷移的分區(qū)數(shù)公式如下:
其中,N遷,N源,N目分別代表遷移的分區(qū)數(shù), 源機(jī)中的分區(qū)數(shù), 目標(biāo)機(jī)中的分區(qū)數(shù).
2)如果高負(fù)載隊(duì)列節(jié)點(diǎn)數(shù)大于低負(fù)載節(jié)點(diǎn)數(shù)目,即S源>D目. 則適當(dāng)調(diào)整低負(fù)載閾值, 使低負(fù)載節(jié)點(diǎn)隊(duì)列節(jié)點(diǎn)數(shù)目等于或近大于高負(fù)載節(jié)點(diǎn)隊(duì)列節(jié)點(diǎn)數(shù)目,接著按照上述遷移公式設(shè)定遷移的分區(qū)數(shù).
3)如果高負(fù)載隊(duì)列節(jié)點(diǎn)數(shù)目遠(yuǎn)小于低負(fù)載節(jié)點(diǎn)數(shù)目, 即S源<D目. 則適當(dāng)調(diào)整高負(fù)載閾值, 使高負(fù)載節(jié)點(diǎn)隊(duì)列節(jié)點(diǎn)數(shù)目等于或近小于低負(fù)載節(jié)點(diǎn)隊(duì)列節(jié)點(diǎn)數(shù)目,接著按照上述遷移公式設(shè)定遷移的分區(qū)數(shù).
4)得到匹配的源機(jī)和目標(biāo)機(jī)隊(duì)列, 并知道了每組中源機(jī)應(yīng)遷移的分區(qū)數(shù), 采用并行進(jìn)行遷移, 減少遷移開銷.
通過以上步驟, 系統(tǒng)可實(shí)現(xiàn)負(fù)載均衡. 對(duì)于增刪節(jié)點(diǎn)的突發(fā)情況, 同樣可以采用此種遷移策略.
本文針對(duì)Spark-Elasticsearch集成框架的應(yīng)用場(chǎng)景, 在局域網(wǎng)下部署Spark-Elasticsearch集成集群環(huán)境,集群中每個(gè)節(jié)點(diǎn)都是虛擬機(jī), 本部分實(shí)驗(yàn)4個(gè)節(jié)點(diǎn), 相關(guān)配置參數(shù)如表1所示, 設(shè)定的總分區(qū)數(shù)為32個(gè)分區(qū),利用某制造企業(yè)中的數(shù)據(jù)集, 驗(yàn)證基于負(fù)載預(yù)測(cè)和AHP、熵值集成權(quán)重法結(jié)合的數(shù)據(jù)動(dòng)態(tài)分區(qū)策略的有效性.
表1 Spark-MemSql集成框架機(jī)器參數(shù)
實(shí)驗(yàn)采用某制造業(yè)表product作為測(cè)試數(shù)據(jù)集, 如圖5所示, 大約有5000萬行數(shù)據(jù). 每條數(shù)據(jù)主要包括產(chǎn)品長(zhǎng)度、產(chǎn)品拉伸長(zhǎng)度、產(chǎn)品重量等. 其中weight和length兩列作為關(guān)聯(lián)分析應(yīng)用測(cè)試集, weight、drawlength、length三列可作為K-means應(yīng)用測(cè)試集,不同的應(yīng)用利用不同的數(shù)據(jù)集做測(cè)試.
圖5 分區(qū)策略性能對(duì)比測(cè)試數(shù)據(jù)集
(1)對(duì)不同預(yù)分區(qū)策略進(jìn)行性能對(duì)比測(cè)試. 本實(shí)驗(yàn)對(duì)weight和length兩列做關(guān)聯(lián)分析, 分析產(chǎn)品長(zhǎng)度和重量之間的關(guān)聯(lián)性; 對(duì)weight、drawlength、length三列做K-means聚類分析, 通過聚類分析分類. 通過比較默認(rèn)預(yù)分區(qū)策略、負(fù)載預(yù)測(cè)+AHP權(quán)重法、負(fù)載預(yù)測(cè)+AHP與熵值集成權(quán)重法的3種不同預(yù)分區(qū)策略, 然后分別統(tǒng)計(jì)執(zhí)行相同應(yīng)用的時(shí)間, 驗(yàn)證方案的有效性.
(2)在Spark-Elasticsearch框架中如果出現(xiàn)集群負(fù)載不均衡現(xiàn)象, 結(jié)合遷移策略對(duì)源機(jī)和目標(biāo)機(jī)的數(shù)據(jù)分區(qū)塊進(jìn)行遷移, 重復(fù)運(yùn)行應(yīng)用程序, 對(duì)遷移前后做性能對(duì)比, 驗(yàn)證方案的有效性.
3.3.1 預(yù)分區(qū)策略對(duì)比測(cè)試
通過不同的預(yù)分區(qū)策略進(jìn)行分區(qū), 實(shí)驗(yàn)重復(fù)運(yùn)行應(yīng)用程序, 第1組實(shí)驗(yàn)進(jìn)行關(guān)聯(lián)分析的應(yīng)用; 第2組實(shí)驗(yàn)進(jìn)行K-means聚類分析的應(yīng)用. 對(duì)執(zhí)行時(shí)間進(jìn)行對(duì)比, 驗(yàn)證不同分區(qū)方案的有效性.
(1)不同應(yīng)用中不同指標(biāo)平滑系數(shù)α
采用二次平滑預(yù)測(cè)算法最終獲得不同應(yīng)用場(chǎng)景下的不同指標(biāo)的平滑系數(shù)α, 如表2和表3所示.
表2 關(guān)聯(lián)分析應(yīng)用中不同指標(biāo)的平滑系數(shù)α
表3 K-means聚類分析應(yīng)用中不同指標(biāo)的平滑系數(shù)α
(2)利用AHP得出每種指標(biāo)的權(quán)重
首先, 輸入指標(biāo)決策矩陣A:
評(píng)判采用列與行進(jìn)行兩兩比較, 其中A1,A2,A3分別代表CPU、內(nèi)存、帶寬; 然后, 計(jì)算隨機(jī)一致性比率C.R.=C.I./R.I.=0.001<0.1, 說明決策矩陣設(shè)計(jì)合理;接著, 利用AHP獲得每種指標(biāo)的權(quán)重值; 最后通過多次實(shí)驗(yàn)調(diào)整設(shè)置權(quán)重系數(shù)β為0.7, 得到集成權(quán)重值,不同的應(yīng)用場(chǎng)景結(jié)果分別如表4和表5所示.
表4 關(guān)聯(lián)分析應(yīng)用中不同負(fù)載指標(biāo)權(quán)重值對(duì)應(yīng)表(%)
表5 K-means聚類分析應(yīng)用中不同負(fù)載指標(biāo)權(quán)重值對(duì)應(yīng)表(%)
(3)根據(jù)應(yīng)用中預(yù)測(cè)的每種指標(biāo)負(fù)載值和不同權(quán)重方法, 獲得不同分區(qū)策略下每個(gè)節(jié)點(diǎn)的處理能力, 得出每個(gè)節(jié)點(diǎn)分區(qū)數(shù)的分區(qū)數(shù), 如表6所示.
表6 不同分區(qū)策略推薦的每個(gè)節(jié)點(diǎn)的分區(qū)數(shù)
通過圖6、圖7所示, 分別執(zhí)行關(guān)聯(lián)分析和K-means聚類應(yīng)用. 從整體上看默認(rèn)分區(qū)策略效果最差, 本文設(shè)計(jì)的預(yù)測(cè)+AHP與熵值權(quán)重集成法分區(qū)策略最好, 并且隨著數(shù)據(jù)量的增加, 效果越顯著. AHP權(quán)重法是主觀權(quán)重法, 沒有根據(jù)實(shí)際應(yīng)用場(chǎng)景進(jìn)行權(quán)重配比, 有失客觀性; Spark-Elasticsearch框架的數(shù)據(jù)計(jì)算是在內(nèi)存中進(jìn)行的, 因此內(nèi)存使用較穩(wěn)定, 而帶寬使用變化程度較大,但利用率很低, 如果只采用客觀法會(huì)導(dǎo)致內(nèi)存權(quán)重小、帶寬權(quán)重較大的錯(cuò)誤結(jié)果. 因此集成主客觀權(quán)重會(huì)帶來更好的結(jié)果. 執(zhí)行不同的應(yīng)用取得了同樣的效果, 說明本文研究的預(yù)分區(qū)策略在處理相對(duì)獨(dú)立任務(wù)的應(yīng)用上具有推廣性.
圖6 關(guān)聯(lián)分析應(yīng)用預(yù)分區(qū)策略性能對(duì)比圖
圖7 K-means聚類分析應(yīng)用預(yù)分區(qū)策略性能對(duì)比圖
如圖8、圖9所示, 針對(duì)不同預(yù)分區(qū)策略執(zhí)行相同的應(yīng)用, 計(jì)算整個(gè)應(yīng)用過程中每個(gè)節(jié)點(diǎn)平均負(fù)載利用率. 從整體上看默認(rèn)分區(qū)策略出現(xiàn)嚴(yán)重的負(fù)載不均衡現(xiàn)象, 預(yù)測(cè)+AHP、預(yù)測(cè)+AHP+熵值權(quán)重集成法結(jié)合的預(yù)分區(qū)策略都能較好地解決集群負(fù)載問題, 實(shí)現(xiàn)集群負(fù)載的均衡性.
圖8 關(guān)聯(lián)分析應(yīng)用不同預(yù)分區(qū)策略節(jié)點(diǎn)負(fù)載利用率對(duì)比圖
圖9 K-means聚類分析應(yīng)用的不同預(yù)分區(qū)策略節(jié)點(diǎn)負(fù)載利用率對(duì)比圖
3.3.2 數(shù)據(jù)遷移對(duì)比測(cè)試
在Spark-Elasticsearch框架中遇到負(fù)載不均衡現(xiàn)象, 通過數(shù)據(jù)遷移策略, 對(duì)遷移前后的執(zhí)行時(shí)間進(jìn)行對(duì)比, 并考慮遷移時(shí)間開銷, 驗(yàn)證方案有效性.
利用遷移策略構(gòu)造高低負(fù)載隊(duì)列, 獲得不同節(jié)點(diǎn)應(yīng)發(fā)送或接收的分區(qū)塊數(shù), 執(zhí)行遷移操作后, 每個(gè)節(jié)點(diǎn)的分區(qū)數(shù)如表7所示.
表7 遷移前后的節(jié)點(diǎn)分區(qū)數(shù)對(duì)應(yīng)表
通過圖10、圖11所示, 表明了遷移策略的有效性, 可以改善集群的負(fù)載均衡性, 一定程度上提高了應(yīng)用的響應(yīng)速度. 數(shù)據(jù)量較少時(shí), 關(guān)聯(lián)分析數(shù)據(jù)量小于3000萬時(shí)和K-means分析數(shù)據(jù)量小于2000萬時(shí)負(fù)載沒到設(shè)定的閾值, 不觸發(fā)遷移, 但是當(dāng)數(shù)據(jù)量相對(duì)較大時(shí), 即關(guān)聯(lián)分析數(shù)據(jù)量達(dá)到3000萬和K-means分析數(shù)據(jù)量達(dá)到2000萬時(shí)負(fù)載超過閾值, 觸發(fā)遷移. 雖然改善了集群的負(fù)載均衡, 但是遷移需要消耗時(shí)間, 導(dǎo)致總時(shí)間較長(zhǎng), 當(dāng)數(shù)據(jù)量擴(kuò)大時(shí), 負(fù)載不均衡性加劇, 導(dǎo)致遷移成本相對(duì)較小, 提升了應(yīng)用的響應(yīng)速度.
圖10 關(guān)聯(lián)分析遷移策略性能對(duì)比圖
圖11 K-means聚類分析遷移策略性能對(duì)比圖
通過圖12、圖13所示, 對(duì)不同應(yīng)用進(jìn)行遷移, 比較遷移前后整個(gè)應(yīng)用過程中每個(gè)節(jié)點(diǎn)平均負(fù)載利用率,結(jié)果展示通過遷移能改善集群負(fù)載均衡性.
圖12 關(guān)聯(lián)分析數(shù)據(jù)遷移前后節(jié)點(diǎn)負(fù)載利用率平均值對(duì)比圖
圖13 K-means聚類分析數(shù)據(jù)遷移前后節(jié)點(diǎn)負(fù)載利用率平均值對(duì)比圖
本文雖然改善了集群負(fù)載均衡性, 提高了數(shù)據(jù)分析應(yīng)用的響應(yīng)速度, 但是依然存在一些不足之處. 日后的工作應(yīng)該圍繞以下幾個(gè)方面進(jìn)行研究:
(1)指標(biāo)權(quán)重的獲得
針對(duì)不同的應(yīng)用難以找到最佳指標(biāo)權(quán)重值, 本文采用主客觀權(quán)重集成法, 能較好地避免主客觀引起的偏差, 但不能得到指標(biāo)權(quán)重配比最優(yōu)解, 指標(biāo)權(quán)重需做進(jìn)一步研究及大量實(shí)驗(yàn)驗(yàn)證.
(2)數(shù)據(jù)遷移開銷的理論研究
本文雖然通過數(shù)據(jù)遷移策略改善了集群負(fù)載均衡性, 但沒從理論上考慮數(shù)據(jù)遷移過程中成本問題, 只是實(shí)驗(yàn)中包括了遷移時(shí)間.