• 正文
    • Apache?Spark?Shuffle
    • 解決Spark?Shuffle網(wǎng)絡傳輸性能瓶頸的關鍵
    • RDMA相比傳統(tǒng)網(wǎng)絡技術的優(yōu)勢
    • RDMA技術在Apache?Spark中的應用
    • 性能數(shù)據(jù)和比較分析
    • 應用場景建議
    • 總結
  • 推薦器件
  • 相關推薦
申請入駐 產(chǎn)業(yè)圖譜

RDMA技術在Apache Spark中的應用

2024/03/04
2528
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

背景介紹

在當今數(shù)據(jù)驅動的時代,Apache?Spark已經(jīng)成為了處理大規(guī)模數(shù)據(jù)集的首選框架。作為一個開源分布式計算系統(tǒng),Spark因其高效的大數(shù)據(jù)處理能力而在各行各業(yè)中廣受歡迎。無論是金融服務、電信、零售、醫(yī)療保健還是物聯(lián)網(wǎng),Spark的應用幾乎遍及所有需要處理海量數(shù)據(jù)和復雜計算的領域。它的快速、易用和通用性,使得數(shù)據(jù)科學家和工程師能夠輕松實現(xiàn)數(shù)據(jù)挖掘、數(shù)據(jù)分析、實時處理等任務。

然而,在Spark的燦爛光環(huán)背后,一個核心的技術挑戰(zhàn)一直困擾著用戶和開發(fā)者?--?Shuffle過程中的網(wǎng)絡瓶頸。

在大規(guī)模數(shù)據(jù)處理時,Shuffle是Spark中不可或缺的一環(huán),它涉及大量數(shù)據(jù)在不同節(jié)點間的交換,是整個數(shù)據(jù)處理過程中最耗時的部分之一。隨著數(shù)據(jù)量的不斷增長,網(wǎng)絡傳輸成為了顯著的性能瓶頸,這不僅影響了處理速度,還影響了整體的資源利用效率和系統(tǒng)的可擴展性。

Apache?Spark?Shuffle

在Spark中,Shuffle是數(shù)據(jù)處理過程的一個關鍵階段,發(fā)生在數(shù)據(jù)需要redistribute的情況。

圖一:?shuffle中的數(shù)據(jù)流向

每個左上角的彩色條帶代表Spark在Shuffle前計算得到的一個數(shù)據(jù)塊。假設這些數(shù)據(jù)塊分別存放在集群的不同的節(jié)點上。此刻,假設我們希望“根據(jù)顏色將這些數(shù)據(jù)塊進行分組”,那么Shuffle過程就會啟動:

首先,每臺機器上的數(shù)據(jù)塊會按顏色進行本地第一次聚合(從左上角的彩色條帶變?yōu)橹猩喜康牟噬珬l帶)。這些經(jīng)過聚合的數(shù)據(jù)就成了Shuffle的中間數(shù)據(jù)。接下來,Spark會將中間數(shù)據(jù)以文件的形式暫存到各自節(jié)點的硬盤上(從中上部的條帶變?yōu)?File")。這一部分稱為Shuffle的Map階段。

在這之后,所有相同顏色的數(shù)據(jù)塊會通過網(wǎng)絡第二次聚合到一個指定的節(jié)點上(從中上部的彩色條帶移動至中下部)。這一階段稱為Shuffle的Reduce階段。

至此,Spark完成了“根據(jù)顏色將數(shù)據(jù)塊進行分組”這個要求,Shuffle過程結束。

在實際的操作中,Shuffle是一個非常耗時的過程,因為它涉及到大量的數(shù)據(jù)在網(wǎng)絡中的傳輸。如果Shuffle管理得不好,它會成為Spark作業(yè)性能瓶頸的主要原因。

解決Spark?Shuffle網(wǎng)絡傳輸性能瓶頸的關鍵

為了克服這一挑戰(zhàn),近年來,遠程直接內(nèi)存訪問(RDMA)技術逐漸進入了專家們的視野。RDMA允許內(nèi)存數(shù)據(jù)直接從一個系統(tǒng)傳輸?shù)搅硪粋€系統(tǒng),而無需通過操作系統(tǒng)的干預,這顯著減少了數(shù)據(jù)傳輸過程中的延遲和CPU的使用率。在高性能計算和大規(guī)模數(shù)據(jù)中心環(huán)境中,RDMA已經(jīng)顯示出了其強大的網(wǎng)絡加速能力。

將RDMA技術應用于Apache?Spark,尤其是在Shuffle過程中,可以大幅度減輕網(wǎng)絡瓶頸帶來的影響。通過利用RDMA的高帶寬和低延遲特性,Spark的數(shù)據(jù)處理性能有望得到顯著的提升。

RDMA相比傳統(tǒng)網(wǎng)絡技術的優(yōu)勢

Kernel?Bypass:

  • 傳統(tǒng)的網(wǎng)絡通信需要操作系統(tǒng)內(nèi)核參與數(shù)據(jù)的發(fā)送和接收,這會增加額外的延遲。每個數(shù)據(jù)包在傳輸過程中都需要經(jīng)過操作系統(tǒng)的網(wǎng)絡協(xié)議棧,這個過程中涉及多次上下文切換和數(shù)據(jù)拷貝。如下圖所示。

圖二:?傳統(tǒng)網(wǎng)絡通信中數(shù)據(jù)的發(fā)送和接收

  • RDMA技術允許網(wǎng)絡設備直接訪問應用程序內(nèi)存空間,實現(xiàn)了內(nèi)核旁路(kernel?bypass)。這意味著數(shù)據(jù)可以直接從發(fā)送方的內(nèi)存?zhèn)鬏數(shù)浇邮辗降膬?nèi)存,無需CPU介入,減少了傳輸過程中的延遲。如下圖所示。

圖三:?RDMA網(wǎng)絡通信中數(shù)據(jù)的發(fā)送和接收

  • 對于Spark的Shuffle過程,這意味著數(shù)據(jù)塊可以更快地在節(jié)點間傳輸,因為它們不再需要在用戶空間和內(nèi)核空間之間進行多次拷貝。

CPU?Offloading:

  • 在傳統(tǒng)的網(wǎng)絡通信中,CPU需要處理包括TCP協(xié)議棧在內(nèi)的大量網(wǎng)絡協(xié)議處理任務,這不僅消耗了大量的計算資源,而且還增加了通信的延遲。
  • RDMA通過其協(xié)議和硬件的設計,允許網(wǎng)絡設備處理大部分數(shù)據(jù)傳輸?shù)募毠?jié),從而釋放CPU資源。這意味著CPU可以專注于執(zhí)行計算任務,而不是網(wǎng)絡數(shù)據(jù)的傳輸,從而提高了整體的計算效率。
  • 在Spark中,這樣可以確保CPU更多地用于執(zhí)行Map和Reduce階段之外的實際計算工作,而不是在網(wǎng)絡通信上。

RDMA技術在Apache?Spark中的應用

  • 在Spark中集成RDMA

Spark允許將外部實現(xiàn)的ShuffleManager插入到其架構中。下圖中通過實現(xiàn)Spark的接口,可以創(chuàng)建專有的ShuffleManager從而將RDMA技術引入到Shuffle過程中。

圖四:?通過Spark接口將RDMA集成到Apache?Spark

  • RDMA加速的實現(xiàn)

圖五:?RDMA在Spark?Shuffle過程中的位置

上圖中展示了RDMA引入Apache?Spark前后的Shuffle過程中的數(shù)據(jù)傳輸方式。

在上半部分,展示了Apache?Spark使用Netty作為網(wǎng)絡傳輸層的傳統(tǒng)方法。數(shù)據(jù)從磁盤讀取,通過Netty服務器傳輸,然后由Netty客戶端接收,并放入隊列中供進一步處理。

在下半部分,展示了使用RDMA作為網(wǎng)絡傳輸層的方法。在這種方式中,?Netty客戶端被RDMA客戶端替換,而由于RDMA單邊操作的特性,不再需要服務器端,Disk上的數(shù)據(jù)通過MMAP加載進入用戶空間的內(nèi)存,之后Client使用RDMA直接在網(wǎng)絡上進行內(nèi)存訪問操作,避免了數(shù)據(jù)在操作系統(tǒng)內(nèi)存和網(wǎng)絡接口之間的多次復制,從而提高了數(shù)據(jù)傳輸速度,并減少了延遲和CPU負載。

性能數(shù)據(jù)和比較分析

為了驗證我們的實現(xiàn),我們在多種數(shù)據(jù)集和查詢負載下進行了性能測試。測試結果如下圖所示

圖六:SQL的性能提升效果

這些測試結果表明,在多種場景下使用RDMA均能實現(xiàn)大約10%左右的性能提升。然而,值得注意的是,具體的加速效果會受到業(yè)務邏輯和數(shù)據(jù)處理工作負載的影響,因此我們推薦在實施RDMA解決方案前,對特定的應用場景進行詳細評估。

應用場景建議

通過RDMA和Spark的特性分析,結合測試,可得到針對RDMA技術在Spark中適用和不適用的場景的優(yōu)化建議:

  • 適合RDMA的場景
  • 大數(shù)據(jù)量的復雜SQL操作:在處理包含復雜操作(如Order?by)的大數(shù)據(jù)量SQL查詢時,RDMA技術可顯著提升效率。
  • 大量小數(shù)據(jù)分區(qū):當分區(qū)數(shù)量較多,且每個分區(qū)處理的數(shù)據(jù)量較小,傳送的數(shù)據(jù)包較多時,RDMA的加速效果尤為顯著。
  • 不適合RDMA的場景
  • 數(shù)據(jù)量大幅減少的操作:如SQL中的Group?by聚合操作等,這些減少數(shù)據(jù)量的計算可能不會從RDMA中獲得顯著加速。
  • 基于HDD的磁盤集群:在使用HDD磁盤的集群中,由于讀寫速度較慢,磁盤I/O所占的時間較長,這可能限制RDMA技術的加速潛力。
  • 數(shù)據(jù)高度本地化:?如果數(shù)據(jù)本地化良好,則意味著網(wǎng)絡傳輸占比較少,這種計算難以通過RDMA獲得加速。

總結

盡管面臨一些挑戰(zhàn),RDMA技術在Apache?Spark中的應用仍然有著顯著的優(yōu)勢,體現(xiàn)在以下幾個方面:

  1. 提高數(shù)據(jù)傳輸效率:RDMA通過提供低延遲和高帶寬的數(shù)據(jù)傳輸,顯著加快了Spark中的數(shù)據(jù)處理速度。這是因為RDMA直接在網(wǎng)絡設備和應用程序內(nèi)存之間傳輸數(shù)據(jù),減少了CPU的干預,從而降低了數(shù)據(jù)傳輸過程中的延遲。
  2. 減少CPU占用:RDMA的Kernel?Bypass特性允許數(shù)據(jù)繞過內(nèi)核直接從內(nèi)存?zhèn)鬏?,減少了CPU在數(shù)據(jù)傳輸過程中的工作量。這不僅提高了CPU的有效利用率,還留出了更多資源用于Spark的計算任務。
  3. 改善端到端處理時間:在對比測試中,使用RDMA相比傳統(tǒng)的TCP傳輸方式,在端到端的數(shù)據(jù)處理時間上有顯著的降低。這意味著整體的數(shù)據(jù)處理流程更加高效,能夠在更短的時間內(nèi)完成相同的計算任務。
  4. 優(yōu)化Shuffle階段的性能:在Spark中,Shuffle階段是一個關鍵的、對性能影響較大的階段。RDMA通過減少數(shù)據(jù)傳輸和處理時間,有效地優(yōu)化了Shuffle階段的性能,從而提升了整個數(shù)據(jù)處理流程的效率。
  5. 增強大規(guī)模數(shù)據(jù)處理能力:對于處理大規(guī)模數(shù)據(jù)集的場景,RDMA提供的高效數(shù)據(jù)傳輸和低延遲特性尤為重要。它使得Spark能夠更加高效地處理大數(shù)據(jù)量,提高了大規(guī)模數(shù)據(jù)處理的可擴展性和效率。

總而言之,RDMA技術在Apache?Spark中的應用顯著提升了數(shù)據(jù)處理的效率和性能。在未來,相信隨著數(shù)據(jù)量的持續(xù)增長和計算需求的日益復雜化,RDMA技術在Apache?Spark以及更廣泛的大數(shù)據(jù)處理和高性能計算領域的應用將越來越廣。

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風險等級 參考價格 更多信息
XC6SLX9-L1CPG196I 1 AMD Xilinx Field Programmable Gate Array, 715 CLBs, 9152-Cell, CMOS, PBGA196, 8 X 8 MM, 0.50 MM PITCH, LEAD FREE, BGA-196
$204.26 查看
XCR3384XL-10TQ144I 1 AMD Xilinx EE PLD, 10ns, 384-Cell, CMOS, PQFP144, TQFP-144
$107.46 查看
A3P400-FG256I 1 Microsemi Corporation Field Programmable Gate Array, 9216 CLBs, 400000 Gates, 350MHz, CMOS, PBGA256, 17 X 17 MM, 1.60 MM HEIGHT, 1 MM PITCH, FBGA-256
$42.14 查看

相關推薦