前言
最近發(fā)現(xiàn)身邊有不少小伙伴想轉(zhuǎn)行做數(shù)據(jù)工程師,聊天的過(guò)程中發(fā)現(xiàn)大家對(duì)該如何入門(mén)有很多迷茫的地方,周末寫(xiě)篇博客記錄一下。
哪些人適合繼續(xù)閱讀
數(shù)據(jù)工程師該如何入門(mén)?話題有點(diǎn)大,而且每個(gè)人的理解都很不一樣,因此我們會(huì)先限定一下會(huì)對(duì)這個(gè)話題感興趣的人群:
做了幾年其它軟件開(kāi)發(fā),發(fā)現(xiàn)大數(shù)據(jù)方向更有前景
在校的童鞋,畢業(yè)后想搞數(shù)據(jù)開(kāi)發(fā),但是學(xué)校沒(méi)相關(guān)課程
沒(méi)搞過(guò)軟件開(kāi)發(fā),對(duì)之前的工作沒(méi)信心想搞互聯(lián)網(wǎng),發(fā)現(xiàn)大數(shù)據(jù)方向挺不錯(cuò)
本文結(jié)構(gòu)
前面已經(jīng)限定了一個(gè)大致的話題范圍,下面介紹一下主要的文章結(jié)構(gòu):
數(shù)據(jù)工程師的日常工作,或者是什么是數(shù)據(jù)工程師
數(shù)據(jù)工程師需要具備什么技能
該怎么學(xué)
0x01 數(shù)據(jù)工程師的技能樹(shù)
1. 什么是數(shù)據(jù)工程師
數(shù)據(jù)工程師這個(gè)概念其實(shí)很模糊,不同的人和公司對(duì)它賦予的含義也區(qū)別很大,感興趣的可以看一下我前面的幾篇文章。在這里,我們大概聊一下一般意義上的數(shù)據(jù)工程師在工作中會(huì)做什么?
集群運(yùn)維:安裝、測(cè)試、運(yùn)維各種大數(shù)據(jù)組件
數(shù)據(jù)開(kāi)發(fā):細(xì)分一點(diǎn)的話會(huì)有ETL工程師、數(shù)據(jù)倉(cāng)庫(kù)工程師等
數(shù)據(jù)系統(tǒng)開(kāi)發(fā):偏重Web系統(tǒng)開(kāi)發(fā),比如報(bào)表系統(tǒng)、推薦系統(tǒng)等
這里面有很多內(nèi)容其實(shí)是十分重合的,下面大致聊一下每一塊內(nèi)容大致需要學(xué)什么,以及側(cè)重點(diǎn)。
2. 集群運(yùn)維
數(shù)據(jù)工程師,基本上是離不開(kāi)集群搭建,比如hadoop、Spark、Kafka,不要指望有專門(mén)的運(yùn)維幫你搞定,新組件的引入一般都要自己來(lái)動(dòng)手的。
因此這就要求數(shù)據(jù)工程師了解各種大數(shù)據(jù)的組件。
由于要自己的安裝各種開(kāi)源的組件,就要求數(shù)據(jù)工程師要具備的能力: Linux 。要對(duì)Linux比較熟悉,能各種自己折騰著玩。
由于現(xiàn)在的大數(shù)據(jù)生態(tài)系統(tǒng)基本上是 JVM 系的,因此在語(yǔ)言上,就不要猶豫了,JVM系的Java和Scala基本上跑不掉,Java基本上要學(xué)的很深,Scala就看情況了。
3. ETL
ETL 在大數(shù)據(jù)領(lǐng)域主要體現(xiàn)在各種數(shù)據(jù)流的處理。這一塊一方面體現(xiàn)在對(duì)一些組件的了解上,比如Sqoop、Flume、Kafka、Spark、MapReduce;另一方面就是編程語(yǔ)言的需要,Java、Shell和Sql是基本功。
4. 系統(tǒng)開(kāi)發(fā)
我們大部分的價(jià)值最后都會(huì)由系統(tǒng)來(lái)體現(xiàn),比如報(bào)表系統(tǒng)和推薦系統(tǒng)。因此就要求有一定的系統(tǒng)開(kāi)發(fā)能力,最常用的就是 Java Web 這一套了,當(dāng)然Python也是挺方便的。
需要注意的是,一般數(shù)據(jù)開(kāi)發(fā)跑不掉的就是各種提數(shù)據(jù)的需求,很多是臨時(shí)和定制的需求,這種情況下, Sql 就跑不掉了,老老實(shí)實(shí)學(xué)一下Sql很必要。
0x02 如何入門(mén)
前面提到了一些數(shù)據(jù)工程師會(huì)用到的技能樹(shù),如果希望了解更多,可以看一下《No.3 漫談數(shù)據(jù)開(kāi)發(fā)工程師的技術(shù)廣度》。
下面給一個(gè)入門(mén)的建議,完全個(gè)人意見(jiàn)。
1. 了解行業(yè)情況
剛開(kāi)始一定要了解清楚自己和行業(yè)的情況,很多人根本就分不清招聘信息中的大數(shù)據(jù)和數(shù)據(jù)挖掘的區(qū)別就說(shuō)自己要轉(zhuǎn)行,其實(shí)是很不負(fù)責(zé)的。不要總是趕熱點(diǎn),反正我就是經(jīng)常被鄙視做什么大數(shù)據(jù)開(kāi)發(fā)太Low,做數(shù)據(jù)就要做數(shù)據(jù)挖掘,不然永遠(yuǎn)都是水貨。
2. 選擇學(xué)習(xí)途徑
如果真是清楚自己明確地想轉(zhuǎn)數(shù)據(jù)開(kāi)發(fā)了,要考慮一下自己的時(shí)間和精力,能拿出來(lái)多少時(shí)間,而且在學(xué)習(xí)的時(shí)候最好有人能多指點(diǎn)下,不然太容易走彎路了。
在選擇具體的學(xué)習(xí)途徑時(shí),要慎重一點(diǎn),有幾個(gè)選擇:
自學(xué)
報(bào)班
找人指點(diǎn)
別的不說(shuō)了,報(bào)班是可以考慮的,不要全指望報(bào)個(gè)輔導(dǎo)班就能帶你上天,但是可以靠他幫你梳理思路。如果有專業(yè)從事這一行的人多幫幫的話,是最好的。不一定是技術(shù)好,主要是可溝通性強(qiáng)。
3. 學(xué)習(xí)路線
學(xué)習(xí)路線,下面是一個(gè)大致的建議:
第一階段
先具備一定的Linux和Java的基礎(chǔ),不一定要特別深,先能玩起來(lái),Linux的話能自己執(zhí)行各種操作,Java能寫(xiě)點(diǎn)小程序。這些事為搭建Hadoop環(huán)境做準(zhǔn)備。
學(xué)習(xí)Hadoop,學(xué)會(huì)搭建單機(jī)版的Hadoop,然后是分布式的Hadoop,寫(xiě)一些MR的程序。
接著學(xué)學(xué)Hadoop生態(tài)系統(tǒng)的其它大數(shù)據(jù)組件,比如Spark、Hive、Hbase,嘗試去搭建然后跑一些官網(wǎng)的Demo。
Linux、Java、各種組件都有一些基礎(chǔ)后,要有一些項(xiàng)目方面的實(shí)踐,這時(shí)候找一些成功案例,比如搜搜各種視頻教程中如何搞一個(gè)推薦系統(tǒng),把自己學(xué)到的用起來(lái)。
第二階段
到這里是一個(gè)基本的階段了,大致對(duì)數(shù)據(jù)開(kāi)發(fā)有一些了解了。接著要有一些有意思內(nèi)容可以選學(xué)。
數(shù)據(jù)倉(cāng)庫(kù)體系:如何搞數(shù)據(jù)分層,數(shù)據(jù)倉(cāng)庫(kù)體系該如何建設(shè),可以有一些大致的了解。
用戶畫(huà)像和特征工程:這一部分越早了解越好。
一些系統(tǒng)的實(shí)現(xiàn)思路:比如調(diào)度系統(tǒng)、元數(shù)據(jù)系統(tǒng)、推薦系統(tǒng)這些系統(tǒng)如何實(shí)現(xiàn)。
第三階段
下面要有一些細(xì)分的領(lǐng)域需要深入進(jìn)行,看工作和興趣來(lái)選擇一些來(lái)深入進(jìn)行
分布式理論:比如Gossip、DHT、Paxo這些構(gòu)成了各種分布式系統(tǒng)的底層協(xié)議和算法,還是要學(xué)一下的。
數(shù)據(jù)挖掘算法:算法是要學(xué)的,但是不一定純理論,在分布式環(huán)境中實(shí)現(xiàn)算法,本身就是一個(gè)大的挑戰(zhàn)。
各種系統(tǒng)的源碼學(xué)習(xí):比如Hadoop、Spark、Kafka的源碼,想深入搞大數(shù)據(jù),源碼跑不掉。
0xFF 總結(jié)
我把數(shù)據(jù)工程師的概念縮小了一些,不包含機(jī)器學(xué)習(xí)和深度學(xué)習(xí)這些算法方向的內(nèi)容,因此整體是有局限的。不過(guò)可以做一些參考。然后還有一些參考的書(shū)籍和網(wǎng)上的資料暫時(shí)也沒(méi)時(shí)間整理。
希望這篇文章能提供一點(diǎn)點(diǎn)思路和參考,不至于特別盲目。有問(wèn)題歡迎交流。
來(lái)自36大數(shù)據(jù)
大數(shù)據(jù)周刊
眾論大數(shù)據(jù) 引領(lǐng)大時(shí)代
聯(lián)系客服