【轉譯】如何成爲一個數據工程師?

對數據工程師的需求正在迅速增長,那麼如何成爲一名數據工程師呢?

什麼是數據工程?

數據工程,正如其名,跟數據緊密相關。數據分析通常意味着從現有數據中獲取見解,而數據工程則是指構建基礎設施來交付、存儲及處理數據的過程。根據 AI 的需求層次,數據工程處在最底層:收集、移動&存儲、數據展示。

data-science-hierarchy-needs

但是數據工程師實際做什麼呢?數據每天都在快速增長。過去數據工程師負責編寫複雜的SQL查詢、使用大公司的工具構建ETL(extract, transform & load) 過程,比如 Informatica ETL, Pentaho ETL, Talend。但現在市場需要更寬的技術棧。如果你立志成爲一個數據工程師,你需要掌握以下技能:

  • 掌握SQL和Python
  • 有云供應商如AWS、Azure或GCP的使用經驗
  • 掌握Java/Scala是個很大的加分項
  • 掌握 SQL和NoSQL數據庫(數據模型、數據倉庫、性能優化等)

技術棧非常類似於後端工程師,實際上公司用於快速增長的數據,轉型數據工程師最理想的人選就是後端工程師。

特殊的技能要求與工具可能根據公司規模、數據量等有所不同。下面看一下FAANG的需求:

  • 掌握 Python、Java 或Scala
  • 有大數據工具的使用經驗,如Apache Hadoop、Kafka 或 Spark
  • 算法與數據結構有着紮實的基礎
  • 深入理解分佈式系統
  • 有商業智能工具的使用經驗,如Tableau、QlikView, Looker, Superset

數據工程師的技術棧

數據工程隸屬於工程學,因此需要計算機基礎知識,尤其是對流行的算法和數據結構的深入理解。

因此數據工程師每天都在和數據打交道,因此理解數據庫如何工作會是很大的加分項。比如,最流行的SQL數據庫 SQLite, PostgreSQL, MySQL 在底層都是使用 B-Tree 數據結構。

算法與數據結構

如果你喜歡觀看視頻,我推薦 Data Structures and Algorithms Specialization,是個不錯的起點。

同時,強烈推薦你看下Alex Petrov的講座,講的是每個程序員都需要知道的數據存儲知識。

關於書,我只推薦一本,由Thomas Cormen和他的朋友編寫的Introduction to Algorithms,關於算法和數據結構最好的參考書。爲了鍛鍊技能,推薦在LeetCode上多刷題,畢竟熟能生巧(Practice makes perfect.)。

關於數據庫,Carnegie Mellon University在YouTube上的課程:

SQL ——數據庫的通用語言

SQL問世於上世紀七十年代,目前仍然是最流行的數據處理語言。很多專家都聲稱 SQL正在衰落,但實際SQL仍然非常活躍。我覺得我們會持續使用SQL十年二十年甚至更久。

現代流行的數據庫幾乎都支持SQL:

  • PostgreSQL, MySQL, MS SQL Server, Oracle DB
  • Amazon Redshift, Apache Druid, Yandex ClickHouse
  • HP Vertica, Greenplum

在大數據生態系統,有着各種不同的SQL引擎,如Presto (Trino), Hive, Impala。強烈推薦你花些時間掌握SQL。

如果你是新手,建議從the Mode's SQL guide開始,Introduction to SQL,接着學習DataCamp's interactive courses
還有這些:

關於 SQL最好的資源是 Modern SQLUse The Index, Luke,你還可以刷些LeetCode上 關於數據庫的 題。不要忘了也讀一下我的文章 SQL window functions.

編程語言: Python, Java, and Scala

Python是一種非常流行的構建web應用的語言,同時也適合數據分析與科學。它有着非常豐富的生態系統和社區。根據 TIOBE,Python是廣泛使用的編程語言,僅次於 C 和 Java。

說到另外兩門語言,很多大數據系統都是用Java或Scala寫的:

  • Apache Kafka (Scala)
  • Hadoop HDFS (Java)
  • Apache Spark (Scala)
  • Apache Cassandra (Java)
  • Hase (Java)
  • Apache Hive, Presto in Java

爲了掌握這些系統如何工作的,我建議瞭解一下它們所使用的語言。關於Python最大的擔心是它的低性能,因此掌握一門更高效的語言會讓你更有競爭力。

如果你對Scala感興趣,我推薦你看下Twitter's Scala School。Scala創始人寫的書 Programming in Scala 也是個不錯的開始。

大數據工具

在大數據領域有着各種技術,下面是一些流行的:

  • Apache Kafka is the leading message queue/event bus/event streaming
  • Apache Spark is the unified analytics engine for large-scale data processing
  • Apache Hadoop, the big data framework which consists of different tools, libraries, and frameworks including distributed file system (HDFS), Apache Hive, HBase etc.
  • Apache Druid is a real-time analytics database

很難學習所有內容,這就是爲什麼要關注最受歡迎的內容並學習背後的基本概念的原因。例如,早在2013年,Jay Kreps(Apache Kafka的聯合創始人)就寫了一篇論文:The Log: What every software engineer should know about real-time data's unifying abstraction

雲平臺

現在每件事都在雲上,你肯定至少使用過一種雲服務。我推薦使用 Amazon Web Service,是雲領域的領頭羊。第二個地方是Microsoft Azure,第三是Google Cloud Platform。

所有的雲供應商都提供相關的證書,例如AWS的AWS Certified Data Analytics – Specialty,GCP的Professional Data Engineer, MSA的Azure Data Engineer Associate.

分佈式系統的基礎知識

每天產生大量的數據,你不可能使用一臺電腦處理。數據應該分佈在不同的節點。如果你想成爲個好的數據工程師,你必須掌握分佈式的基礎知識。這個領域,網上有大量的資源:

我也強烈推薦一本書,作者 Martin Kleppmann,Designing Data-Intensive Applications.這是作者的博客,同時推薦另一個人 Vaidehi Joshi的關於分佈式的系列文章

數據管道

建立一個數據管道是作爲數據工程師的主要責任。數據管道是數據合併和鞏固的過程。數據工程師應該能夠可靠地從多個來源傳輸、加載、轉換數據到某個特定的目的地,通常是一箇中心數據倉庫貨數據池。這方面有很多工具可以幫到你,例如
Apache Airflow, Luigi from Spotify, Prefect or Dagster,如果你傾向非代碼的解決方案,Apache NiFi是個不錯的選擇。


參考鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章