zoukankan      html  css  js  c++  java
  • 【转译】如何成为一个数据工程师?

    对数据工程师的需求正在迅速增长,那么如何成为一名数据工程师呢?

    什么是数据工程?

    数据工程,正如其名,跟数据紧密相关。数据分析通常意味着从现有数据中获取见解,而数据工程则是指构建基础设施来交付、存储及处理数据的过程。根据 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是个不错的选择。


    参考链接

  • 相关阅读:
    aarch64_p1
    aarch64_o2
    aarch64_o1
    aarch64_n3
    aarch64_n2
    aarch64_n1
    aarch64_m3
    aarch64_m2
    aarch64_m1
    aarch64_l3
  • 原文地址:https://www.cnblogs.com/jiaoran/p/14615783.html
Copyright © 2011-2022 走看看