一份靠譜的數(shù)據(jù)開(kāi)發(fā)從業(yè)指南
數(shù)據(jù)開(kāi)發(fā)太龐大了
有小伙伴讓我聊聊數(shù)據(jù)開(kāi)發(fā)的職業(yè)規(guī)劃和從業(yè)指南,因?yàn)閿?shù)據(jù)開(kāi)發(fā)從業(yè)人員的知識(shí)量實(shí)在是太太太大了,今天恰好這個(gè)機(jī)會(huì)好好聊聊。
我們先來(lái)看看 InfoQ 整理的這個(gè)圖,技能樹(shù)不是一般的龐大,如果你是大牛那忽略我上面說(shuō)的一切,你能 handle 的。但是作為一個(gè)初級(jí)人員,那具體應(yīng)該從哪里去切入呢?
數(shù)據(jù)開(kāi)發(fā)是有很多種的
很多小伙伴一聊到數(shù)據(jù)挖掘呢,都會(huì)無(wú)法自拔地想到機(jī)器學(xué)習(xí)算法,其實(shí)嘛,絕大多數(shù)的數(shù)據(jù)崗位并不需要這么高深的知識(shí)。但是如果你掌握了技能書(shū)的更多內(nèi)容呢,你可能可以對(duì)你數(shù)據(jù)的上下游有更加強(qiáng)的把控力度,你可能可以進(jìn)階到下一個(gè)階段。
數(shù)據(jù)挖掘的技能樹(shù)橫向和縱向都是很深的,并不適合所有的門(mén)外漢,因?yàn)橥盍藢W(xué)確實(shí)很難,需要機(jī)器學(xué)習(xí)、深度學(xué)習(xí)、概率論、線性代數(shù)、智能優(yōu)化方法等很深層次的數(shù)學(xué)知識(shí),需要分布式一致性的各種算法,需要資源調(diào)度的各種理論。
很多人都覺(jué)得要掌握所有的技能才能開(kāi)始這項(xiàng)工作。兩個(gè)字概括今天這篇文章,未必。一句話,每個(gè)崗位都有自己的側(cè)重點(diǎn),各項(xiàng)技能在每個(gè)崗位的權(quán)重都不一樣。
數(shù)據(jù)從產(chǎn)生到被使用,最基礎(chǔ)的鏈路就是。采集 -> 清洗 -> 處理 -> 分析 -> 決策。而在這個(gè)鏈路上,從前到后,所需要的技能是不一樣的。一般來(lái)說(shuō),越處于后端門(mén)檻越高,復(fù)雜程度也越高。當(dāng)然我不是說(shuō)前面就不重要了,每一個(gè)環(huán)節(jié)都很重要,只是門(mén)檻高低而已。每個(gè)階段做到牛逼你都可以很牛逼。
所以數(shù)據(jù)開(kāi)發(fā)的職位從縱向來(lái)說(shuō),可以分為 數(shù)據(jù)采集工程師->ETL工程師->數(shù)據(jù)開(kāi)發(fā)工程師->數(shù)據(jù)算法工程師->數(shù)據(jù)分析師。從橫向來(lái)說(shuō),還可以有數(shù)據(jù)集群運(yùn)維工程師、大數(shù)據(jù)平臺(tái)開(kāi)發(fā)工程師、數(shù)據(jù)治理架構(gòu)師、數(shù)據(jù)服務(wù)架構(gòu)師、大數(shù)據(jù)系統(tǒng)架構(gòu)師、大數(shù)據(jù)框架開(kāi)發(fā)工程師 這些職位來(lái)支持前面的這些流程更加方便快捷地開(kāi)發(fā)和落地,以及更好地維護(hù)。
數(shù)據(jù)開(kāi)發(fā)每一種需要什么技能呢?
從職業(yè)發(fā)展來(lái)說(shuō),一般來(lái)說(shuō)有這么三條線,只是個(gè)人見(jiàn)解,大家看著食用。
主線1:給數(shù)據(jù)開(kāi)發(fā)人員提供支持的線,就叫他服務(wù)支持線吧。
數(shù)據(jù)集群運(yùn)維工程師->大數(shù)據(jù)平臺(tái)開(kāi)發(fā)工程師->大數(shù)據(jù)系統(tǒng)架構(gòu)師->大數(shù)據(jù)框架開(kāi)發(fā)工程師
主線2:為數(shù)據(jù)開(kāi)發(fā)人員提供彈藥,就叫他數(shù)據(jù)倉(cāng)庫(kù)線。
數(shù)據(jù)采集工程師->ETL工程師->數(shù)據(jù)治理架構(gòu)師->數(shù)據(jù)服務(wù)架構(gòu)師
主線3:為數(shù)據(jù)分析人員提供彈藥,就叫他數(shù)據(jù)挖掘線。
數(shù)據(jù)開(kāi)發(fā)工程師->數(shù)據(jù)算法工程師->數(shù)據(jù)分析師
而且會(huì)經(jīng)常的,從主線1到主線3的過(guò)程中,越靠后的會(huì)越發(fā)現(xiàn),前面的人做的什么玩意,數(shù)據(jù)太亂了,工具太特么難用了。這個(gè)時(shí)候可能會(huì)產(chǎn)生跳躍,去幫助前面的人完善一些東西。所以主線3的數(shù)據(jù)開(kāi)發(fā)和數(shù)據(jù)算法人員經(jīng)常會(huì)跳到主線2幫助數(shù)據(jù)倉(cāng)庫(kù)人員梳理數(shù)據(jù)層次,梳理數(shù)據(jù)服務(wù)的提供方式。主線3和主線2的人發(fā)現(xiàn)工具平臺(tái)太難用或者集群不穩(wěn)定,甚至可能開(kāi)發(fā)框架有點(diǎn)難受,都會(huì)跳到主線1協(xié)助平臺(tái)和框架的優(yōu)化。
下面稍微說(shuō)說(shuō)三條主線,各自的技能點(diǎn)差異。
主線1:服務(wù)支持線
必選:Linux、Hadoop集群,Hive、Zookeeper、HBase、Ozzie、Flume
可選:Impala、各種框架源碼
語(yǔ)言:shell、Python
建議路線:1、先學(xué)習(xí)基礎(chǔ)的 Hadoop 集群維護(hù)技能,寫(xiě)一些 shell 腳本,使用定時(shí)調(diào)度功能。2、學(xué)會(huì)使用平臺(tái)工具進(jìn)行監(jiān)控和維護(hù),并參與到平臺(tái)開(kāi)發(fā)和工具開(kāi)發(fā)中。3、對(duì)現(xiàn)有系統(tǒng)架構(gòu)和框架進(jìn)行重新架構(gòu)或改良。
主線2:數(shù)據(jù)倉(cāng)庫(kù)線
必選:HiveQL、Spark、Hive、Flink、Kafka
可選:Storm、分布式一致性算法、JVM調(diào)優(yōu)、MapReduce、BitTable
語(yǔ)言:Scala,SQL,Java
建議路線:1、學(xué)會(huì)從業(yè)務(wù)系統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)中抽取數(shù)據(jù)。2、學(xué)會(huì)使用Hive SQL 對(duì)數(shù)據(jù)進(jìn)行清洗。3、學(xué)會(huì)用 Spark、Flink 對(duì)數(shù)據(jù)進(jìn)行各種處理和輸出,若數(shù)據(jù)量太大則應(yīng)該進(jìn)行調(diào)優(yōu)。4、學(xué)會(huì)對(duì)數(shù)據(jù)進(jìn)行治理,對(duì)數(shù)據(jù)進(jìn)行分層設(shè)計(jì),對(duì)數(shù)據(jù)分布心理有數(shù),對(duì)數(shù)據(jù)質(zhì)量進(jìn)行全方位監(jiān)控。
主線3:數(shù)據(jù)挖掘線
必選:可視化技術(shù)、SQL、統(tǒng)計(jì)學(xué)、概率論、智能優(yōu)化、機(jī)器學(xué)習(xí)工具(Tensorflow、scikit-learn)
可選:caffee,torch,OpenCV
語(yǔ)言:Python,R
建議路線:1、學(xué)會(huì)使用 SQL 拿到所需的數(shù)據(jù)以及預(yù)處理出特征。2、使用 R 或者 Scikit-learn 進(jìn)行數(shù)據(jù)探索和挖掘。3、對(duì)數(shù)據(jù)進(jìn)行業(yè)務(wù)層面的分析,以提取出更有用的東西。4、自己實(shí)現(xiàn)一些數(shù)據(jù)分析的算法。
聊聊數(shù)據(jù)開(kāi)發(fā)的語(yǔ)言問(wèn)題
***聊聊數(shù)據(jù)從業(yè)人員的語(yǔ)言問(wèn)題??偸怯行』锇閱?wèn)我,該不該學(xué) R,該不該學(xué) Scala ,該不該學(xué) Python,該不該用 Java。我的觀點(diǎn)就是,每個(gè)語(yǔ)言都只是自己的工具,不要守著一本語(yǔ)言到死,每個(gè)語(yǔ)言都有它自己擅長(zhǎng)的領(lǐng)域,在每個(gè)領(lǐng)域你盡量用它擅長(zhǎng)的語(yǔ)言去處理,就好了。(并不是說(shuō)當(dāng)然其他語(yǔ)言也會(huì)有一些旁支可以處理一些)。
Scala:Spark的實(shí)現(xiàn)語(yǔ)言是 Scala,現(xiàn)在也有大神用 PySpark 來(lái)實(shí)現(xiàn)一些數(shù)據(jù)處理的東西,為了兼容機(jī)器學(xué)習(xí)框架。
Python:數(shù)據(jù)爬取和機(jī)器學(xué)習(xí)從業(yè)必備,其他語(yǔ)言基本都是旁支。不要以為Python跑得很慢,其實(shí)那些框架都是 C++ 和 C 實(shí)現(xiàn)的,只是套了一個(gè) Python 的殼,還做了很多優(yōu)化,比你自己寫(xiě)的 C++ 還快。
R:數(shù)據(jù)探索和數(shù)據(jù)可視化有非常多場(chǎng)景是用 R 語(yǔ)言來(lái)進(jìn)行做的。
Java:Hadoop 套件基本都是用 Java 實(shí)現(xiàn)的,熟悉 Java 可以讓你更加清晰你所占用的資源分布,瓶頸是在 cpu 還是 內(nèi)存,是磁盤(pán) IO 還是 網(wǎng)絡(luò) IO。
建議的切入角度
從 Sqoop、Hive、Spark、Hadoop 、Python入手,了解最基礎(chǔ)的數(shù)據(jù)處理流程,在這下面幾個(gè)流程中有針對(duì)性地進(jìn)行學(xué)習(xí)。
1、從關(guān)系型數(shù)據(jù)庫(kù)用 Sqoop 導(dǎo)入到 Hive 中,這個(gè)過(guò)程可以用 Ozzie 定時(shí)調(diào)度。
2、使用 HiveSQL 進(jìn)行數(shù)據(jù)清洗
3、使用 Spark 和 SparkStreaming 進(jìn)行數(shù)據(jù)離線和在線處理。
4、使用 SparkMLLib 或者 scikit-learn 進(jìn)行數(shù)據(jù)初探。
【本文為51CTO專欄作者“大蕉”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過(guò)作者微信公眾號(hào)“一名叫大蕉的程序員”獲取授權(quán)】