大數(shù)據(jù)跨界,從這里開(kāi)始
首先,如題,這篇依然是寫(xiě)給那些從其他領(lǐng)域跨界到大數(shù)據(jù)領(lǐng)域的朋友的,當(dāng)然,初入大數(shù)據(jù)領(lǐng)域,或者對(duì)大數(shù)據(jù)領(lǐng)域有所興趣的朋友,也可一觀。
想起要寫(xiě)這個(gè)話題,已經(jīng)很久了,直到最近私密群建立起來(lái),才發(fā)現(xiàn)這個(gè)話題應(yīng)該是更急切需要被討論一下的。
雖然我對(duì)于大數(shù)據(jù)培訓(xùn)市場(chǎng)一直不算太感冒,但是,如果說(shuō)對(duì)于那些想要跨界進(jìn)入大數(shù)據(jù)領(lǐng)域的朋友來(lái)說(shuō),不可否認(rèn),全面的培訓(xùn)是最快的方式,最少比自學(xué)來(lái)的快、更系統(tǒng)。
但我一直對(duì)于大部分培訓(xùn)課程體系的設(shè)計(jì)不敢茍同,這是重點(diǎn)。
這兩年來(lái),鑒于種種原因,也幫不少初入門(mén)或者說(shuō)初入大數(shù)據(jù)培訓(xùn)機(jī)構(gòu)的跨界朋友參考過(guò)培訓(xùn)課程。
基本上課程套路都一樣一樣的:
首先基本的語(yǔ)言基礎(chǔ)來(lái)一套,接著是hadoop、mapreduce、hive、hbase、spark、flume、kafka、mahout給來(lái)一套,再接著上一系列的算法課程,***來(lái)點(diǎn)套路的所謂項(xiàng)目實(shí)戰(zhàn)。
三四個(gè)月的課程,好幾萬(wàn)的投入,然后就上崗開(kāi)干了,細(xì)微的區(qū)別的在于可能不同課程的課時(shí)設(shè)置不同,但基本上都得來(lái)一個(gè)如上全家桶套餐。
先不說(shuō)其他的,三四個(gè)月,得把這個(gè)整個(gè)“全家桶”給咽下去,還得消化了,簡(jiǎn)直了。。。
而在實(shí)際的工作中,你能用上其中一到兩種算是正常的,能用上三四種的算是少見(jiàn)的,能碰過(guò)過(guò)半的說(shuō)明你可以升級(jí)為數(shù)據(jù)架構(gòu)師了。
那么,這樣子培訓(xùn)的意義在哪呢?不求精而求廣?
關(guān)鍵是很多人培訓(xùn)完了,依然一臉懵逼,感覺(jué)自己不知道能干啥,不知道要干啥,又或者說(shuō)不知道企業(yè)到底需要什么人,而自己到底適不適合。
好了,吐槽完畢,正文來(lái)了。
我個(gè)人認(rèn)為,給初入大數(shù)據(jù)領(lǐng)域或者跨界進(jìn)入大數(shù)據(jù)領(lǐng)域的朋友灌輸大數(shù)據(jù)相關(guān)的知識(shí),***件事不是說(shuō)各種組件框架生態(tài)相關(guān)的東西,也不是各種編程語(yǔ)言基礎(chǔ)。
而是,了解清除以下幾個(gè)問(wèn)題:
1 大數(shù)據(jù)領(lǐng)域到底包含了哪些東西,解決了哪些問(wèn)題?
2 自己的實(shí)際基礎(chǔ)是什么,如何結(jié)合自己的基礎(chǔ)以及興趣愛(ài)好,在整個(gè)大數(shù)據(jù)領(lǐng)域鏈路中,找到***的切入點(diǎn)。
只有解決了上面兩個(gè)問(wèn)題,才能給自己最精確的定位,找準(zhǔn)方向深入下去。
一個(gè)人的精力是有限的,在短短的幾個(gè)月時(shí)間內(nèi),你不可能把所有的東西都學(xué)的精通,哪怕連熟練都難做到,僅僅是皮毛而已。
所以,有的放矢,把有限的時(shí)間放到該定位的地方上去。
***個(gè)問(wèn)題,大數(shù)據(jù)領(lǐng)域的范圍
現(xiàn)在一說(shuō)起大數(shù)據(jù),簡(jiǎn)單起來(lái)就是一個(gè)詞,但其實(shí)這個(gè)方向已經(jīng)可以形成一個(gè)技術(shù)領(lǐng)域了,包含了方方面面的技術(shù)點(diǎn),也提供了各種不同的技術(shù)崗位。
所以,不同的崗位,對(duì)應(yīng)的需求,工作內(nèi)容都是不同的。
我們可以根據(jù)數(shù)據(jù)從下到上,從無(wú)到有,到產(chǎn)生價(jià)值整個(gè)數(shù)據(jù)業(yè)務(wù)流程來(lái)拆解,并且與此同時(shí),來(lái)看看每個(gè)環(huán)節(jié)我們需要的技術(shù)儲(chǔ)備以及能做的事有哪些。
數(shù)據(jù)的幾大基本業(yè)務(wù)流程:
收集 -> 傳輸 -> 轉(zhuǎn)換/清洗 ->存儲(chǔ) -> 再加工 -> 挖掘/統(tǒng)計(jì) -> 上層應(yīng)用輸出
總的來(lái)說(shuō),可以分以下幾個(gè)大塊。
***環(huán):數(shù)據(jù)的收集
在收集階段,我們來(lái)看看數(shù)據(jù)主要有哪幾種存在方式:
1 第三方開(kāi)放數(shù)據(jù)集
2 業(yè)務(wù)數(shù)據(jù)
3 服務(wù)日志
4 行為上報(bào)數(shù)據(jù)
首先針對(duì)于第三方開(kāi)放數(shù)據(jù),目前爬取第三方開(kāi)放數(shù)據(jù)的形式已經(jīng)逐漸被認(rèn)可,并且將會(huì)越來(lái)越多的人以及企業(yè)從互聯(lián)網(wǎng)開(kāi)放數(shù)據(jù)集中獲取原始數(shù)據(jù)。
所以,針對(duì)于開(kāi)放數(shù)據(jù)的獲取,爬蟲(chóng)已經(jīng)可以單獨(dú)形成一個(gè)體系了,包括不同的爬蟲(chóng)框架,以及近年來(lái)對(duì)于分布式爬蟲(chóng)的技術(shù)需求等,在語(yǔ)言方面主要還是python以及java為主,輔助其他相關(guān)腳本知識(shí)。
如果數(shù)據(jù)是業(yè)務(wù)數(shù)據(jù),那么通常在傳統(tǒng)的路子中,業(yè)務(wù)數(shù)據(jù)一般存儲(chǔ)在傳統(tǒng)的數(shù)據(jù)庫(kù)中,那么,對(duì)于傳統(tǒng)數(shù)據(jù)庫(kù)相關(guān)的技術(shù)知識(shí)不可避免的需要有所了解,最起碼簡(jiǎn)單的數(shù)據(jù)庫(kù)操作得會(huì)吧。
其次,我們需要對(duì)數(shù)據(jù)進(jìn)行統(tǒng)一化處理,又不可避免的涉及到數(shù)據(jù)的遷移,即從傳統(tǒng)數(shù)據(jù)存儲(chǔ)介質(zhì)中遷移到諸如hadoop生態(tài)中,那么涉及的遷移框架諸如sqoop之類(lèi)的,又是不能不懂一些。
在語(yǔ)言以及基礎(chǔ)要求上,對(duì)SQL相關(guān)的知識(shí)需要補(bǔ)充,以及l(fā)inux操作,簡(jiǎn)單的java需要掌握。
如果數(shù)據(jù)是記錄在服務(wù)日志中,那么,我們需要對(duì)linux很熟悉,各種腳本的使用,日志文件的各種操作,熟悉各種sed、awk工具等,如果體量大,我們還需要把這些日志文件丟到分布式框架中進(jìn)行處理、清洗,諸如mr,spark中等。
所以,對(duì)于這種數(shù)據(jù)的處理,我們需要掌握的一方面是linux的熟悉操作、另一方面是一些諸如離線數(shù)據(jù)處理框架的使用,語(yǔ)言方面還是以java、腳本類(lèi)語(yǔ)言為主。
***,如果是數(shù)據(jù)上報(bào)的形式,你需要對(duì)整個(gè)數(shù)據(jù)上報(bào)的流程熟悉,怎么進(jìn)行埋點(diǎn)、怎么收集上報(bào)的數(shù)據(jù),上報(bào)過(guò)來(lái)怎么進(jìn)行傳輸接受落地,這里就不多說(shuō),最終這種上報(bào)過(guò)來(lái)的數(shù)據(jù)反倒相對(duì)規(guī)整。
再來(lái)看第二環(huán):數(shù)據(jù)的傳輸
數(shù)據(jù)的傳輸?shù)降自谑裁磿r(shí)候會(huì)涉及到呢?
諸如上面說(shuō)到的數(shù)據(jù)上報(bào),在大數(shù)據(jù)模式下,通常上報(bào)過(guò)來(lái)的數(shù)據(jù)我們都不會(huì)馬上進(jìn)行落地的,因?yàn)樯婕暗讲煌糠制湫什灰粯?,在峰值波?dòng)的情況下,直接落地十有八九都會(huì)導(dǎo)致系統(tǒng)宕機(jī)。
所以,數(shù)據(jù)的傳輸在大數(shù)據(jù)領(lǐng)域中有著不可替代的左右,會(huì)出現(xiàn)在各種系統(tǒng)耦合之間,一方面用作數(shù)據(jù)的傳輸,另一方面用作數(shù)據(jù)的緩沖、系統(tǒng)解耦。
在hadoop生態(tài)中,最有名的莫過(guò)于kafka與flume的組合搭配了,收集數(shù)據(jù),并進(jìn)行數(shù)據(jù)傳輸,此外還有不少類(lèi)似的消息隊(duì)列存在,諸如ActiveMQ、阿里的RocketMQ等等。
在這里,我們需要理解的就是,為什么要引入這么一層組件,因?yàn)樵谶^(guò)去的數(shù)據(jù)處理模式中,因?yàn)閿?shù)據(jù)量的緣故,這一層相對(duì)次要。
第三環(huán):數(shù)據(jù)的存儲(chǔ)
Hadoop生態(tài)中最最核心的存儲(chǔ)組件莫過(guò)于HDFS了,這是支撐hadoop能夠做大批量數(shù)據(jù)處理的基礎(chǔ)支撐,便捷而強(qiáng)悍的橫向擴(kuò)展能力。
除此之外,還有各種基于此之上不同形式的數(shù)據(jù)存儲(chǔ)方式,諸如hive、HBase、甚至ES、Solr勉強(qiáng)都算,以及不可忽略的傳統(tǒng)類(lèi)型的SQL存儲(chǔ)方式。
我們需要理解的是,不同的存儲(chǔ)方式應(yīng)對(duì)于實(shí)際的應(yīng)用場(chǎng)景是不同的,HDFS作為最基礎(chǔ)的分布式文件系統(tǒng),我們就不多說(shuō)。
諸如,Hive其更作用更多用于類(lèi)傳統(tǒng)式的SQL查詢(xún)操作,其對(duì)于效應(yīng)效率要求并不高,但對(duì)于數(shù)據(jù)規(guī)模的支撐性良好;而HBase則更偏向于即席查詢(xún),要求有更高的響應(yīng)效率,但對(duì)于查詢(xún)的復(fù)雜性支持上則相對(duì)較弱。
而我們說(shuō)諸如ES、Solr都也勉強(qiáng)算是一種數(shù)據(jù)存儲(chǔ)的組織方式,其實(shí)也是有一定道理的,因?yàn)樗麄儽旧硪仓С诌@種分布式的數(shù)據(jù)存儲(chǔ),只不過(guò)他們是為了應(yīng)對(duì)于自己框架的檢索需求而設(shè)計(jì)的數(shù)據(jù)存儲(chǔ)組織。
此外,還有例如Redis,也算是目前大數(shù)據(jù)生態(tài)中不可缺少的數(shù)據(jù)存儲(chǔ)方式之一,基于內(nèi)容,應(yīng)對(duì)于高效的數(shù)據(jù)存儲(chǔ)與讀取,在很多的實(shí)際應(yīng)用場(chǎng)景中都用的到。
第四環(huán):數(shù)據(jù)的再加工
其實(shí)這一層主要要說(shuō)就是基于Hadoop的MR框架以及Spark,當(dāng)然,也有其他的一些分布式數(shù)據(jù)處理框架。
大規(guī)模的數(shù)據(jù)清洗轉(zhuǎn)換、再加工,都離不開(kāi)分布式處理框架的支持。
我們需要對(duì)雜亂的數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化、對(duì)殘缺的數(shù)據(jù)進(jìn)行補(bǔ)全、對(duì)原始的數(shù)據(jù)進(jìn)行深度加工提取高級(jí)屬性等等。
簡(jiǎn)單的,我們可以通過(guò)一些處理腳本來(lái)做,但針對(duì)于大規(guī)模的數(shù)據(jù)量級(jí),我們依然需要依賴(lài)MR或者spark這種框架來(lái)處理。
而針對(duì)于一些實(shí)時(shí)的場(chǎng)景,我們也不可避免的需要掌握諸如storm以及spark streaming之類(lèi)的實(shí)時(shí)框架。
所以,在這一環(huán),我們不止需要了解不同的大數(shù)據(jù)處理框架,我們還需要在基于框架的基礎(chǔ)上,做數(shù)據(jù)應(yīng)用開(kāi)發(fā),進(jìn)行數(shù)據(jù)處理。
通常,在這個(gè)環(huán)節(jié)中,我們需要對(duì)于Linux比較熟練,最起碼能夠熟練的操作服務(wù)器,操作不同的框架系統(tǒng),其次,我們?cè)诖嘶A(chǔ)上做應(yīng)用開(kāi)發(fā),腳本以及java語(yǔ)言是必須精通的,如果使用spark等框架,對(duì)于scala還是有一定要求的。
***一環(huán):數(shù)據(jù)應(yīng)用價(jià)值輸出
前面我們做了很多事,包括數(shù)據(jù)的收集、傳輸、處理、存儲(chǔ)等等,但這些都是手段,都不是我們的目的。
我們的目的是讓數(shù)據(jù)產(chǎn)生價(jià)值,這也是企業(yè)做大數(shù)據(jù)的核心目的。
我們可以用數(shù)據(jù)來(lái)做什么:
1 基于統(tǒng)計(jì)分析、數(shù)據(jù)預(yù)測(cè),做數(shù)據(jù)化運(yùn)營(yíng)、決策,提升效率、效果,這是最常見(jiàn)的應(yīng)用場(chǎng)景。
2 做推薦,在主體之外產(chǎn)生衍生價(jià)值,提升單位價(jià)值轉(zhuǎn)換。
3 畫(huà)像體系,至于說(shuō)畫(huà)像能做什么,只要能做的準(zhǔn),能做的事可多了。
4 基于數(shù)據(jù)化、智能化的搜索。
5 實(shí)現(xiàn)業(yè)務(wù)的數(shù)據(jù)化、自動(dòng)化、智能化。
6 …
在這一環(huán)中,包括的東西太多太多,包括大數(shù)據(jù)培訓(xùn)市場(chǎng)中主流方向:數(shù)據(jù)分析師,基本屬于偏業(yè)務(wù)分析的路子。
還有那些培訓(xùn)的算法之類(lèi)的,也是為這一環(huán)服務(wù)的(但是,單純了解算法是什么,個(gè)人認(rèn)為是沒(méi)啥卵用的)。
我們先來(lái)分析一下關(guān)于大數(shù)據(jù)分析這個(gè)方向。
我一直不認(rèn)同很多大數(shù)據(jù)培訓(xùn)機(jī)構(gòu)一直玩命給跨界的朋友培訓(xùn)python、R,認(rèn)為那就是數(shù)據(jù)分析師的最最核心的技能了。
其實(shí)不然,在大數(shù)據(jù)模式下,諸如R這種工具其實(shí)本身的局限性已經(jīng)很大了,我們需要更多能夠容納全量數(shù)據(jù)分析挖掘的工具,而不是抽樣。
哪怕是你把Hive用的很溜,對(duì)于統(tǒng)計(jì)分析的理論,以及對(duì)于業(yè)務(wù)的理解能力很強(qiáng),我認(rèn)為可以完爆那些傳統(tǒng)分析工具用的溜的人,最起碼在這個(gè)領(lǐng)域中,這種需求會(huì)更多。
所以,假設(shè)大數(shù)據(jù)培訓(xùn)機(jī)構(gòu)想要培訓(xùn)數(shù)據(jù)分析師,盡量還是往大數(shù)據(jù)模式下的數(shù)據(jù)分析路子去走,及時(shí)培訓(xùn)R之類(lèi)的工具,可以結(jié)合Hadoop-R、Spark-R之類(lèi)的來(lái)做培訓(xùn),而Hive這種工具更是不可缺少的,此外,對(duì)于統(tǒng)計(jì)原理之類(lèi)的理論知識(shí)也需要進(jìn)行額外的補(bǔ)充。
***,對(duì)于算法來(lái)說(shuō),單純的培訓(xùn)算法其實(shí)沒(méi)啥卵用,一方面本身算法這東西基礎(chǔ)要求略高,單純的從培訓(xùn)的角度來(lái)說(shuō),了解一個(gè)算法是什么是次要的,更重要的是要貫穿實(shí)際的業(yè)務(wù)場(chǎng)景與算法模型的映射,以及各種分布式機(jī)器學(xué)習(xí)庫(kù)的使用,這就夠了。
單純的去研究算法,別扯了,太不切實(shí)際,學(xué)完了妥妥的還是一臉懵逼,如果不把實(shí)際業(yè)務(wù)場(chǎng)景結(jié)合起來(lái)。
解決第二個(gè)問(wèn)題,如何做選擇
其實(shí)如果你對(duì)***個(gè)問(wèn)題,整個(gè)流程有足夠熟悉的情況下,這事就好辦多了。
清楚每個(gè)節(jié)點(diǎn)需要哪些技術(shù)儲(chǔ)備,這個(gè)節(jié)點(diǎn)到底負(fù)責(zé)哪些事務(wù),在整個(gè)數(shù)據(jù)生態(tài)中起到什么樣的地位。
結(jié)合自己已有的基礎(chǔ)儲(chǔ)備,去衡量如果自己想要涉足某一個(gè)節(jié)點(diǎn),需要額外補(bǔ)充多少的知識(shí)才能支撐的起工作需求。
然后,進(jìn)行選擇,然后有所偏重的去理順自己的技術(shù)結(jié)構(gòu),額外去深入掌握相關(guān)的技術(shù)。
最起碼你要知道,你在學(xué)習(xí)spark,你要知道spark在整個(gè)數(shù)據(jù)生態(tài)中、實(shí)際的業(yè)務(wù)中,是做什么的,是不是可替代的。
所以,當(dāng)你看到招聘網(wǎng)站上各種大數(shù)據(jù)相關(guān)的JD時(shí),諸如:大數(shù)據(jù)開(kāi)發(fā)工程師、大數(shù)據(jù)工程師、hadoop工程師、數(shù)據(jù)開(kāi)發(fā)工程師、數(shù)據(jù)分析師、大數(shù)據(jù)分析師、數(shù)據(jù)挖掘工程師、算法工程師、ETL工程師等等。
你需要能夠做出分辨,這些崗位到底是屬于什么定位,是偏平臺(tái)搭建、是偏數(shù)據(jù)架構(gòu)、是偏數(shù)據(jù)處理、是偏業(yè)務(wù)分析、是偏數(shù)據(jù)業(yè)務(wù)挖掘、是偏算法研究等等,結(jié)合自己掌握的技術(shù)點(diǎn),才能做更好的選擇。
當(dāng)然,其中的門(mén)門(mén)道道很多,一篇也說(shuō)不清楚,但這篇文章的主要目的是說(shuō),我們需要對(duì)于大局有所了解,知道是什么,想要獲得什么,知道將要干什么。
而不是悶頭把“Hadoop全家桶”來(lái)一套,要知道,技術(shù)框架這東西是很容易被替代的,尤其是大數(shù)據(jù)領(lǐng)域,相關(guān)技術(shù)迭代太快,所以我們還是需要結(jié)合實(shí)際的業(yè)務(wù)來(lái)理解大數(shù)據(jù),以及掌握快速學(xué)習(xí)的能力,這才是正道。
關(guān)于選擇方向這里,做一點(diǎn)補(bǔ)充,針對(duì)于哪些跨界想進(jìn)入數(shù)據(jù)挖掘或者算法領(lǐng)域的朋友。
個(gè)人認(rèn)為如果你想進(jìn)入大數(shù)據(jù)領(lǐng)域從事數(shù)據(jù)挖掘相關(guān)的工作,***建議有以下兩種基礎(chǔ)***,有其一即可:
1 有良好的算法理論基礎(chǔ),通常是需要相對(duì)較好學(xué)歷以及對(duì)口的在校研究方向。
2 在大數(shù)據(jù)處理領(lǐng)域有足夠的數(shù)據(jù)處理經(jīng)驗(yàn),對(duì)業(yè)務(wù)場(chǎng)景足夠清楚,對(duì)分布式框架和工具能夠熟練使用。
對(duì)于前者,工程化能力可能相對(duì)較弱,但可以專(zhuān)注于算法研究;對(duì)于后者,則可以偏重業(yè)務(wù),注重如何將實(shí)際的業(yè)務(wù)問(wèn)題轉(zhuǎn)換為算法模型問(wèn)題。
兩者側(cè)重點(diǎn)不同,一個(gè)明確模型,研究是模型更加契合業(yè)務(wù)的問(wèn)題,研究的是如何提升已知問(wèn)題的精準(zhǔn)問(wèn)題;另一個(gè)是如何將未知業(yè)務(wù)映射成已知的算法數(shù)學(xué)模型,需要對(duì)業(yè)務(wù)足夠了解、敏感,并且能夠進(jìn)行工程化。
關(guān)于這兩者的區(qū)別,有時(shí)間再開(kāi)單章說(shuō)道了,這里就不過(guò)多細(xì)說(shuō)??傊瑢?duì)于普通跨界的來(lái)說(shuō),建議不要選擇這種門(mén)檻略高的細(xì)分方向,因?yàn)楹罄m(xù)你的找工作風(fēng)險(xiǎn)略高。
最***,關(guān)于大數(shù)據(jù)培訓(xùn)的出路,個(gè)人建議選擇的時(shí)候盡量選擇能夠讓你獲得實(shí)習(xí)或者正式工作機(jī)會(huì)的機(jī)構(gòu),因?yàn)榭缃绲?**份工作算是個(gè)跳板,很重要,也少有選擇,所以需要把握住機(jī)會(huì),如果有機(jī)會(huì)留下來(lái),甭管他是不是外包、實(shí)習(xí)是不是有工資拿。
這只是一個(gè)跳板而已,此后,天高任鳥(niǎo)飛,海闊憑魚(yú)躍,靠自己了,培訓(xùn)機(jī)構(gòu)只是讓你有入門(mén)的機(jī)會(huì)而已,所以要把握住。
所以,培訓(xùn)機(jī)構(gòu)***的好處是讓你有機(jī)會(huì)進(jìn)入這個(gè)領(lǐng)域,真正的累積需要入門(mén)之后在實(shí)際的工作中自己把握機(jī)會(huì)多學(xué)習(xí)!
***,發(fā)現(xiàn)個(gè)人私密群除了能省事(省自己的事,省群友的事),還能衍生不少值得探討的話題,都是與群友一起討論聊天時(shí)衍生出來(lái)的。