Spark企業級應用開發和調優

2021-07-22 10:18:58 字數 2233 閱讀 8342

spark專案程式設計優化歷程記錄,主要介紹了spark企業級別的開發過程中面臨的問題和調優方法。包含合理分配分片,避免計算中間結果(大資料量)的collect,合理使用map,優化廣播變數等操作,降低網路和磁碟io,提高計算效率。

首先如下圖(2.1),spark應用開發在集群(偽分布式)中的記錄,每一種不同顏色的折線代表乙個分布式機器

最終,圖4中四條折線並行達到峰值(即cpu100%).降低了處理時間,增大了處理效率.

spark之所以快速,一是分而治之,二是允許基於記憶體計算.

第一步,常用的構建乙個分布式資料方式:

sc.textfile("file:///native/dir")

sc.textfile("/hdfs/dir")

sc.parallelize([0, 2, 3, 4, 6], 5).glom().collect()
在專案模型中,計算模型將的x,y座標xyload = sc.parallelize(xyload)通過記憶體讀成rdd模式.

在處理彈性是分布式資料集之前,應該充分利用rdd本質的性質,rdd執行策略是懶操作,在轉換和執行兩個狀態中,只有執行才會真正去計算,如將乙個檔案textfile至rdd,這個檔案並沒有做物理上的動作,而rdd只是邏輯對映,當執行college或者split等可以返回乙個新rdd時,才會發生資源分配,計算.可以簡單理解為,乙個rdd轉變成另個新的rdd時,才發生了真正的資源排程,計算,io等操作.

在專案中,

cellist=xyload.map(getcelllist)

cellisttxt = cellist.filter(lambda x : x != none)

其中,

map(f, preservespartitioning=

false)

返回乙個新的rdd,並對rdd中的每個元素做操作(如功能函式的運算或者定義的迴圈,針對的元素級別的)

在專案中,實現celllist迴圈操作,操作級別對彈性分布式元素中的每個元素.

cellisttxt = cellist.filter(lambda x : x != none)
返回乙個新的rdd,包含滿足功能函式的元素.

在專案中,實現返回cellist中元素去除none元素,保證rdd後續業務操作正確性.

rdd的collect操作可以實現元素級別的聚合,但是這個執行過程會造成單一driver大量io,記憶體占用過大,網路傳輸量大等等瓶頸.

所以,在getcellist方法後,將分布式持久化,然後再通過檔案批量依次讀取過程,避開driver開銷過大的難題.

增加廣播變數降低讀寫。適用於某變數需要反覆使用,如在各個分片中都有乙個陣列固定的計算值,這個陣列不要反覆從檔案讀取而直接用廣播變數,最大限度降低集群的io.

由圖5,在企業中開發spark應用,以介面的服務方式,第一次post大資料平台檔案上傳服務,上傳所需的資料檔案,二次post呼叫服務介面,傳入spark分布式模型必備的引數,包括執行本次執行id,輸入路徑,輸出路徑.一期模型開始監控大資料平台執行返回的狀態.

此時,基於每個rdd記憶體做計算,map操作得到getcellist,並通過filter去除髒資料(none),形成中間結果,分布式持久化,最後通過numpy依次讀取持久化檔案,並做排序後儲存成最終結果.

圖5 分布式spark模型的主要執行過程示意圖

最終,業務平台通過大資料平台監控得到執行成功狀態訊號,get最終結果檔案至業務平台.

Spark企業級應用開發和調優

spark專案程式設計優化歷程記錄,主要介紹了spark企業級別的開發過程中面臨的問題和調優方法。包含合理分配分片,避免計算中間結果 大資料量 的collect,合理使用map,優化廣播變數等操作,降低網路和磁碟io,提高計算效率。首先如下圖 2.1 spark應用開發在集群 偽分布式 中的記錄,每...

Hive企業級調優

對sql語句的優化 統計個數使用count 1 不要使用count 查詢字段不要select 使用select 字段 使用特殊的儲存格式 列式儲存 orc,parquet 建表的時候 stored as orc 小表join大表 mr程式中的map端 jojn 小表是個小檔案可以分布式的快取到集群的...

Hive企業級調優(五)

推測執行 在分布式集群環境下,因為程式bug 包括hadoop本身的bug 負載不均衡或者資源分布不均等原因,會造成同乙個作業的多個任務之間執行速度不一致,有些任務的執行速度可能明顯慢於其他任務 比如乙個作業的某個任務進度只有50 而其他所有任務已經執行完畢 則這些任務會拖慢作業的整體執行進度。為了...