【转译】如何成为一个数据工程师?
对数据工程师的需求正在迅速增长,那么如何成为一名数据工程师呢?
什么是数据工程?
数据工程,正如其名,跟数据紧密相关。数据分析通常意味着从现有数据中获取见解,而数据工程则是指构建基础设施来交付、存储及处理数据的过程。根据 AI 的需求层次,数据工程处在最底层:收集、移动&存储、数据展示。
但是数据工程师实际做什么呢?数据每天都在快速增长。过去数据工程师负责编写复杂的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 SQL和 Use 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.
分布式系统的基础知识
每天产生大量的数据,你不可能使用一台电脑处理。数据应该分布在不同的节点。如果你想成为个好的数据工程师,你必须掌握分布式的基础知识。这个领域,网上有大量的资源:
- Distributed Systems lectures from MIT by Robert Morris
- Distributed Systems lectures by Martin Kleppmann
- Distributed Systems by Lindsey Kuper
我也强烈推荐一本书,作者 Martin Kleppmann,Designing Data-Intensive Applications.这是作者的博客,同时推荐另一个人 Vaidehi Joshi的关于分布式的系列文章。
数据管道
建立一个数据管道是作为数据工程师的主要责任。数据管道是数据合并和巩固的过程。数据工程师应该能够可靠地从多个来源传输、加载、转换数据到某个特定的目的地,通常是一个中心数据仓库货数据池。这方面有很多工具可以帮到你,例如
Apache Airflow, Luigi from Spotify, Prefect or Dagster,如果你倾向非代码的解决方案,Apache NiFi是个不错的选择。
参考链接
作者:皎然CEO
链接:https://www.cnblogs.com/jiaoran/p/14615783.html
个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦(っ•̀ω•́)っ✎⁾⁾!