拾穗数据

Back

数据开发工程师 L1:工程启蒙#

[!quote] 写在前面 如果你对”大数据”这个词充满好奇,如果你听说过 Hadoop、Spark、Flink 这些名字但不太清楚它们是干什么的,如果你想从事一份和海量数据打交道的工作——那么,数据开发工程师可能就是适合你的方向。

但我要先告诉你一个事实:数据开发是一个对基础功要求很高的岗位。它不像某些岗位可以”速成”,你需要扎实的编程能力、对系统原理的理解、以及处理复杂问题的耐心。好消息是,一旦你把基础打牢,后面的学习曲线会变得平缓很多,而且这是一个供不应求的岗位——好的数据开发工程师永远不愁找不到工作。


这个阶段的你,可能是这样的#

画像一:计算机相关专业的应届生,想做大数据#

你是计算机、软件工程、信息技术等相关专业的学生,马上要毕业了。你在学校学过 Java、Python、数据库,做过一些课程项目,但感觉和真正的”大数据”还有很大距离。你不太确定自己的水平够不够,也不知道该从哪里开始准备。

给你的建议:你的科班背景是优势。数据开发的核心还是编程和系统,这些你在学校都有基础。现在要做的是:把 SQL 和 Python 练到熟练(不只是能写,而是写得快、写得好),然后了解一下 Hadoop 生态的基本概念。入门阶段不需要精通每个框架,但要对整个生态有个全貌认知。

画像二:后端开发,想转型做数据开发#

你已经做了一两年后端开发,对 Java 或 Python 比较熟悉,也有一些数据库使用经验。你发现”大数据”这个领域薪资更高、需求量大,想转过来试试。但你不太清楚,后端开发和数据开发到底有什么区别?需要重新学很多东西吗?

给你的建议:好消息是,后端开发转数据开发相对顺畅。你已经有的编程基础、对系统的理解、处理问题的能力,都能直接用上。主要需要补的是:数仓建模理论、ETL 开发思路、以及大数据框架(Spark、Flink 等)。你的转型优势是工程能力强,但要注意思维方式的转变——后端开发强调”服务在线、响应快”,数据开发强调”数据准确、流程稳定”。

画像三:数据分析师,想转型做数据开发#

你做了一段时间数据分析,SQL 已经写得很溜了,但你发现自己经常受限于”数据没有”或”数据不准”。你开始对数据是怎么来的产生兴趣,想自己动手解决数据问题,而不是总去找数据开发帮忙。

给你的建议:分析师转数据开发需要补的主要是工程能力。你的优势是理解业务、知道什么数据有价值;劣势是可能没有系统编程经验、对 Linux 不熟悉、没接触过分布式系统。建议从 Python 脚本开发开始,然后学习 ETL 工具和调度系统。不要急于去学 Spark、Flink 这些重型框架,先把单机开发做熟练。

画像四:完全零基础,但很想入行#

你可能是非计算机专业的,或者之前做完全不相关的工作,但你对数据开发很感兴趣。你听说这个方向薪资不错,想转过来,但不知道零基础能不能学会。

给你的建议:坦白说,零基础转数据开发的难度比转数据分析要大。因为数据开发对编程能力、系统理解有硬性要求,这些不是看几个视频就能速成的。但这不意味着不可能——我见过文科背景的人通过一两年的系统学习成功转型。关键是:要有足够的时间投入(至少每天 2-3 小时的学习),要有正确的学习路径,以及要有足够的耐心。如果你决定了要走这条路,就做好”打持久战”的准备。


常见困惑:到底要学什么技术?#

很多人在入行前会听到各种说法:“数据开发要学 Java”、“现在都用 Docker 了”、“不会 Kubernetes 找不到工作”……这些说法让人焦虑。这里我来帮你理清思路。

“数据开发是不是一定要学 Java?”#

简短回答:不一定,取决于你的工作内容和职业目标。

详细解释

情况Java 是否必要建议
做 ETL、写 SQL、调度任务不必要Python + SQL 足够
写 Hive/Spark UDF需要UDF 通常用 Java 写
做 Flink 实时开发强烈建议Flink Java API 更成熟
想看懂框架源码、深度调优必须Hadoop/Spark/Flink 都是 Java 系
面试大厂数据开发岗大概率会问很多公司面试包含 Java 基础

我的建议

  • L1 阶段:Python + SQL 优先,Java 可以暂缓
  • L2 阶段:开始学 Java 基础,能看懂代码、写简单 UDF
  • L3 及以上:如果想往架构方向发展,Java 要熟练

[!tip] 一个判断方法 看看你想去的公司的招聘 JD,如果写着”熟悉 Java 优先”,那就学;如果主要要求是 SQL 和 Python,那就先把这些学精。

“Docker 和 Kubernetes 要不要学?”#

简短回答:Docker 建议学,Kubernetes 可以后学。

详细解释

Docker

  • 现代数据开发的”标配技能”
  • 学习成本低,几天就能上手
  • 即使公司不用 K8s,Docker 也能用来搭建本地开发环境
  • 建议 L1 阶段就学会基本使用

Kubernetes(K8s)

  • 如果你的公司数据平台部署在 K8s 上,需要学
  • 如果你想做数据平台架构师,需要学
  • 如果你只是做 ETL 开发、写 SQL,可以不学
  • 建议 L3 阶段再深入

[!note] 现实情况 很多公司的数据开发日常工作是:写 SQL、开发 ETL、配置调度——这些和 Docker/K8s 的关系不大。平台运维的事情通常有专人负责。所以不要被”不会 K8s 找不到工作”吓到。

“Python 和 SQL 哪个更重要?”#

简短回答:SQL 更重要,但 Python 也必须会。

详细解释

数据开发日常工作时间分配(典型情况):

写 SQL(Hive/Spark SQL):50-70%
Python 脚本开发:15-25%
配置和调试:10-20%
Java 开发(如 UDF):5-10%
plaintext

结论:SQL 是吃饭的家伙,必须精通;Python 是效率工具,必须能用;Java 是进阶技能,看情况学。

“要不要学 Scala?”#

简短回答:大多数人不需要。

详细解释

  • Scala 是 Spark 的”母语”,Spark 就是 Scala 写的
  • 但 Spark 提供了完善的 Python API(PySpark)和 Java API
  • 除非你要:贡献 Spark 源码 / 加入专门用 Scala 的团队
  • 否则:把学 Scala 的时间用来学好 Python 和 SQL 更划算

”AI 时代,这些还值得学吗?”#

简短回答:值得,而且 AI 让学习更高效了。

详细解释

AI 改变的是学习方式和工作效率,不是技能本身是否需要

以前现在(有 AI 辅助)
记语法、背命令不确定就问 AI,专注理解原理
从头写代码让 AI 生成初稿,自己 review 修改
看报错一头雾水把报错贴给 AI,秒懂原因
学新框架很慢AI 帮你解释文档、生成示例

但 AI 替代不了的

  • 理解业务需求、设计数据模型
  • 判断数据质量问题、排查数据异常
  • 架构决策、性能调优
  • 和团队沟通、推动项目落地

建议:把 AI(ChatGPT、Claude、Copilot)当成学习伙伴和效率工具,但不要指望它替你思考。基础还是要打牢。


L1 阶段的核心目标#

用一句话概括 L1 阶段的目标:

能够在单机环境下完成基本的数据处理任务,理解数据是怎么”流动”的。

具体来说:

  • 给你一份 CSV 或 JSON 文件,你能用 Python 把它处理干净,导入到数据库里
  • 给你一个简单的数据同步需求,你能写脚本实现,并设置定时任务自动执行
  • 给你一张报表需求,你能写 SQL 把数据查出来
  • 出了问题,你能看日志、定位原因,不会两眼一抹黑

L1 阶段不要求你处理”大数据”(TB 级别的数据),也不要求你会用 Spark、Flink 这些分布式框架。你的任务是把基础打牢,为后续学习分布式系统做好准备。


必须掌握的核心技能#

1. Linux 命令行 —— 数据开发的”作战环境”#

数据开发工程师 90% 的工作是在 Linux 服务器上完成的,而不是在 Windows 的图形界面里点来点去。如果你对命令行不熟悉,那第一步就是要跨过这个坎。

必须熟练的命令#

文件操作

ls -la           # 列出文件,包括隐藏文件
cd /path/to/dir  # 切换目录
cp / mv / rm     # 复制、移动、删除
mkdir -p         # 创建目录(包括父目录)
cat / head / tail / less  # 查看文件内容
bash

文本处理(这是数据开发必备技能)

grep "pattern" file.txt    # 搜索文本
awk '{print $1}' file.txt  # 按列处理文本
sed 's/old/new/g' file.txt # 替换文本
wc -l file.txt             # 统计行数
sort / uniq                # 排序、去重
bash

系统管理

ps aux / top     # 查看进程
df -h / du -sh   # 查看磁盘空间
free -m          # 查看内存
crontab -e       # 编辑定时任务
bash

最重要的技能

tail -f /var/log/xxx.log  # 实时查看日志
bash

这个命令你会用无数次——出了问题,第一反应就是看日志。

怎么练习?#

最好的方式是在真实的 Linux 环境中操作。你可以:

  • 在本地安装虚拟机(VMware 或 VirtualBox)
  • 使用云服务器(阿里云、腾讯云都有学生优惠)
  • 在 Mac 上直接用 Terminal(Mac 底层是 Unix)

不要只看教程,要动手敲命令。每天花 30 分钟在命令行里操作,一个月后就能熟练了。

2. SQL —— 吃饭的家伙#

数据开发工程师的 SQL 要求比数据分析师更高。分析师只需要能查出数据,工程师还需要理解 SQL 在数据库里是怎么执行的,以及怎么写才能更高效。

基础语法必须精通#

-- 这些你必须能闭着眼睛写出来
SELECT ... FROM ... WHERE ...
GROUP BY ... HAVING ...
ORDER BY ... LIMIT ...
JOIN (INNER / LEFT / RIGHT / FULL)
UNION / UNION ALL
sql

进阶技能#

子查询和 CTE

-- CTE (Common Table Expression) 让复杂查询更清晰
WITH daily_stats AS (
    SELECT date, SUM(amount) as total
    FROM orders
    GROUP BY date
)
SELECT * FROM daily_stats WHERE total > 10000;
sql

理解执行计划

EXPLAIN SELECT * FROM orders WHERE user_id = 123;
sql

你要能看懂执行计划,知道查询走了什么索引、扫描了多少行。这是优化 SQL 性能的基础。

推荐学习SELECT语句结构JOIN连接SQL优化

[!warning] 生产环境的铁律 永远不要直接在生产库执行 UPDATE 或 DELETE 语句! 新手最容易犯的错就是”手滑”误删数据。正确的做法是:先在测试环境验证,再用事务包裹,执行前先备份。

3. Python —— 数据处理的瑞士军刀#

Python 是数据开发工程师最常用的脚本语言。你不需要成为 Python 专家,但需要能用它来完成各种数据处理任务。

必须会的基础#

# 文件操作
with open('data.csv', 'r') as f:
    for line in f:
        print(line.strip())

# 字典和列表操作
data = [{'name': 'Alice', 'age': 25}, {'name': 'Bob', 'age': 30}]
names = [d['name'] for d in data]

# 异常处理
try:
    result = do_something()
except Exception as e:
    print(f"Error: {e}")
python

数据处理相关#

# Pandas 处理表格数据
import pandas as pd
df = pd.read_csv('data.csv')
df_clean = df.dropna()
df_clean.to_sql('table_name', engine)

# 数据库连接
import pymysql
conn = pymysql.connect(host='localhost', user='root', password='xxx', db='test')
cursor = conn.cursor()
cursor.execute("SELECT * FROM users")
python

推荐学习Python介绍环境搭建Pandas数据结构

4. 版本控制(Git)—— 工程师的必备技能#

不管你做什么开发,Git 都是必须掌握的。它不只是”代码备份工具”,更是团队协作的基础。

必须熟练的操作#

git clone <url>        # 克隆仓库
git add .              # 添加更改
git commit -m "msg"    # 提交
git push               # 推送到远程
git pull               # 拉取更新
git branch / checkout  # 分支操作
git merge              # 合并分支
bash

良好的提交习惯#

  • 每次提交只做一件事
  • 写清晰的提交信息,不要写”fix”、“update”这种没有意义的信息
  • 提交前检查代码,不要把调试代码提交上去

推荐学习数据开发版本管理

5. 数据库原理 —— 理解底层才能用得更好#

不只是会写 SQL,还要理解数据库是怎么工作的。这些知识在你调优和排错的时候非常有用。

需要理解的概念#

事务(ACID)

  • 原子性(Atomicity):要么全成功,要么全失败
  • 一致性(Consistency):事务前后数据状态一致
  • 隔离性(Isolation):并发事务互不影响
  • 持久性(Durability):提交后数据永久保存

索引

  • 索引是什么?为什么能加快查询?
  • 什么时候应该建索引?什么时候不应该?
  • 覆盖索引、联合索引是什么?

存储引擎

  • InnoDB 和 MyISAM 有什么区别?
  • 什么时候用什么引擎?

推荐学习什么是数据库关系型数据库概念

6. 大数据生态认知 —— 先有全局观#

L1 阶段不需要深入学习每个大数据框架,但需要对整个生态有个全貌认知。

Hadoop 生态的核心组件#

  • HDFS:分布式文件系统,存海量数据的
  • YARN:资源调度系统,管理计算资源的
  • Hive:SQL 引擎,让你用 SQL 查询大数据
  • Spark:计算引擎,比 MapReduce 快很多
  • Flink:实时计算引擎,处理流式数据的
  • Kafka:消息队列,数据流转的”管道”

你不需要会用这些工具,但要知道它们是干什么的,在整个数据流程中扮演什么角色。


你可能会遇到的困难#

”Linux 命令太多,记不住”#

刚开始接触 Linux,面对几百个命令和无数的参数,确实会觉得头大。

解决方案:不要试图记住所有命令。先记住最常用的 20 个,用熟了再扩展。不会的命令用 man 或 Google 查。用得多了自然就记住了。

“写代码总是报错”#

写 Python 或 Shell 脚本时,经常遇到各种报错,不知道怎么解决。

解决方案

  1. 看报错信息——Python 的报错信息通常很清晰,告诉你哪一行出了什么问题
  2. Google 搜索报错信息——99% 的问题别人都遇到过
  3. 学会用 print/log 调试——在关键位置打印变量值,看看和预期是否一致
  4. 代码要一点一点写,每加一点功能就测试一下,不要一口气写完再调试

”不知道自己学得够不够”#

学了一段时间,但不确定自己的水平能不能找到工作。

解决方案:给自己设置一个验收项目。比如:

  • 用 Python 写一个脚本,从某个 API 拉取数据,清洗后存入 MySQL
  • 设置 crontab 每天定时执行这个脚本
  • 把代码用 Git 管理起来,推送到 GitHub

如果你能独立完成这个项目,L1 阶段就算过关了。


L1 阶段可以胜任的岗位#

完成 L1 阶段的学习后,你可以尝试以下岗位:

初级数据开发工程师 / ETL 开发工程师

  • 主要工作:在导师指导下完成数据抽取、清洗、入库等任务
  • 薪资参考:一线城市 10-18K,二线城市 7-12K
  • 面试重点:SQL 能力、Python 脚本能力、Linux 基础

数据运维工程师(初级)

  • 主要工作:监控集群状态、收集日志、排查简单故障
  • 特点:对系统运维能力要求更高,对开发能力要求相对低一些

BI 工程师(初级)

  • 主要工作:开发和维护数据报表、简单的数据清洗
  • 特点:偏向业务支持,技术门槛相对低一些

[!note] 关于第一份工作 L1 阶段找工作不要太挑。第一份工作最重要的是能让你真正接触到数据开发的工作内容,哪怕只是做一些基础的脚本维护。在真实项目中学到的东西,比自己看教程快十倍。如果有两个 offer,一个薪资高但做的事情很边缘,一个薪资低但能接触核心业务,建议选后者。


给 L1 学习者的真诚建议#

1. 把基础打牢,不要急于求成#

很多人一上来就想学 Spark、Flink,觉得这样才”高大上”。但如果你连 SQL 都写不利索,连 Python 脚本都调不通,学那些分布式框架只会一头雾水。老老实实把 SQL、Python、Linux 练熟,这些基础功会让你后面的学习事半功倍。

2. 多写代码,少看视频#

看视频学习很轻松,但容易造成”我好像会了”的错觉。真正的学习发生在你自己动手写代码、遇到报错、解决问题的过程中。每天至少保证 1-2 小时的实际编码时间。

3. 学会看文档和搜索#

遇到问题不要第一时间问别人,先自己查。Google、Stack Overflow、官方文档,这些是你最好的老师。“会搜索”是程序员的核心技能之一。

4. 养成好的工程习惯#

从一开始就要养成好习惯:

  • 代码要有注释
  • 变量命名要清晰
  • 代码要用 Git 管理
  • 重要操作要有日志

这些习惯一旦养成,会让你受益终身;一旦没养成,后面很难改。

5. 不要怕犯错#

初学者最容易犯的错就是”怕犯错”,不敢动手操作,怕把什么东西搞坏了。但其实,犯错是学习的最好方式。在学习环境里,放心大胆地尝试,出了错误就是学习的机会。


接下来#

当你能够熟练完成单机环境下的数据处理任务,开始有这样的困惑时:

  • “我处理的数据越来越大,单机跑不动了”
  • “老板说要用 Hive 查数据,但我不会”
  • “同事在说 Spark、Flink,我听不懂他们在说什么”
  • “我想学习正规的数仓建模方法”

恭喜你,你已经准备好进入下一个阶段了。

➡️ L2:核心构建 —— 学习分布式系统和数仓建模,处理真正的”大数据”


相关资源

数据开发 L1:工程启蒙
https://blog.ss-data.cc/blog/data-engineer-l1-startup
Author 石头
Published at 2025年1月5日
Comment seems to stuck. Try to refresh?✨