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