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