• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      一種Spark輕量級客戶端實現(xiàn)方法研究

      2023-09-15 01:33:06盧居輝朱海勇
      河南科技 2023年15期
      關鍵詞:集群邊緣服務器

      張 鳳 盧居輝 朱海勇 吳 文

      (廈門市美亞柏科信息股份有限公司乾坤大數(shù)據(jù)操作系統(tǒng)研究院,福建 廈門 361001)

      0 引言

      2022年3月5日,李克強總理在第十三屆全國人民代表大會第五次會議上作《政府工作報告》[1],該報告明確提出“建設數(shù)字信息基礎設施,逐步構建全國一體化大數(shù)據(jù)中心體系”。2022年4月10日,《中共中央國務院關于加快建設全國統(tǒng)一大市場的意見》發(fā)布,明確提出要加快培育統(tǒng)一的技術和數(shù)據(jù)市場[2]。2022年12月19日,《中共中央國務院關于構建數(shù)據(jù)基礎制度更好發(fā)揮數(shù)據(jù)要素作用的意見》(以下簡稱“數(shù)據(jù)二十條”)發(fā)布,從數(shù)據(jù)產(chǎn)權、流通交易、收益分配、安全治理等方面出發(fā),為構建數(shù)據(jù)基礎制度提出20條政策舉措?!皵?shù)據(jù)二十條”的出臺,將充分發(fā)揮中國海量數(shù)據(jù)規(guī)模和豐富應用場景的優(yōu)勢,激活數(shù)據(jù)要素潛能,做強做優(yōu)做大數(shù)字經(jīng)濟,增強經(jīng)濟發(fā)展新動能[3]。因此,數(shù)據(jù)資源大一統(tǒng)將會成為接下來大數(shù)據(jù)領域研究的熱點和發(fā)展的趨勢[4]。

      大數(shù)據(jù)領域的研究往往涉及海量數(shù)據(jù),而處理海量數(shù)據(jù)的技術也是研究的熱點問題。其中,YARN 作為一種統(tǒng)一資源管理機制,因其可運行多套計算框架而備受好評[5]。Spark 作為一種常用的大數(shù)據(jù)計算框架[6-7],也是一個通用的并行計算框架[8],Spark on YARN 運行模式是基于YARN 彈性資源管理機制,確保用戶在YARN 集群中運行的服務和資源能被完全隔離,從而實現(xiàn)對同時運行在集群中的多個任務進行管理。

      在YARN 集群環(huán)境中,每個應用實例都有一個Application Master 進程,負責向集群資源管理器請求Container 資源。Spark 運行架構主要由Driver、Executor組成[9],Driver負責作業(yè)調度,Executor負責執(zhí)行具體的計算任務。根據(jù)Spark Driver 和Application Master 在運行時所處的相對位置,Spark on YARN 可分為兩種模式,即YARN-Client 模式和YARN-Cluster模式[10]。

      在YARN-Client 模式中,Spark Driver 單獨運行在集群邊緣節(jié)點服務器上,通過部署在YARN集群上的Application Master 進行通信,在申請Container 資源后,啟動Spark Executor 來執(zhí)行具體任務,二者分屬集群內外兩個不同的進程。在運行過程中,前端用戶可與Spark Driver 保持在線連接,進行更多交互操作,適合處理交互類型的Spark作業(yè)。

      在YARN-Cluster 模式中,Spark Driver 運行于YARN 集群的Application Master 中,共享同一個Container進程。在任務提交后,Spark Driver斷開與前端用戶的連接,其生命周期由YARN 控制,不適合運行交互類型的作業(yè)。

      為滿足與前端用戶的頻繁交互需求,實現(xiàn)對Spark on YARN運行模式下的Spark作業(yè)生命周期的自主控制,在集群邊緣服務器上部署YARN-Client模式的Web服務,通過Web API來接收、處理前端用戶發(fā)送的Spark作業(yè)請求[11]。由于Spark Driver 被集成在Web 服務中,相當于該服務內部提供一個Spark Session 入口,通過該入口將Spark 作業(yè)提交到YARN 集群上運行,其作業(yè)運行結果也將被同步返回給前端用戶,實現(xiàn)與前端用戶的在線交互需求。但該方案也有不足之處,在YARN-Client 模式下,Spark Driver 運行在集群邊緣節(jié)點服務器上,由于Spark 任務要處理的數(shù)據(jù)量較大且耗時較長,在Spark Executor 數(shù)量較多的情況下,Spark Driver 與Spark Executor(s)的交互過程會占用大量的邊緣節(jié)點服務器系統(tǒng)資源,造成性能瓶頸,影響邊緣節(jié)點服務器上其他業(yè)務的正常執(zhí)行。

      在YARN-Cluster 模式下,為避免由前端用戶直接訪問集群內部節(jié)點而造成的安全隱患,通常要在邊緣節(jié)點服務器上部署一個Web Server,通過保持與集群上Spark Driver 的長連接會話關系,可實現(xiàn)前端用戶與Spark 的在線交互,但該方案仍無法避免集群間的網(wǎng)絡連接消耗。

      為解決上述重量級客戶端方案存在的弊端,可以通過輕量級開源應用框架Spring Boot 來構建Web 應用服務[12],在內部集成Spark Driver,以YARN-Cluster 模式將多個無差別的Web 服務部署到YARN 集群中,利用Restful API 來完成Spark 在線交互式作業(yè)的提交請求[13]。這些服務進程將長期駐留在集群內部,可避免因頻繁申請Container資源而造成的時間消耗。

      同時,在邊緣節(jié)點服務器上部署高性能負載均衡和動態(tài)代理組件HAProxy[14]。將Spring Boot服務所在的IP 地址和Restful API 端口通過HAProxy 動態(tài)配置接口(HAProxy Data Plane API)實時注冊到HAProxy 后端代理配置中,利用HAProxy 的自動重載機制來實現(xiàn)動態(tài)加載后端配置,使前端用戶能在無感知情況下,通過HAProxy 的統(tǒng)一對外接口將Spark 作業(yè)無差別地提交到分散運行在集群上的Spring Boot 服務中運行,可避免外部用戶直接訪問集群內部節(jié)點,在實現(xiàn)安全隔離的同時,也實現(xiàn)多個Spring Boot服務間的并行調度,且互不干擾。

      通過上述方法,邊緣節(jié)點服務器與集群節(jié)點之間無須保持長連接會話,即可動態(tài)實現(xiàn)Spark on Yarn 運行模式下Spark 作業(yè)的異步提交及整個Spark作業(yè)生命周期的自主控制。

      1 系統(tǒng)框架

      本研究通過提供一種輕量級客戶端提交Spark作業(yè)的實現(xiàn)方法來克服重量級客戶端方案帶來的弊端,系統(tǒng)具體實現(xiàn)框架如圖1所示。

      圖1 系統(tǒng)實現(xiàn)框架

      輕量級Web應用服務(Spring Boot)內部集成執(zhí)行引擎Spark Driver,通過Spark on YARN 的Cluster模式在YARN 集群內部運行,由Restful API 來接收處理請求,并在Spring Boot 服務內部直接通過Spark Driver 來調度執(zhí)行器Spark Executor(s),從而完成Spark作業(yè)的執(zhí)行和其他相關請求操作。該服務長期駐留在YARN 集群內,以在線交互的方式及時處理不同類型的Spark 作業(yè),可避免頻繁啟動Spark容器造成的時間消耗。

      HAProxy(可提供高性能負載均衡、基于TCP和HTTP 應用的動態(tài)代理)部署在YARN 集群的邊緣服務器節(jié)點上,代理前端用戶發(fā)送Spark 作業(yè)相關操作請求,根據(jù)負載均衡策略將其發(fā)送到分散在后端YARN 集群上的Spring Boot 服務上進行相應處理。前端用戶只需通過HAProxy 統(tǒng)一訪問接口就可無差別使用后端YARN 集群上的Spring Boot 服務,從而實現(xiàn)前端用戶與YARN集群的安全隔離。

      HAProxy Data Plane API 是一種能實現(xiàn)HAP-roxy 配置動態(tài)更新的Restful API。在啟動Spring Boot 成功后,將其監(jiān)聽的IP 地址和端口通過HAP-roxy Data Plane API 動態(tài)注冊到HAProxy 代理配置中,HAProxy Data Plane API 會根據(jù)配置的變更情況來自動重載HAProxy 服務,使前端用戶能在無感知的情況下訪問所有后端服務。

      服務啟動器(Launcher)用于監(jiān)聽并保證在YARN 集群中始終運行一定數(shù)量的Spring Boot 服務。Launcher 會將失效的Spring Boot 服務接口從HAProxy Data Plane API 中動態(tài)刪除。當YARN 集群上Spring Boot 服務數(shù)量不足時,Launcher 會啟動新的Spring Boot服務,直至滿足數(shù)量要求。

      Spring Boot 服務在接收到Spark 作業(yè)提交請求后,會直接將其寫入輕量級的消息隊列服務中,排隊等待處理,實現(xiàn)前端用戶請求與后端執(zhí)行引擎的解耦與異步化。

      NoSQL 數(shù)據(jù)庫用于保存和更新Spark 作業(yè)的執(zhí)行進度,并在作業(yè)運行完畢后,會保存一定數(shù)量的采樣數(shù)據(jù)或結果數(shù)據(jù),用于向前端用戶展示。

      2 動態(tài)代理服務

      使用動態(tài)代理服務的好處是其能屏蔽前端用戶與后端YARN 集群間的直接交互訪問,保證內網(wǎng)安全,同時使Spark Driver 分散運行于YARN 集群上,減少集群邊緣節(jié)點的運行壓力,從而實現(xiàn)輕客戶端服務的目的,具體處理流程如圖2所示。

      圖2 動態(tài)代理服務處理流程

      動態(tài)代理服務管理執(zhí)行步驟如下。

      (1)在YARN 邊緣節(jié)點服務器上啟動Launcher服務,啟動并保持一定數(shù)量的Spring Boot 服務。Launcher 服務會定期通過HAProxy Data Plane API來獲取HAProxy 當前已配置的Spring Boot 后端服務接口。在Launcher 與Spring Boot 進行服務通信時,檢查所有后端服務的有效性,將當前有效的Spring Boot服務數(shù)量N與實際需要啟動的服務數(shù)量M進行比較。若N

      (2)啟動成功的Spring Boot 服務會將其所在IP和監(jiān)聽端口通過HAProxy Data Plane API 注冊到HAProxy后端配置中。

      (3)HAProxy Data Plane API 會根據(jù)最新配置動態(tài)重載HAProxy,并對外提供統(tǒng)一代理服務,將Spark 相關請求轉發(fā)到分散在YARN 集群中的Spring Boot服務上進行處理。

      3 提交作業(yè)

      通過動態(tài)代理HAProxy 提供的統(tǒng)一訪問接口,前端用戶Client將Spark作業(yè)Job提交到后端YARN集群的Spring Boot 服務上執(zhí)行,并異步獲取作業(yè)的執(zhí)行進度和處理結果。提交作業(yè)處理流程如圖3所示。

      圖3 提交作業(yè)流程

      提交作業(yè)具體執(zhí)行步驟如下。

      (1)Client 向HAProxy 統(tǒng)一訪問接口發(fā)送Job 處理請求。

      (2)HAProxy 在接收到Job 處理請求后,根據(jù)負載均衡策略選擇一個后端服務(如Spring Boot 1)來處理當前請求。

      (3)Spring Boot 1服務會直接將Job處理請求信息寫入到消息隊列中,通知前端用戶該Job 已提交成功,進入調度隊列等待后續(xù)處理。

      (4)YARN 集群中其他空閑的后端服務(如Spring Boot 2)從消息隊列中獲取Job 處理請求信息。

      (5)利用Spring Boot 2 服務內部集成的Spark Driver 調用集群中的Spark Executor(s)對Job 進行調度執(zhí)行。

      (6)Spring Boot 可定時將Job 處理進度寫入到NoSQL 數(shù)據(jù)庫,并將Job 的最終處理結果和采樣數(shù)據(jù)寫入NoSQL數(shù)據(jù)庫。

      (7)Client 從步驟(3)接收到Job 提交成功的信息后,向HAProxy 統(tǒng)一訪問接口發(fā)送獲取Job 實時進度和處理結果的請求信息。

      (8)對獲取到的Job 進度和結果請求信息,HAProxy 按照負載均衡策略選擇一個后端服務(如Spring Boot 3)進行處理。

      (9)Spring Boot 3 在接收到請求信息后,從NoSQL 數(shù)據(jù)庫中獲取Job 實時進度和處理結果,并經(jīng)HAProxy 返回給前端用戶,完成此次作業(yè)的提交過程。

      4 取消作業(yè)

      Spark 作業(yè)Job 在被提交到集群上的Spring Boot 服務后,因某種原因,前端用戶要提前終止作業(yè)執(zhí)行。此時,可通過HAProxy 提供的統(tǒng)一訪問接口來及時撤銷Spark 作業(yè)。取消作業(yè)流程如圖4 所示。

      圖4 取消作業(yè)流程

      取消作業(yè)具體執(zhí)行步驟如下。

      (1)前端用戶向HAProxy 統(tǒng)一訪問接口提交取消Job的請求。

      (2)HAProxy 按照負載均衡策略將請求分發(fā)到后端服務(如Spring Boot 2)上執(zhí)行。

      (3)Spring Boot 2從NoSQL數(shù)據(jù)庫中獲取Job執(zhí)行進度和Job 當前運行時所在的Spring Boot 服務信息。

      (4)Spring Boot 2 根據(jù)Job 的進度狀態(tài)來執(zhí)行不同的取消操作。①若Job 執(zhí)行進度不存在,則說明該Job 未執(zhí)行,Job 信息仍在消息隊列中,直接刪除消息隊列中的Job 信息,標記Job 已取消,繼續(xù)執(zhí)行步驟(5);②若Job 執(zhí)行進度為已完成狀態(tài)(如成功、失敗、取消等終結狀態(tài)),則說明該Job 已執(zhí)行完畢,無須處理,直接標記Job 已取消,繼續(xù)執(zhí)行步驟(5);③若Job 執(zhí)行進度為未完成狀態(tài),則說明該Job 正在執(zhí)行。將取消Job 的請求信息轉發(fā)到Job 運行時所在的后端服務(如Spring Boot 1)中進行處理,繼續(xù)執(zhí)行步驟④;④利用Spring Boot 1 內部集成的Spark Driver 來向集群提交Job 取消指令,完成后將NoSQL 數(shù)據(jù)庫中的Job執(zhí)行進度更改為取消狀態(tài),標記Job 已取消,并將取消結果反饋給Spring Boot 2。

      (5)Spring Boot 2 將Job 取消結果通過HAProxy反饋給前端用戶,結束操作。

      5 結語

      基于輕量級Web 應用框架集成的Spark Driver 功能,采用YARN-Cluster 模式將多個無差別的Web 服務部署到資源充足的YARN 集群上,能分散運行,并行調度,減輕邊緣節(jié)點服務器的資源使用負擔,降低故障發(fā)生頻率。

      通過代理組件來實現(xiàn)動態(tài)配置更新與自動重載機制,代理后端多個無差別Web 服務,對外提供統(tǒng)一的服務訪問接口,能在用戶對后端無感知的情況下,接收和分發(fā)Spark 作業(yè)的交互式提交請求,從而完成對Spark 作業(yè)生命周期的管理。

      代理組件僅提供Spark請求信息和結果數(shù)據(jù)的高性能代理和轉發(fā)功能,無須在邊緣節(jié)點服務器與集群之間保持長連接會話,具體請求由后端Web服務之間自動協(xié)作完成,能實現(xiàn)輕客戶端的高效交互效果。

      綜上所述,本研究通過在邊緣節(jié)點服務器上部署高性能負載均衡和動態(tài)代理組件HAP-roxy,提供一種輕量級客戶端方式來提交Spark作業(yè)的實現(xiàn)方法,實現(xiàn)對Spark 作業(yè)進行動態(tài)調度與全生命周期的管理。通過Spark on YARN模式將多個具有相同功能但相互之間獨立運行的Rest 服務部署到YARN 集群上,利用HAProxy的自動重載機制來動態(tài)更新和加載后端服務配置,使前端用戶能在對后端變動無感知的情況下;通過HAProxy 的統(tǒng)一對外接口,將Spark 作業(yè)提交到分散運行在YARN 集群上無差別的Rest服務中執(zhí)行。該方法無須在邊緣節(jié)點服務器與集群節(jié)點服務器之間保持長連接會話,通過HAProxy 能有效避免外部用戶直接訪問集群內部節(jié)點,達到集群內外安全隔離的效果,同時實現(xiàn)Spark on YARN 運行模式下Spark 作業(yè)的交互式提交與異步調度,完成對Spark 作業(yè)全生命周期的自主控制。該方法在解決傳統(tǒng)重客戶端與Spark 應用服務保持長連接會話弊端的同時,也能滿足前端用戶的頻繁交互需求。

      猜你喜歡
      集群邊緣服務器
      通信控制服務器(CCS)維護終端的設計與實現(xiàn)
      海上小型無人機集群的反制裝備需求與應對之策研究
      一種無人機集群發(fā)射回收裝置的控制系統(tǒng)設計
      電子制作(2018年11期)2018-08-04 03:25:40
      Python與Spark集群在收費數(shù)據(jù)分析中的應用
      一張圖看懂邊緣計算
      勤快又呆萌的集群機器人
      得形忘意的服務器標準
      計算機網(wǎng)絡安全服務器入侵與防御
      積分刷刷刷-FTP服務器篇
      在邊緣尋找自我
      雕塑(1999年2期)1999-06-28 05:01:42
      富川| 同仁县| 临西县| 井冈山市| 铜山县| 青神县| 南丹县| 正定县| 大埔县| 军事| 颍上县| 东源县| 阳原县| 龙游县| 崇左市| 黄梅县| 泸水县| 崇礼县| 龙川县| 金坛市| 宜黄县| 邵阳市| 镇原县| 屯门区| 灵武市| 秦皇岛市| 潜山县| 东港市| 调兵山市| 资兴市| 平定县| 峨山| 巴彦淖尔市| 苍梧县| 工布江达县| 乌兰县| 紫金县| 茂名市| 靖州| 蕲春县| 江口县|