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