天天看點

Spark企業級應用開發和調優1.Spark企業級應用開發和調優2.核心技術優化方法對比

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

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

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

Spark企業級應用開發和調優1.Spark企業級應用開發和調優2.核心技術優化方法對比
Spark企業級應用開發和調優1.Spark企業級應用開發和調優2.核心技術優化方法對比
Spark企業級應用開發和調優1.Spark企業級應用開發和調優2.核心技術優化方法對比
Spark企業級應用開發和調優1.Spark企業級應用開發和調優2.核心技術優化方法對比

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

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

方式一:基于檔案讀取

textfile(name, minpartitions=none, use_unicode=true) 傳回rdd,可以讀取text本地檔案,hdfs等等

方式二:基于記憶體讀取

parallelize(c, numslices=none) 傳回rdd,基于記憶體讀取.

在項目模型中,計算模型将的x,y坐标<code>xyload = sc.parallelize(xyload)</code>通過記憶體讀成rdd模式.

在處理彈性是分布式資料集之前,應該充分利用rdd本質的性質,rdd執行政策是懶操作,在轉換和執行兩個狀态中,隻有執行才會真正去計算,如将一個檔案textfile至rdd,這個檔案并沒有做實體上的動作,而rdd隻是邏輯映射,當執行college或者split等可以傳回一個新rdd時,才會發生資源配置設定,計算.可以簡單了解為,一個rdd轉變成另個新的rdd時,才發生了真正的資源排程,計算,io等操作.

在項目中,

其中,

map

傳回一個新的rdd,并對rdd中的每個元素做操作(如功能函數的運算或者定義的循環,針對的元素級别的)

在項目中,實作celllist循環操作,操作級别對彈性分布式元素中的每個元素.

filter(f)

傳回一個新的rdd,包含滿足功能函數的元素.

在項目中,實作傳回cellist中元素去除none元素,保證rdd後續業務操作正确性.

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

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

增加廣播變量降低讀寫。适用于某變量需要反複使用,如在各個分片中都有一個數組固定的計算值,這個數組不要反複從檔案讀取而直接用廣播變量,最大限度降低叢集的io.

Spark企業級應用開發和調優1.Spark企業級應用開發和調優2.核心技術優化方法對比

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

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

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

Spark企業級應用開發和調優1.Spark企業級應用開發和調優2.核心技術優化方法對比

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