
文章插圖
前言大數(shù)據(jù)開發(fā)的日常工作中,開發(fā)人員經(jīng)常需要使用 Spark、Flink 等計(jì)算引擎作為工具來實(shí)現(xiàn)一些 業(yè)務(wù)邏輯 的計(jì)算 。
以 Spark 為例,開發(fā)人員會(huì)使用 SparkSQL、DataFrame、RDD 等不同形式的API來實(shí)現(xiàn)業(yè)務(wù)需求 。
通常情況下,簡(jiǎn)單的需求都可以通過 SparkSQL、DataFrame 很方便的實(shí)現(xiàn),其簡(jiǎn)潔的API也是其深受數(shù)據(jù)分析師青睞的原因之一 。
但是正是因?yàn)?SparkSQL、DataFrame 的高層次封裝,在 復(fù)雜度較高的計(jì)算需求 實(shí)現(xiàn)中,可能會(huì)出現(xiàn) 實(shí)現(xiàn)復(fù)雜或者API的功能性無法滿足,或者千方百計(jì)實(shí)現(xiàn)需求之后 性能表現(xiàn)低下,代碼段復(fù)雜而龐大 的情況 。
盡管Spark允許開發(fā)人員通過UDF、UDAF等形式提供自定義的函數(shù)功能,但是此時(shí)很多人會(huì)選擇使用較為底層的RDD接口進(jìn)行開發(fā):可控性好、開發(fā)與調(diào)試方便、性能強(qiáng)勁 。
但是使用RDD接口來開發(fā)業(yè)務(wù)需求時(shí),很多小的項(xiàng)目團(tuán)隊(duì)并沒有一個(gè)統(tǒng)一的項(xiàng)目規(guī)范,需求開發(fā)完全由開發(fā)人員個(gè)人自己發(fā)揮 。
各個(gè)業(yè)務(wù)項(xiàng)目的大致流程基本是相同的:
創(chuàng)建SparkSession用 spark.table or spark.textFile 等API讀取數(shù)據(jù)源進(jìn)行RDD的各種 Transformation 和 Action 操作得到數(shù)據(jù)結(jié)果之后再調(diào)用 saveAsTable or saveAsTextFile 寫入外部數(shù)據(jù)源中雖然看起來流程挺一致的,但是其中仍然存在以下問題:
業(yè)務(wù)代碼混亂團(tuán)隊(duì)成員代碼風(fēng)格不一,有的喜歡一長(zhǎng)串一長(zhǎng)串的寫,有的喜歡將過程封裝即使將過程封裝了,但是封裝的邊界沒有明確定義,仍然會(huì)有人不小心“越界”讀寫數(shù)據(jù)源的API使用不統(tǒng)一各個(gè)計(jì)算引擎對(duì)各個(gè)數(shù)據(jù)源都有不同的讀寫API接口提供使用,一些比較繁雜的API可能會(huì)被人“錯(cuò)誤”使用同時(shí)也會(huì)有人時(shí)常忘記對(duì)應(yīng)接口如何使用,反復(fù)查閱資料重復(fù)的編碼工作理論上所有業(yè)務(wù)項(xiàng)目,除了業(yè)務(wù)邏輯是變化的之外,其余應(yīng)該都是一個(gè)不變的模板開發(fā)人員應(yīng)該專注于變化的業(yè)務(wù)邏輯,而不是每次都要分一些精力出來處理其他“邊邊角角”的事情沒有規(guī)范任由團(tuán)隊(duì)成員發(fā)揮的話,盡管有些成員能寫一手漂亮的代碼,但是你并不能保證所有人都這么優(yōu)秀 。
時(shí)間一久項(xiàng)目中代碼的 壞味道 會(huì)越來越多,最后混亂的程度可能會(huì)超出你的想象 。
為了解決以上問題,我們建議:定義一個(gè)項(xiàng)目規(guī)范,所有業(yè)務(wù)項(xiàng)目都需要遵守這個(gè)規(guī)范 。
俗話說,有規(guī)矩成方圓 。
有了項(xiàng)目規(guī)范,所有人都遵守這個(gè)標(biāo)準(zhǔn)來開發(fā) 。
有了這個(gè)標(biāo)準(zhǔn),我們就可以在標(biāo)準(zhǔn)化的基礎(chǔ)上做很多事情,比如 定義自動(dòng)化工具來幫助開發(fā)人員解放雙手 。
本文討論的項(xiàng)目規(guī)范可以作為一種參考,以供讀者與相關(guān)開發(fā)人員翻閱 。
一、項(xiàng)目規(guī)范和Java項(xiàng)目規(guī)范類似,以 模塊化項(xiàng)目 的結(jié)構(gòu)來定義項(xiàng)目規(guī)范可以為業(yè)務(wù)項(xiàng)目提供 結(jié)構(gòu)化標(biāo)準(zhǔn),其可以規(guī)整所有 混亂的業(yè)務(wù)項(xiàng)目結(jié)構(gòu) 。
項(xiàng)目結(jié)構(gòu)標(biāo)準(zhǔn)化的重要性:
項(xiàng)目統(tǒng)一管理與生成方便快速搭框架所有開發(fā)人員遵守相同的編碼規(guī)范易于交接與維護(hù)以下模塊劃分和Java項(xiàng)目類似,略微有些細(xì)節(jié)差異 。
1.1 api模塊業(yè)務(wù)計(jì)算邏輯模塊,不應(yīng)該出現(xiàn)任何 Spark等執(zhí)行框架的API 以 保持模塊獨(dú)立性與可移植 。
理論上該模塊可以獨(dú)立構(gòu)成一個(gè)單機(jī)程序執(zhí)行,這樣可以將最重要的業(yè)務(wù)邏輯根據(jù)需要遷移到任意計(jì)算引擎中,如 Spark 到 Spark Streaming、Flink 甚至 Hive UDF 等 。
對(duì)外只提供接口調(diào)用,不可直接在外部實(shí)例化具體類(工廠模式)所有service業(yè)務(wù)邏輯需要有對(duì)應(yīng)的測(cè)試用例事務(wù)控制、所有異常捕獲和處理依賴common1.2 common模塊項(xiàng)目?jī)?nèi)通用的常量、枚舉、POJO實(shí)體類、工具函數(shù)等,視情況分離,可集成到 context 中
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助:- 蘋果手機(jī)鈴聲設(shè)置教程 蘋果5s設(shè)置鈴聲怎么設(shè)置
- cass教程入門到精通 南方cass教程入門
- macbook pro 拆機(jī)圖解 mac拆機(jī)教程
- android基礎(chǔ)入門知識(shí) android基礎(chǔ)教程學(xué)習(xí)
- 簡(jiǎn)述智能網(wǎng)絡(luò)技術(shù) 人工智能網(wǎng)絡(luò)教程
- 蘋果手機(jī)如何刷機(jī)?只需要這五個(gè)步驟 蘋果6如何刷機(jī)教程
- 臺(tái)式機(jī)械硬盤安裝教程 hdtune硬盤檢測(cè)工具怎么辦
- 安卓手機(jī)上最好的虛擬機(jī)操作 vmware安卓版教程
- 電腦開不開機(jī)怎么重裝系統(tǒng)教程 win7無法關(guān)機(jī)怎么辦
- 免費(fèi)的twitter加速器推薦 twitter官網(wǎng)注冊(cè)教程
