大數(shù)據(jù)到底應(yīng)該如何學(xué)?
一、食用須知
再更一篇技術(shù)雜談?lì)惖奈恼?。。。粉絲甲:所以這就是你拖更系列文章和視頻的理由嗎???粉絲乙丙?。壕褪?!就是!都斷更多久了?我:咳。。。最近雜事纏身,還望恕罪!下面是食用須知:
本文適合還不十分了解大數(shù)據(jù)的你,同樣適合不確定要不要學(xué)習(xí)大數(shù)據(jù)的你,將帶你了解行業(yè)的需求以及與之相關(guān)的崗位,也同樣適合剛剛踏入大數(shù)據(jù)領(lǐng)域工作的你,歡迎收藏并將文章分享給身邊的朋友。
筆者從事大數(shù)據(jù)開(kāi)發(fā)和培訓(xùn)多年,曾為多家機(jī)構(gòu)優(yōu)化完整大數(shù)據(jù)課程體系,也為多所高校設(shè)計(jì)并實(shí)施大數(shù)據(jù)專(zhuān)業(yè)培養(yǎng)方案,并進(jìn)行過(guò)多次大數(shù)據(jù)師資培訓(xùn)、高校骨干教師學(xué)習(xí)交流,希望自己的一點(diǎn)粗淺認(rèn)識(shí)能夠幫助到大家。
本文并不是要將大數(shù)據(jù)描述成一個(gè)萬(wàn)能的、可以解決所有問(wèn)題的東西,而是客觀的闡述其作用,能夠解決的一些問(wèn)題。希望將這一領(lǐng)域盡可能完整的介紹給你,至于如何選擇需要根據(jù)自己的實(shí)際情況來(lái)決定,如果有任何問(wèn)題可以在評(píng)論區(qū)留言或加入粉絲群與我直接交流。
二、大數(shù)據(jù)的基本概念
1. 什么是大數(shù)據(jù)
要說(shuō)什么是大數(shù)據(jù)我想大家多少已經(jīng)有所了解了,很多落地的案例已經(jīng)深入到了我們的生活中。大數(shù)據(jù)具有數(shù)據(jù)量大、數(shù)據(jù)類(lèi)型豐富復(fù)雜、數(shù)據(jù)增長(zhǎng)速度快等特點(diǎn),一切的數(shù)據(jù)分析必須建立在真實(shí)的數(shù)據(jù)集上才會(huì)有意義,而數(shù)據(jù)質(zhì)量本身也是影響大數(shù)據(jù)分析結(jié)果的重要因素之一。

作為學(xué)習(xí)者,我們關(guān)心的應(yīng)該是大數(shù)據(jù)能夠解決什么樣的問(wèn)題,能夠應(yīng)用在哪些領(lǐng)域,應(yīng)該學(xué)習(xí)哪些內(nèi)容,側(cè)重哪一方面。簡(jiǎn)單來(lái)說(shuō),我們需要學(xué)習(xí)的就是一系列的大數(shù)據(jù)生態(tài)圈技術(shù)組件,以及貫穿整個(gè)數(shù)據(jù)分析流程的分析方法和思維,并且思路更加重要一些!只有明確了數(shù)據(jù)分析場(chǎng)景與流程,我們才能夠確定需要整合哪些大數(shù)據(jù)組件來(lái)解決這一問(wèn)題。下面我們將一起推開(kāi)這一領(lǐng)域的大門(mén)~
2. 數(shù)據(jù)是如何采集的
大數(shù)據(jù)分析的第一步就是對(duì)數(shù)據(jù)的收集和管理,我們需要先來(lái)了解一下數(shù)據(jù)是如何產(chǎn)生的?又是被如何捕獲的?那些看似雜亂的數(shù)據(jù)真的能被分析嗎?
主動(dòng)的數(shù)據(jù)產(chǎn)生與用戶(hù)行為數(shù)據(jù)收集
主動(dòng)產(chǎn)生的數(shù)據(jù)比較好理解,在我們使用互聯(lián)網(wǎng)或者各種應(yīng)用的過(guò)程中,通過(guò)填寫(xiě)提交表單就會(huì)產(chǎn)生數(shù)據(jù)。類(lèi)似的,我們?cè)诰€下環(huán)境中,比如銀行開(kāi)卡、紙質(zhì)表格的填寫(xiě),最終都會(huì)變成電子數(shù)據(jù)流入到系統(tǒng)中。通常,我們會(huì)將這一類(lèi)行為歸為用戶(hù)注冊(cè),通常會(huì)是產(chǎn)生數(shù)據(jù)的起點(diǎn)。(當(dāng)然,有些時(shí)候我們分析的數(shù)據(jù)也可能并不關(guān)心用戶(hù)自身的信息。)除此之外,通過(guò)使用一些平臺(tái)的功能,用戶(hù)會(huì)上傳和發(fā)布各種類(lèi)型的數(shù)據(jù),如文本類(lèi)信息、音頻、視頻等,這都是數(shù)據(jù)產(chǎn)生和積累的方式。
對(duì)于用戶(hù)行為數(shù)據(jù)更多的來(lái)自于應(yīng)用埋點(diǎn)和捕獲,因?yàn)橛脩?hù)使用應(yīng)用必須通過(guò)鼠標(biāo)點(diǎn)擊或者手指觸碰來(lái)和用戶(hù)界面進(jìn)行交互。以網(wǎng)頁(yè)應(yīng)用(網(wǎng)站)為例,對(duì)于鼠標(biāo)的所有行為基本上都可以通過(guò)事件監(jiān)聽(tīng)的方式來(lái)捕獲,鼠標(biāo)在某個(gè)區(qū)域停留的時(shí)間、是否進(jìn)行點(diǎn)擊,我們甚至可以根據(jù)用戶(hù)的行為數(shù)據(jù)刻畫(huà)出整個(gè)頁(yè)面的熱力圖。

在不同的應(yīng)用場(chǎng)景中,我們可以對(duì)行為類(lèi)型、功能模塊、用戶(hù)信息等維度進(jìn)一步的劃分,做更加深入的分析。
結(jié)構(gòu)化數(shù)據(jù)與非結(jié)構(gòu)化數(shù)據(jù)
最常見(jiàn)的結(jié)構(gòu)化數(shù)據(jù)就是存儲(chǔ)在關(guān)系型數(shù)據(jù)庫(kù)中的數(shù)據(jù),如MySQL、Oracle等,這些數(shù)據(jù)都具備一個(gè)特點(diǎn),就是十分規(guī)范。因?yàn)殛P(guān)系型數(shù)據(jù)庫(kù)屬于寫(xiě)時(shí)模式,也就是說(shuō)不符合預(yù)先設(shè)定的數(shù)據(jù)類(lèi)型和規(guī)范的數(shù)據(jù)不會(huì)通過(guò)校驗(yàn),存不到數(shù)據(jù)庫(kù)中。除數(shù)據(jù)庫(kù)中的數(shù)據(jù)以外,那些能直接導(dǎo)入到數(shù)據(jù)庫(kù)中的數(shù)據(jù)文件我們也可以把它們視為結(jié)構(gòu)化的數(shù)據(jù),如:CSV格式。這些數(shù)據(jù)通常需要具備統(tǒng)一的列分隔符、行分隔符,統(tǒng)一的日期格式等等。
對(duì)于非機(jī)構(gòu)化的數(shù)據(jù)指的就是除結(jié)構(gòu)化數(shù)據(jù)以外的另一大類(lèi)數(shù)據(jù),通常沒(méi)有預(yù)期的數(shù)據(jù)機(jī)構(gòu),存儲(chǔ)在非關(guān)系型數(shù)據(jù)庫(kù)中,如:Redis、MongoDB,使用NoSQL來(lái)進(jìn)行操作。也可能是非文本類(lèi)型的數(shù)據(jù),需要特別對(duì)應(yīng)的手段來(lái)處理和分析。
3. 大數(shù)據(jù)真的能預(yù)測(cè)嗎
問(wèn)起大數(shù)據(jù)到底能不能預(yù)測(cè),倒不如來(lái)說(shuō)一說(shuō)大數(shù)據(jù)是如何預(yù)測(cè)的。如果結(jié)合人工智能領(lǐng)域來(lái)說(shuō)的話就比較復(fù)雜了,就說(shuō)比較簡(jiǎn)單的場(chǎng)景:用統(tǒng)計(jì)分析的方法進(jìn)行輔助決策,或者用經(jīng)典數(shù)據(jù)挖掘算法進(jìn)行模型的訓(xùn)練。既然是預(yù)測(cè),那就有可能準(zhǔn)確,也有可能不準(zhǔn)確,分析者需要做的就是合理的使用各種數(shù)據(jù)維度,結(jié)合相應(yīng)的算法或統(tǒng)計(jì)分析方法,去訓(xùn)練或擬合出一個(gè)潛在的規(guī)律。這個(gè)過(guò)程就好比,給了我們?nèi)齻€(gè)點(diǎn)(1,1)、(2,2)、(3,3),我們可以大概猜到它的函數(shù)式有可能為?y=x?一樣。當(dāng)然,實(shí)際的分析過(guò)程要比這復(fù)雜的多得多,畢竟有很多函數(shù)式都可以滿足這三個(gè)點(diǎn),但到底哪一個(gè)是我想要的規(guī)律呢?這就需要理論知識(shí)與行業(yè)經(jīng)驗(yàn)并重,不斷的打磨和優(yōu)化才能夠得到一個(gè)可靠的模型。
但是我們可以明確的一點(diǎn)是,大數(shù)據(jù)的預(yù)測(cè)也好、推薦也好,都是基于算法的,是數(shù)學(xué)的,也是科學(xué)的,但并不會(huì)百分之百的準(zhǔn)確。
三、什么是大數(shù)據(jù)開(kāi)發(fā)
了解了什么是大數(shù)據(jù),接下來(lái)介紹一下大數(shù)據(jù)開(kāi)發(fā)這一崗位,先直接上崗位描述(JD:Job Description)給大家感受一下。然后來(lái)說(shuō)明一下大數(shù)據(jù)開(kāi)發(fā)工程師的主要工作,最后再來(lái)總結(jié)一下需要掌握的技能。
京東大數(shù)據(jù)開(kāi)發(fā)工程師JD:

小米大數(shù)據(jù)開(kāi)發(fā)工程師JD:

滴滴大數(shù)據(jù)開(kāi)發(fā)工程師JD:

主要工作
從上面的崗位描述中我們可以發(fā)現(xiàn)大數(shù)據(jù)開(kāi)發(fā)工程師一般會(huì)與業(yè)務(wù)進(jìn)行對(duì)接,要么是基于某一個(gè)場(chǎng)景進(jìn)行有針對(duì)性的數(shù)據(jù)處理,要么是打造一個(gè)大數(shù)據(jù)產(chǎn)品。在這里我們也需要糾正一個(gè)小小的概念,可能有些小伙伴認(rèn)為有大數(shù)據(jù)崗位需求的公司一定是一個(gè)自身具備大量數(shù)據(jù)、有著大量用戶(hù)積淀的公司,其實(shí)不然。除了分析公司自身業(yè)務(wù)數(shù)據(jù)以外,同樣可以打造一款通用的大數(shù)據(jù)產(chǎn)品,大家可以參考我的另一篇文章:如何用開(kāi)源組件“攢”出一個(gè)大數(shù)據(jù)建模平臺(tái)。所以大數(shù)據(jù)的崗位雖然不像普通的開(kāi)發(fā)工程師那么多,但是需求依然存在。
如果是分析公司自身的業(yè)務(wù)數(shù)據(jù),一般會(huì)更偏重于使用大數(shù)據(jù)組件和算法庫(kù),構(gòu)建出一個(gè)可行的數(shù)據(jù)分析方案。大家可以看出,現(xiàn)在完全不涉及算法的大數(shù)據(jù)崗位已經(jīng)比較少了。這里的算法指的并不是數(shù)據(jù)結(jié)構(gòu),而是指機(jī)器學(xué)習(xí)庫(kù),與數(shù)據(jù)挖掘相關(guān)的算法,至少要知道如何控制算法的輸入與輸出,算法能夠解決的問(wèn)題,可能不會(huì)涉及到親自建模,在大數(shù)據(jù)分析的小節(jié)中會(huì)詳細(xì)介紹。

如果是開(kāi)發(fā)一個(gè)大數(shù)據(jù)產(chǎn)品,比如建模平臺(tái),或者是致力于解決數(shù)據(jù)采集、數(shù)據(jù)可視化的解決方案。那么這比較適合從開(kāi)發(fā)工程師轉(zhuǎn)行大數(shù)據(jù)開(kāi)發(fā)工程師的小伙伴,相當(dāng)于在開(kāi)發(fā)一個(gè)應(yīng)用的基礎(chǔ)上又增加了底層的大數(shù)據(jù)組件。這就要求我們既需要懂得原始的服務(wù)端框架的那一套,又能夠駕馭大數(shù)據(jù)開(kāi)發(fā)API。
掌握技能
從事大數(shù)據(jù)開(kāi)發(fā)需要掌握的技能可以概括為以下幾個(gè)方面:
操作系統(tǒng):Linux(基本操作、軟件維護(hù)、權(quán)限管理、定時(shí)任務(wù)、簡(jiǎn)單Shell等)
編程語(yǔ)言:Java(主要)、Scala、Python等
數(shù)據(jù)采集組件及中間件:Flume、Sqoop、Kafka、Logstash、Splunk等
大數(shù)據(jù)集群核心組件:Hadoop、Hive、Impala、HBase、Spark(Core、SQL、Streaming、MLlib)、Flink、Zookeeper等
素養(yǎng)要求:計(jì)算機(jī)或大數(shù)據(jù)相關(guān)專(zhuān)業(yè)
四、什么是大數(shù)據(jù)分析
說(shuō)到數(shù)據(jù)分析師,這不是本文的重點(diǎn),因?yàn)殚T(mén)檻相對(duì)較高,另一方面更偏數(shù)學(xué)、統(tǒng)計(jì)學(xué)方向,更多的是與數(shù)據(jù)、算法打交道,編程的產(chǎn)物通常不是應(yīng)用,而是一個(gè)算法模型。我們還是先來(lái)看一看相關(guān)的JD:
小紅書(shū)數(shù)據(jù)分析師JD:

京東數(shù)據(jù)分析師JD:

新浪微博數(shù)據(jù)分析師:

主要工作:
如果說(shuō)大數(shù)據(jù)開(kāi)發(fā)的崗位需求是一條一條的話。。。那么數(shù)據(jù)分析師的崗位需求大概率是一篇一篇的。。。從上面的要求的中可以看到,每一個(gè)崗位都講業(yè)務(wù)場(chǎng)景介紹的很詳細(xì),畢竟,數(shù)據(jù)分析師的主要工作之一是建立算法模型,這是垂直領(lǐng)域的深耕。通常我們無(wú)法直接使用那些已經(jīng)存在的算法,必須要進(jìn)行評(píng)估、優(yōu)化、或是組合使用。除此之外,你還必須擁有這一領(lǐng)域的業(yè)務(wù)經(jīng)驗(yàn),才能夠很好的勝任。
掌握技能:
算法工程師需要掌握的技能可以概括為以下幾個(gè)方面:
編程語(yǔ)言:Python、R、SQL等
建模工具:MATLAB、Mathematica等
熟悉機(jī)器學(xué)習(xí)庫(kù)及數(shù)據(jù)挖掘經(jīng)典算法
數(shù)學(xué)、統(tǒng)計(jì)學(xué)、計(jì)算機(jī)相關(guān)專(zhuān)業(yè),對(duì)數(shù)據(jù)敏感
五、應(yīng)如何學(xué)習(xí)大數(shù)據(jù)
上面介紹了和大數(shù)據(jù)相關(guān)的兩個(gè)主要工作崗位,其實(shí)與大數(shù)據(jù)相關(guān)的崗位還有很多,真正歸納起來(lái),ETL工程師也可以說(shuō)擦邊,因?yàn)殡S著數(shù)據(jù)量的不斷增大,無(wú)論是銀行內(nèi)部還是大數(shù)據(jù)服務(wù)公司都在從傳統(tǒng)ETL工具向大數(shù)據(jù)集群進(jìn)行過(guò)渡。
涉及到了這么多的技術(shù)點(diǎn),如何學(xué)習(xí)才更加高效呢?首先好入門(mén)的自然是大數(shù)據(jù)開(kāi)發(fā),對(duì)于Linux的操作系統(tǒng)和編程語(yǔ)言的部分沒(méi)什么過(guò)多說(shuō)明的,不要覺(jué)得有些東西沒(méi)用就跳過(guò),有些時(shí)候編程思想和解決問(wèn)題的方法同樣很重要,課本上有的一定要扎實(shí)
。對(duì)于和大數(shù)據(jù)相關(guān)的組件,看上去十分的繁雜,很多小伙伴可能都是鉆研于每個(gè)組件的用法、算子、函數(shù)、API,這當(dāng)然沒(méi)有錯(cuò),但是同時(shí)一定不要忘記埋在其中的主線,那就是:完整的數(shù)據(jù)分析流程。在學(xué)習(xí)的過(guò)程中一定要了解各組件的特點(diǎn)、區(qū)別和應(yīng)用的數(shù)據(jù)場(chǎng)景。
離線計(jì)算
在離線計(jì)算場(chǎng)景下,使用的都是歷史數(shù)據(jù),也就是不會(huì)再發(fā)生改變的數(shù)據(jù)。在數(shù)據(jù)源確定以后,這些數(shù)據(jù)不會(huì)再增加、也不會(huì)再更新,比較適合對(duì)實(shí)時(shí)性要求不高的場(chǎng)景。大多數(shù)情況下是周期性的計(jì)算某一個(gè)指標(biāo)或執(zhí)行一個(gè)Job,運(yùn)算耗時(shí)基本上可以控制在分鐘級(jí)。
數(shù)據(jù)源:數(shù)據(jù)文件、數(shù)據(jù)庫(kù)中的數(shù)據(jù)等
數(shù)據(jù)采集:Sqoop、HDFS數(shù)據(jù)上傳、Hive數(shù)據(jù)導(dǎo)入等
數(shù)據(jù)存儲(chǔ):HDFS
數(shù)據(jù)分析:MapReduce、Hive QL
計(jì)算結(jié)果:Hive結(jié)果表(HiveJDBC查詢(xún))、導(dǎo)出至關(guān)系型數(shù)據(jù)庫(kù)
實(shí)時(shí)計(jì)算
實(shí)時(shí)計(jì)算所面對(duì)的數(shù)據(jù)是不斷的流入的,要能夠使用合適的組件處理實(shí)時(shí)流入的數(shù)據(jù)。有些時(shí)候單位時(shí)間內(nèi)的數(shù)據(jù)流入會(huì)比較多,消費(fèi)的比較慢。有些時(shí)候單位時(shí)間內(nèi)的數(shù)據(jù)流入會(huì)比較少,消費(fèi)的會(huì)比較快。所以在采集數(shù)據(jù)時(shí)一方面要保證數(shù)據(jù)不丟失,同時(shí)還需要有中間件來(lái)管理好數(shù)據(jù)。在進(jìn)行實(shí)時(shí)計(jì)算時(shí)可以使用微批次的方式也可以使用其他方式,同時(shí)要處理好計(jì)算結(jié)果合并的問(wèn)題,實(shí)時(shí)展示最新的結(jié)果。
數(shù)據(jù)源:日志文件增量監(jiān)聽(tīng)等
數(shù)據(jù)采集:Flume
中間件:Kafka
數(shù)據(jù)分析:Spark-Streaming,F(xiàn)link等
計(jì)算結(jié)果:HBase
以上只是簡(jiǎn)單的列舉了一些實(shí)現(xiàn)不同場(chǎng)景數(shù)據(jù)流程的組件整合方案,詣在告訴大家一定要善于發(fā)現(xiàn)和總結(jié)不同組件的特點(diǎn),把合適的組件放在合適的位置,這也是面試官經(jīng)常喜歡問(wèn)的場(chǎng)景題目。其實(shí)每個(gè)組件的使用方法和調(diào)用API并沒(méi)有很復(fù)雜,重點(diǎn)還是在于流程化、一體化、把組件之間連接起來(lái),不斷的滲透和強(qiáng)化數(shù)據(jù)分析和處理的思路,能夠把一個(gè)需求直接翻譯成數(shù)據(jù)分析方案,這才是學(xué)習(xí)的重點(diǎn)。
本文的所有內(nèi)容都只是一點(diǎn)粗淺的認(rèn)識(shí),只適合剛?cè)腴T(mén)學(xué)習(xí)或剛從事相關(guān)工作的小伙伴進(jìn)行參考,有任何不對(duì)的地方希望大家包涵。
如果有任何的疑問(wèn),歡迎觀看完整教程:尚學(xué)堂·大數(shù)據(jù)全套課程