大數據工程師告訴你如何高效的學習大數據

大數據離線處理技術學習要點圖:

大數據工程師告訴你如何高效的學習大數據

雖然網上也有很多的學習路線,很多的方法建議,各類不同的工具,但是找到屬於自己的纔是最好的。下面我就來詳細說下我的學習路線吧。

我還是要推薦下我自己創建的大數據資料分享羣142973723,這是大數據學習交流的地方,不管你是小白還是大牛,小編都歡迎,不定期分享乾貨,包括我整理的一份適合零基礎學習大數據資料和入門教程。

一、基礎階段

1、開始大數據學習之前,首先要把基礎打好。我在學習大數據的過程中,學習的準備部分主要包括Java,Linux和MySQL的學習。具體的學習時間,就因人而異了。比如我有很好的C語言基礎,我雖然第一次學習面向對象編程,但是編程的思路方面我還是很熟悉的。因此,我學習Java的時間,只需要2個星期即可。如果有經驗的話,你會發現,學習Java的目的,主要包括以下這些方面:

a、熟悉編程思路,面向對象思想;

b、增加對集合,多線程,I/O,設計模式的理解

c、熟練使用類,接口,爲後續各類自定義編程打下基礎。

2、Linux的學習。作爲開發人員,就要有開發人員的樣子,你要是還天天玩windows,那就比較low了。因此,黑窗口才是真愛。作爲開發人員主要使用的操作系統,linux是一切的基礎。很多大數據的軟件,操作,都是基於linux的。有餘力的朋友,建議linux的學習時間可以定爲3周左右,當然學的越好以後幫助越大。Linux的學習主要包括了以下方面:

a、Linux的基本命令,這個是跑不掉的。命令的查詢,軟件的解壓縮,安裝,各類操作的基本命令。

b、Shell腳本的編寫。很多時候,命令不是自己一行行去敲的。作爲一個程序員,必須尊重效率。能機器去做的事情,堅決不自己動手。腳本的編寫,不僅是解放手寫代碼的開始,更是一個程序員的基本素養。

3、數據庫的學習。不會數據庫的程序員,就等於耍流氓。天天和數據打交道,你告訴我你不會數據庫,這不是開玩笑嘛!當然作爲大數據工程師,我們會接觸各種各樣的數據庫,MySQL,oracle,DB2,等。作爲初期的學習,MySQL是最佳的選擇,裝個客服端軟件,簡單上手。一兩天就可以建立起你對數據庫的認識。而作爲大數據工程師,在數據庫上的學習則要深刻的多,建議沒接觸過數據庫的朋友,花上2至少兩週,把MySQL玩到手軟。作爲前期基礎準備階段,你首先需要了解以下方面:

a、數據庫的基本操作,增刪改查,條件過濾,連表查詢,窗口函數等。

b、JDBC的連接,擴展數據庫的功能。

c、數據庫的擴展知識,存儲結構,要學好大數據,數據庫能學多好就學多好。

二、核心階段

大數據的學習,都是從對分佈式思想的認識開始的。而目前最好的認識分佈式思想的方法,就是對hadoop的深刻理解。hadoop的核心組件分爲四大部分,分別爲:HDFS,Yarn,Mapreduce和COMMON。下面大概介紹下這幾個組件的學習。

1、HDFS的學習,核心思想就是對分佈式的理解。詳細的來說,要做到以下幾個方面的認識:HDFS的架構;HDFS的讀寫流程;HDFS的容錯機制;心跳機制;機架感應;數據塊等。對以上流程,不僅要了解爲什麼,最好還能通過源碼去分析,瞭解其設計原理,源碼的閱讀,不僅可以提高你的認識,更可以讓你在後期的學習中,工作中,輕鬆通過修改源碼解決各類問題。

2、Mapreduce的學習。分佈式的計算框架,後期學習到的很多分佈式計算都是借鑑了mapreduce的思想。mapreduce的計算分爲map和reduce階段。其學習可以從一個簡單的wordcount程序開始。mapreduce的學習要深入分析源碼,對其map,shuffle,reduce階段進行深刻的理解。其中涉及到的各類組件,包括輸入輸出組件,combiner,mapper,reducer,shuffle,partitioner都要深入的學習。這裏面涉及到的知識很多都會在工作的業務中碰到。如topN問題,自定義輸入輸出,二次排序問題,分區的使用等。

3、Yarn的學習。分佈式資源調度組件。其核心是各類調度器,包括FIFO,Capacity,和 Fair調度器。瞭解其架構,增進對resourcemaneger和nodemanager,container,applicationmaster的理解等。後臺啓動線程jobtracter,testtracter等了解。

4、common組件,網上資源較少,用的也不錯。主要是提供底層支持和工具。大概看看就好。

以上三大核心,就是hadoop原生最主要的部分。關於其起源,有時間的話,建議閱讀下google的三篇開源論文-bigtable,GFS,和mapreduce。該階段的學習尤爲重要,對於思想的轉變,對大數據學習的認識,以及後續學習的支持都至關重要。因此,建議多花些時間,4-5周的時間深刻的理解。通過以上的學習,就能夠搭建起一個簡單的分佈式集羣了。對於更高層次的要求,請繼續往下看。

三、HA集羣的搭建及其工具支持

完成對大數據的學習,研究hadoop的核心組件是最完美的路徑。但是要提升自己的認識,滿足企業的用人要求,就必須更進一步的深入。沒有那個企業是搭一個僞分佈,或者分佈式集羣就開始搞大數據的。因此,我們需要繼續往下研究。

爲了,保障集羣的安全,企業中至少搭建的也是HA-高可用集羣。2個至多個(hadoop3.0特性)主節點。HA集羣的搭建,就設計到選主的問題,這就需要引入zookeeper。而大數據存儲的問題,又引出了HBase,實時高效查詢引出了redis。開發效率的需要,引出了Hive-基於mapreduce的sql數據倉庫,azkaban任務流調度,sqoop數據遷移工具等。圍繞着hadoop,衍生出的各類技術和工具,只要是業務中用的上的,作爲大數據工程師,我們都需要去了解。下面我就從學習的角度,大概介紹下這些工具的使用。

1、zookeeper–分佈式應用程序協調服務。

在聊到zookeeper的時候,很多初學者會以爲zookeeper只是一個普通的應用程序協調服務,其實不然。雖然zookeeper學習起來比較簡單,主要了解下他的znode節點,選舉機制,瞭解下zookeeper的監聽機制,鎖機制。但是zookeeper確實hadoop生態中唯一無法被取代的模塊。其最主要原因就是他是整個生態體系的協調者,只要需要監聽,需要選主,都需要藉助zookeeper的力量。分佈式系統的容錯機制,高可用機制,全都依靠的是zookeeper的力量。因此,對於zookeeper的學習,需要對其所有功能做到理解的十分透徹,對之後的學習將會產生極大的幫助。對於zookeeper的學習,請花上一週的時間。

2、Hive-基於mapreduce的類sql操作。極大的簡化mapreduce的學習。通過幾十行代碼編寫的mapreduce程序,經常只需要幾個sql語句就可以搞定。這對程序員來說絕對是充滿了誘惑的。想要成爲一名大數據工程師,總不能先累死在mapreduce的編寫上吧。所以hive是必須學好的一門技術。後期的數據清洗,將會大量的用到hive。hive學的好的朋友,直接就可以靠它吃飯。後期學習中,諸如HBase,mysql等,很多數據庫中的東西,都需要導入到hive中進行處理。hive算是數據庫與分佈式計算之間的一個高速橋樑。常規的學習,一週時間即可。建議兩週的學習時間,以達到企業的用人標準。

3、HBase的學習–高可用,分佈式,基於列,適用於結構化和非結構化數據的存儲系統。HBase的列式存儲,非常的有意思。其基於rowkey,和列簇的存儲與其表設計,極大的提高了查詢效率和存儲效率。HBase的存在,將數據庫存儲的容量從幾百萬行提高到了數十億行,數百萬列。真正的滿足了大數據中大量數據的存儲問題。Hbase存儲也是分佈式的,以Hregion爲單位,會事先變現HLog。細分的話,每個Hregion包含多個hstore,memstore等。其架構包括zookeeper,Hmaster和Hregionserver。對HBase的學習,可以極大的拓寬你對數據庫的瞭解,加深對分佈式存儲的理解。建議有時間的朋友可以學習1周,深刻理解下。

4、SQOOP的學習。—數據遷移工具。通常數據的存儲是根據其特點,存儲在不同的數據庫中。工作中經常會遇到數據,大量數據之間的遷移。這時候,sqoop是我們最佳的選擇。sqoop能夠完成數據在hive,mysql,hbase,hdfs之間的遷移。通過直接的導入,或者編寫api的方式,都能夠完成。建議學習大數據的朋友,不想在工作中因爲數據的出庫入庫而頭疼的話,花上幾天時間看看SQOOP。

5、flume–日誌收集系統。數據的重要來源之一,就是收集日誌。這一點在各大電商平臺,尤爲突出(當然花錢買也是土豪的不錯選擇)。flume軟件的使用,能夠解決你的數據來源問題。對於flume的學習,請從agent開始瞭解,去解析其每一個source,channel和sink的原理,及多個agent的組合方式。主要都是通過配置文件的方式進行配置。花上一兩天,在自己的集羣上演示一兩次,十分的有必要。

6、kafka–消息中間件,高吞吐量的消息分佈式訂閱系統。kafka的架構雖簡單,分爲消費者,生產者和kafka集羣。但是其作用巨大。比如電商的日誌收集系統中,某些高峯時段,日誌的收集和處理往往因爲無法同步而造成數據丟失。kafka能夠很好的解決這個問題。通過消息的發佈訂閱模式,能夠很好的保持消息的可靠性,提供多個結構,多種消息消費模式。

7、redis基於內存存儲的數據庫。能夠高效的進行數據的增刪改查。當然也支持數據的持久化。在實時的讀寫環境中,效果極其顯著。作爲一個高性能的key-value數據庫,其操作簡單的,快速的特性,十分的受程序員的喜愛。而且還支持發佈定於哦。後續對spark有興趣的同學,一定願意花時間學習學習redis。我相信一兩天的學習,就會讓你對redis愛不釋手。

8、Azkaban–任務流調度工具。主要通過編寫腳本你的方式,讓你的工作更輕鬆。因爲在企業中用的到,所以建議想要成爲大數據工程師的朋友們還是花時間學習下。有編寫shell腳本基礎的朋友,azkaban的學習就小菜一碟了。當然簡單的任務流調度,請用crontab就好。殺雞就不要用牛刀了。否者你也可以上oozie。

9、Maven–項目搭建工具。簡單的爲節省你的時間。其依靠依賴方式導入jar,可以大大的減少因jat帶來的問題,讓你的項目搭建更加的隨心所欲。一天時間,從此不再擔心jar包問題。

10、git/svn–版本控制系統。這是爲了讓作爲外行的你,顯得更加專業而加入的學習內容。但是要注意的是,兩者之間是存在較大的區別的。大概聊下兩者之間的區別,方便朋友的選擇。git是分佈式的,而svn不是。git沒有全局的版本號,svn有。git按元數據方式存儲,而svn存儲文件。svn不適合分支中再開分支,否者影響全世界,一個分支就是一個完整目錄。而git中可以在自己的本地庫無線開啓分支。

以上就是我對大數據離線數據分析學習路線的一個認識。大體上,想學習大數據的朋友,按照上面的方式學習的話, 可以建立一個對大數據工程師的基本認識,達到一個初級大數據工程師的標準-當然,請把裏面的關鍵部分都理解的深刻,技術操練到極致。學習加上實戰,通過一兩個項目的實戰,相信大家都可以很好的掌握大數據基本技術。加油啦!

最後提一點,大數據的學習,最重要的是兩點:

一、興趣。如何判斷自己是否有興趣呢?當你看完我寫的這一大段,發現自己口水直流的時候,就代表你是有興趣的啦。

二、學習能力,這其中最重要的就是收集信息的能力。不懂的知識點,就多查網絡資料。一個人講得你聽不懂,你就聽另外一個人講得。網絡資源這麼多,總有一個你喜歡的。

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