數據工程師的工作與數據息息相關,這一點光是從名字上就可窺見一二。與從已有數據中提煉信息的數據分析師不同,數據工程師要做的是搭建用於傳遞、存儲和處理信息的架構,負責數據的收集、轉移、存儲,以及數據準備工作。根據 AI 行業的需求金字塔,這些任務都是處於塔的最底層。也就是說,如果一家企業的業務是基於數據或者 AI 的話,那麼數據工程師的僱傭和培訓應當是必要的。
每一天都會有無數的數據生成,人們時時刻刻都可以通過手機等隨身攜帶的設備,通過聯網產出各種內容。在過去,數據工程師們需要通過利用 Informatica、Pentaho、Talend 等科技大廠發行的工具編寫複雜的 SQL 查詢命令,搭建 ETL(抽取 Extract、轉換 Transform、加載 Load)流程。當今市場對數據工程師的技能需求則變得更加寬泛,需要至少滿足以下條件:
可以看出,數據工程師在專業技能方面的需求與一般的後端工程師非常類似。事實上,如果一家企業在數據量方面一直呈增長趨勢的話,後端工程師轉職數據工程師是個不錯的選擇。
數據工程師在具體的技能方面也因公司規模、數據量和數據速度的不同而異。以 FAANG(Facebook、亞馬遜、蘋果、網飛、谷歌的統稱)為例,他們通常需要員工滿足:
掌握 Python、Java 或 Scala 知識
有使用 Apache Hadoop,Kafka 以及 Spark 等大數據工具的工作經驗
深入理解常用算法和數據結構
熟悉分布式系統
有使用商業智能工具 Tableau、QlikView、Looker 或者 Superset 等工具的開發經驗
數據工程師每天的主要工作就是和數據打交道,熟悉資料庫工作原理會讓你的工作變得更輕鬆。數據工程作為工程的一大分支領域,意味著你需要在編程方面,尤其是常用算法和數據結構,有一定的知識。舉例來說,常見 SQL 資料庫 SQLite、PostgreSQL、MySQL 背後的數據結構都是 B-Tree。
這方面的視頻課程有很多,比較推薦的有 Coursea 上的 《數據結構與算法》 專業課,用來入門剛剛好。其他的演講還可以看 Alex Petrov 的 」為什麼所有的開發者都應該了解資料庫存儲「。
Alex 還發布過一些關於資料庫的系列博文,很值得一看:
磁碟 IO,Part 1:IO 的幾種類型
磁碟 IO,Part 2:IO 的更多類型
磁碟 IO,Part 3:LSM 樹
磁碟 IO,Part 4:B 樹和 RUM 猜想
磁碟 IO,Part 5:LSM 樹中的訪問模式
除了視頻課程,Thomas Cormen 聯合著作的 《算法入門》 可以說是在算法和數據結構方面最全面的參考書目了。理論還要搭配實踐才能熟能生巧,所以快去 leetcode.com 刷題吧!
另外,卡內基梅隆大學在油管上發布的關於資料庫的課程錄像也很值得參考:
資料庫系統入門(2019 秋季)
高級資料庫系統(2020 春季)
作為數據工作的常用語言之一 SQL,自它在 70 年代的誕生開始,歷經風雨,直到現在依然經久不衰。十年二十年後,SQL 恐怕還會繼續堅強地活著。不信你看現在流行的這些資料庫,哪個不支持 SQL?
大數據的生態系統中有許多不同的 SQL 引擎:Presto(現為 Trino)、Hive、Impala 等等。花些時間把 SQL 吃透會帶來意想不到的好處。
SQL 的純新手可以從 Mode 的 SQL 教程 《SQL 入門》 開始看,熟練之後可以去 DataCamp 參加互動課程。推薦一些比較不錯的課程:
SQL 中級課程
在 SQL 中 join 數據
PostgreSQL 匯總統計與窗口函數
SQL 最好參考資料應該數「現代 SQL」和「快用索引吧,Luke!」兩大網站。還是那句話,實踐出真知,Leetcode 的資料庫題庫 刷題避無可避。順帶一提,作者的另一篇關於 SQL 窗口函數 的文章也很值得一讀。
Python 的流行不僅僅體現在 web app 的搭建上,在數據分析和數據科學領域,它仍然是大眾的選擇。豐富的生態系統和龐大的社區團體讓 Python 成為了繼 C 和 Java 之後,排名第三的最常用程式語言(數據源自 TIOBE 索引)。
至於 Java 和 Scala,大多的資料庫系統都是用它們編寫的:
Apache Kafka(Scala)
Hadoop HDFS (Java)
Apache Spark (Scala)
Apache Cassandra (Java)
HBase(Java)
Apache Hive、Presto(Java)
了解資料庫系統使用的程式語言是掌握它們工作原理的好起點。Python 最大的弱點在於其性能不足,熟悉一門可以與之互補的、高性能語言會讓你的簡歷脫穎而出。
Scala 的入門教程推薦參考 「推特的 Scala 學院」,Scala 作者編寫 《Scala 編程》 一書也是個很好的起始點。
在大數據的生產環境中有很多實用工具,其中最流行的是:
Apache Kafka:行業領先的消息隊列 / 事件總線 / 事件流技術
Apache Spark:大規模數據處理的統一分析引擎
Apache Hadoop:由不同工具、庫和框架組成的大數據框架,其中包括分布式文件系統(HDFS)、Apache Hive、HBase 等等
Apache Druid:實時分析資料庫
貪多嚼不爛,完整地將其中最流行的一款工具吃透,連其背後的基本概念也要了解才是最好的。具體可以參考 2013 年 Jay Kreps(Apache Kafka 的聯合創始人之一)發表的論文 《日誌:每個軟體工程師都應該知道實時數據的統一抽象》。
雲是大數據的最終歸宿。作為求職者,你至少要有在任何一個雲平臺的開發經驗。世界頂尖雲平臺提供商當屬 亞馬遜雲服務(AWS),其次是 微軟的 Azure(MSA),排行第三的是 谷歌雲平臺(GCP)。
這些頂尖雲提供商都可以提供行業認可的證書。舉例來說,AWS 上最適合數據工程師的證書是 AWS Certified Data Analytics - Specialty,GCP 的則是 專業數據工程師 認證,MSA 的是 Azure 數據工程師 - 基於角色。
當今社會數據量之龐大,是不可能全部塞到一臺計算機裡的,將數據分散在不同節點上的分布式系統由此應運而生。優秀的數據工程師必須要清楚地了解分布式系統背後的基本原理。這一領域的入門教材有很多:
至於實體書目,我會推薦 Martin Kleppmann 編寫的 《設計數據密集型應用》 一書。如果你有興趣,還可以參觀他的 博客。另一位大佬 Vaidehi Joshi 發表的關於分布式系統的一系列 博文 也很值得一看。
數據管道是指將數據進行整合的過程,它的構建同樣是數據工程師的主要責任之一。作為一名合格的數據工程師,你應當能夠將多個來源的數據可靠地交付、加載和轉換到一個特定的目的地,這個目的地通常是指中央數據倉庫或數據湖。你可選的工具有很多:Apache Airflow、Spotify 的 Luigi、Perfect 或者 Dagster。如果你更喜歡無代碼的解決方案,那麼 Apache 的 NiFi 是個很好的選擇。
數據工程師並不適合單打獨鬥,與數據分析師、數據科學家、基礎設施工程師,以及其他利益相關者通力合作,才能發揮出數據工程師的最大價值。因此,不要忘記軟技能的培養,要具備同理心、理解業務領域、擁有開放的心態等等。
如果你有什麼想要補充的,歡迎在評論區留下你的看法。
原文連結:
https://khashtamov.com/en/how-to-become-a-data-engineer/
你也「在看」嗎?👇