Spark學習路線圖

Spark學習路線圖

Spark學習的痛點

對初學者(特別是自學者)學習來說,Spark學習有以下兩大痛點


1.頭緒太多,不知道從哪學

從Spark的技術棧可以看到,涉及的技術從操作系統到外部組件、Spark框架、交互工具、編程語言,涉及多個層次,每個層次又包括多個技術和知識點,對初學者來說,可能只是對其中的部分技術有一些模糊的認識,並不會形成圖1中那麼全面、清晰的層次。


Spark學習路線圖

圖1.Spark Streaming數據源和輸出


這樣,就會導致學習的時候,到底是從哪開始?比如確定了先學習Linux,那麼Linux的發行版又選擇哪個好?Linux的命令又需要學習哪些?如果要想學得全面,僅《鳥哥的Linux私房菜》系列書可能就夠學1、2年的,那麼又要學到哪個程度?又比如Scala語言,僅簡化版的《快學Scala》就有300多頁,10多章,又該從哪開始?學習哪些?學到什麼程度?Spark框架除了Spark Core以外,還有GraphX、Streaming、Spark SQL和SparkR等,它們是否都要一個一個的學?還是隻選其中幾個學?如果學,那又該選擇哪幾個最好呢?


所以,在Spark初學者的道路上,處處都存在著選擇,如何在紛繁複雜的路徑中,選擇一條較優的路徑,對初學者來說,通常是很困難的事情。


2.處處掣肘,起步艱難

Spark初學者在起步階段會遇到各種各樣的問題,例如,Linux的各種權限問題、命令使用問題、Spark環境構建的各種配置問題、Scala學習中的各種語法問題、Spark編程中的各種異常等,都是橫亙在初學者面前的一座座大山。初學者往往費盡精力,解決了一個問題,結果又冒出了更多的問題,這種心力交瘁,看不到盡頭的感覺在起步階段十分常見。

Spark快速學習路線圖

Spark學習沒有捷徑,任何宣稱不需要下功夫就能輕鬆掌握Spark的說法,都是不靠譜、不負責任的。這裡提到的快速學習路線,是讓付出更有效,少踩坑,少做無用功,但不管怎樣,都需要下功夫,不斷實踐。


1.Spark快速學習路線圖

Spark學習要區分以下兩種情況。

● 必須要學習的內容。對於這部分內容,從一開始就要把基礎打好,必須牢固掌握。

● 可以後續再學的內容。對於這部分內容,只需要清楚其概念,心中有數就可以了,待到需要時,能迅速找到資料,確定學習方法,再快速自學。

基於上面的劃分,列出Spark快速學習的路線圖,如圖2所示。


Spark學習路線圖

圖2. Spark學習路線圖


● 圖1中列出的內容屬於必學部分;

● 左側列為要學習的知識模塊,箭頭方向表示學習順序。

● 右側為每個知識模塊對應的知識點和要求,或者說是學習完該模塊後,要達到的目標。


2.注意事項(重要)

圖2中的內容相對Spark技術棧中所列的技術做了大幅簡化,這並不是說沒有列出的內容不需要學習或不重要,而是說,學習時可以先按照上圖進行系統學習,可以由易到難,快速構建一個最簡的Spark知識體系。


這個最簡Spark知識體系是學習後續Spark其他知識點模塊的基礎。一旦構建了這個知識體系,其他的Spark知識點,就可以根據需要參考本書,做針對性的學習。如果不使用上面的路線圖,打亂順序,多點出擊,或者全盤包攬的話,實踐證明效果往往很不理想。


Spark學習中的關鍵點

下面列出Spark學習中需要注意的點或原則,它們可以使得後續的學習更加高效。

● 看到結果比明白原理更重要;

● 動手比看書更重要;

● 暫時理解不了的原理,或者找不到原因的問題,可以先放下,繼續往後學;

● RDD、DataFrame和Dataset是Spark基礎中最重要的3類數據結構;

● RDD永遠不會過時,它只是逐漸退居幕後;

● DataFrame和Dataset正在成為Spark與外界打交道的統一接口;

● 結構化大數據處理在Spark中應用越來越多,Spark SQL越來越重要;

● 各種數據格式轉換、數據源的連接非常重要;

● SparkR、流數據處理、GraphX和MLlib可以在後續需要的時候再去學習。


Spark技術棧

按照使用層次列出Spark的技術棧,分為4層,自底向上依次為:操作系統、外部組件、Spark框架、編程語言,如圖3所示。


Spark學習路線圖

圖3.Spark技術棧

1.底層基石——操作系統

Spark程序運行在Linux操作系統上,常用的Linux發行版是Ubuntu和CentOS。安裝Linux操作系統時所涉及的技術包括:虛擬機安裝與使用、Linux的安裝、功能定製等;系統安裝後,涉及的技術可以分為以下3類。

● Shell命令:Linux基本配置、文件操作、用戶管理、權限設置、網絡配置、服務的開啟、關閉、自動運行、文本編輯器使用等命令;

● 腳本編程:Linux下主流的腳本語言主要是Bash等,技術涉及:變量的使用、基本數據類型、關鍵詞、控制結構、函數定義與使用、調試技巧等;

● 操作系統接口:Spark應用和 Spark 框架的開發,更多的是和JDK以及開發語言的接口打交道,直接同操作系統接口的交互並不多。操作系統的接口對於理解JVM機制以及Spark應用和Spark框架的性能調優時會用到。


2.周圍友援——外部組件

Spark 負責大數據分析處理,而數據從哪來、處理後的數據應該往哪去,則需要其他的外部組件來負責。圖1-5列出了各類外部組件的主流選型,如非結構化數據存儲HDFS、結構化數據存儲Hbase,消息處理、數據接入工具Kafka、數據採集工具Flume、分佈式程序一致性組件Zookeeper。實際開發中,Spark會同這些組件頻繁交互,因此,需要掌握這些組件的基本運行原理、安裝方法、基本配置、常用命令、API接口和日誌查看方法等基礎技術。


3.中堅核心——Spark框架

Spark框架就是 Spark 自身,它是 Spark 大數據開發的核心。Spark 框架由Spark Core、Spark SQL、GraphX、流數據處理、SparkR、MLlib/ML和 Spark 交互工具組成。後面會詳述各組成部分的功能。


4.上層接口——編程語言

Spark 支持的編程語言包括Java、Scala、Python、R和SQL。上述編程語言中 Spark 對Scala的支持最好,因為 Spark 框架自身就是用Scala開發的。Spark還支持SQL,SQL和其他4種語言不一樣,它可以獨立出現在spark-sql(Spark 交互工具的一種)中,也可以嵌入在編程語言中。


-End-

本文作者:文艾(艾叔)系統分析師;原解放軍理工大學-奇虎360聯合實驗室技術負責人;曾受邀為中興通訊和奇虎360等公司做技術培訓;具有多年大數據開發和運維經驗,帶領團隊完成了與華為、中興通訊和奇虎360等公司的多個大數據類項目;其主講的Spark課程長期排名51CTO學院大數據類(Spark分類)年銷量前列,著有《Spark大數據編程實用教程》(機械工業出版社)。


分享到:


相關文章: