spark便捷開發總體流程介紹

在公司做大數據開發已經四五年了,因此也積累了一些心得體會,便趁著這次機會大體描述下。


spark便捷開發總體流程介紹


首先:數據開發的前提肯定是需要數據的,而數據從哪裡來,大部分的數據都存儲在Oracle中,而spark的計算 數據來源基本上都是hdfs。雖然oracle也可以與spark進行直接交互,但是如果oracle的表的數據量高達千萬、億 級別,每次的spark的查詢都會對oracle數據庫產生極大的影響,因此不建議直接讓spark讀取oracle的表。

因此,我這邊是通過Apache Nifi 作為ETL工具,將oracle中的數據 以分鐘級別的運行頻率將數據同步到hdfs中,為何要這麼頻繁的分鐘級別,而不是天級別,因為這樣保證了以極低的價格實現了小時級別的數據任務的可能,而且分鐘級別的量的查詢對oracle數據庫的壓力也是可以略微不計。

給大家上一張 Nifi同步數據的總體圖


spark便捷開發總體流程介紹

大致的邏輯是:

一:生成每一張表的開始時間和結束時間
二:實現時間的自增,保證查詢的sql的不重複。
三:生成sql後通過ExecuteSQL 生成結果
四:將步驟三生成的結果進行數據分區
五:將已經分區後的文件寫入hdfs中,格式為parquet。

這樣數據落盤到hdfs這一步算是完成了。

之前就是spark的運行計算了,正常的流程是編譯自己的代碼,生成jar包,然後在yarn集群上運行。

但是每次業務修改邏輯後,開發同學需要每次重新編譯自己的代碼,因為邏輯調整了。

那有沒有辦法不需要重新編譯代碼生成jar包呢。

我在閱讀spark2的源碼的時候意外的發現了spark中如何實現動態編碼的那部分代碼,就是

<code>WholeStageCodegenExec/<code>

有興趣的小夥伴可以自己去看下。

既然spark有辦法將一些文本的代碼動態加載然後去處理。

那麼我們自己的業務代碼能否也做到這樣呢,說幹就幹,就自己申請了服務器,開始編寫前臺、後臺代碼,用於實現這個 網頁式代碼修改 方案。

經過好幾個月的時間,從構想到雛形,再到成品,中間不停地修修改改,索性是不負所望了。

先給大家看下效果:


spark便捷開發總體流程介紹


spark便捷開發總體流程介紹

大家可以看到,可以在網站上編寫代碼,而這個代碼 後臺會存儲在數據庫中。

而之前的編譯的jar包可以在代碼裡設置,去讀取oracle中的文本代碼。

這樣就可以實現在不重新編譯jar包的形式下修改邏輯。

當然這中間的實現 說起來簡單,但是實現是複雜的,後面我會開篇章為大家一一介紹,如何從零開始實現 spark 代碼開發 網頁化這個流程。


分享到:


相關文章: