爲什麼大數據平臺至關重要?

你好,我是李智慧。今天我來做模塊四的答疑,主題是爲什麼大數據平臺至關重要。

我前面說過,軟件大體可以分爲兩種,一種是爲最終用戶開發的,實現用戶需要的業務功能;另一種是爲軟件工程師開發的,供軟件工程師使用。我在專欄前三個模塊講到的各種大數據產品,都屬於後一種,最終用戶不可能自己提交一個Hadoop程序去執行大數據計算,這是軟件工程師的工作,因此大數據產品也是爲軟件工程師開發的。而如何讓軟件工程師能夠便捷地提交各類大數據計算程序給大數據計算引擎去執行,如何將用戶實時數據轉化爲大數據產品的數據源,如何利用好大數據的計算結果,這些都是大數據平臺的職責範圍。

大數據平臺將互聯網應用和大數據產品整合起來,構建成一個完整的系統,將實時數據和離線數據打通,使數據可以實現更大規模的關聯計算,挖掘出數據更大的價值,從而實現數據驅動業務,通過數據統計發現業務規律(也就是機器學習模型)。而利用這個規律對未來的數據進行分類和預測,使系統呈現出智能的特性,也爲互聯網未來發展和人類的生產生活創造了無限可能。

大數據平臺將互聯網應用和大數據產品整合起來,一方面使互聯網應用變得更加智能、強大;一方面也使得大數據產品實現技術落地。技術不同於科學,科學拓展人類的認知邊界,而技術是人們改造世界的工具,科學的成果可以轉化爲技術;而技術真正能夠改造世界,需要技術落地,真正應用到生產過程中。用我們熟知的Hadoop爲例,即使它的技術再厲害,如果沒有具體應用,沒有被廣泛使用,同樣也很難說明它有多大的價值。所以技術落地使技術產品實現真正價值,也正是大數據平臺使得大數據技術產品可以落地應用,實現了自身價值。

所以,大數據平臺不但對應用至關重要,對各種大數據技術產品也至關重要。事實上,大數據平臺對大數據工程師的技術進階也非常重要。

這些年來,多次有同學向我諮詢如何成爲軟件架構師。軟件架構師,顧名思義,就是從事軟件架構設計的那個人。而關於軟件架構,其定義是“關於軟件各個組成部分及其關係的描述”,所以軟件架構師就是對軟件各個組成部分及其關係進行設計和描述的那個人。軟件的各個組成部分包括業務組件模塊,比如用戶管理模塊、訂單處理模塊,也包括技術組件,比如緩存組件、消息隊列組件,當然還有大數據技術組件。

軟件架構師要想設計出一個符合業務場景,便於開發維護的軟件架構,必須要對業務很熟悉,還要對技術很精通。要將複雜的業務拆分成較小的、低耦合高內聚的、便於開發維護的模塊;還要對各種技術組件的功能特性、技術原理、使用和調優方法很熟悉。軟件架構師需要選擇合適的技術組件應用到自己的軟件架構中,並在將來的開發使用過程中指導工程師正確使用這些技術組件,還要能根據業務需要對這些技術組件進行適當的調優甚至改造。

所以,我的觀點是,從按照需求進行業務功能開發的程序員進階到軟件架構師,並不是隨着經驗積累、工作年限的增加就能自動能完成的。如果你一直按照別人給定的技術架構和業務需求開發代碼,你很難從更高的層面去思考軟件的架構是如何設計出來的,也缺乏明確的目標去掌握那些真正有難度的、底層的技術。

因此幫助你實現技術進階,同樣也是這個專欄當初設計的一個初衷。專欄前面三個模塊希望你能瞭解、掌握大數據技術產品組件的原理,然後通過模塊四,將各種大數據技術產品融會貫通,應用到自己的開發實踐中,構建一個大數據平臺。而通過專欄系統的學習,一方面可以實現大數據的業務價值,另一方面也可以使自己從業務開發者的角色,逐步進階成爲軟件架構設計者的角色。

我的專欄的名字叫《從0開始學大數據》,確實不需要你有任何大數據背景就可以跟着專欄開始學習大數據,但是我並不希望你學完專欄後,還只是打了一個大數據的基礎,我更希望你能掌握構建大數據系統大廈的能力。這當然會有難度,學習過程中也會有挫折感,但是我依然希望你能堅持學習,即使有些技術不能完全掌握,但是至少可以讓你的視野達到一個更高的高度,去感受架構師如何思考架構設計,並可以把收穫應用到未來的學習工作中,讓自己有不斷進步的目標和動力。

下面我來回答一下“helloWorld”同學提出的一個問題。

老實說我沒有做過這類產品的開發,也不太瞭解騰訊的這個流計算平臺,僅僅說一下我對這個功能實現的思路。

通過前面的學習我們知道,Spark實現分佈式計算的最小單位是計算任務(Task),每個任務針對一個不同數據分片進行計算,相同的一組任務組成一個任務集(TaskSet),通常一個任務集就是一個計算階段(Stage),所有的計算階段組成一個有向無環圖(DAG)。

所以這個有向無環圖就是Spark分佈式計算的核心,根據這個有向無環圖的依賴關係,不斷地將任務分發給計算集羣去計算,每個計算進程領到計算任務後,執行任務對應的代碼,最後完成大數據計算。

既然根據大數據應用程序代碼可以生成有向無環圖,那麼能不能直接把這個有向無環圖畫出來,然後根據這個有向無環圖進行分佈式計算呢?當然可以,這就是問題中提到的可視化編程的思路。

我在專欄第12期講Spark編程時提到,我們瞭解到Spark提供了一組針對大數據的計算函數,包括轉換函數和執行函數兩種,事實上每個計算任務就是由一個或多個這樣的函數構成的。那麼可視化編程的時候,只需要將這些函數拖動過來根據數據處理邏輯組成有向無環圖即可。

我們還知道,Spark的這些計算函數的輸入參數是另外一個函數,也就是真正的運行邏輯,比如fliter函數的輸入是一個布爾表達式,比如 x > 100,以判斷數據是否進行下一步處理。

所以這樣一個可視化編程環境也會預置一些這樣函數,以可視化節點的形式提供,開發者拖動這些節點,並在節點上輸入一些簡單表達式(或者拖動一些表達式符號和字段名稱進來),就可以完成大數據可視化編程了。我畫了一個簡單的示意圖。

開發這樣的有向無環圖的可視化編輯工具技術非常成熟,只要根據這個圖形生成一個XML之類的描述文件,交給一個執行引擎去執行就可以了。

至於如何根據一個XML文件執行計算邏輯,可以參考Hive的實現。在專欄第11期我們也學習過,Hive QL經過語法分析、語義解析與優化後生成一個執行計劃,這個執行計劃也是一個有向無環圖。Hive用XML描述這個有向無環圖,並提交給Hive的執行引擎,執行引擎解析XML,並利用Hive內置的Operator算子構建MapReduce作業,提交給Hadoop執行。

有興趣的同學可以在Spark上嘗試一下,根據XML生成Spark代碼,再把這個代碼編譯後提交給Spark引擎執行,這個過程應該並不難。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章