整篇文章约2.5万字(不包含引用和连接内容)。
- 编程语言()
- Linux基础()
- 数据库入门()
- 计算机基础()
- Java基础()
- 分布式理论篇()
- 络通信篇()
- 离线计算篇()
- 消息队列篇()
- 实时计算篇()
- 数据调度/治理/血缘等()
- 数据仓库&数据湖()
- OLAP篇()
- 算法篇()
- 不可缺少的后端技能()
16.业务()
第二部分:学习路径拆分篇
- 语言基础篇()
- Linux基础()
- 分布式理论篇()
- 络通信Netty()
5.离线计算()
6.消息队列()
7.实时计算篇() - 数据调度/数据交换/数据治理、血缘等()
9.数据仓库&数据湖()
10.OLAP篇() - 算法篇()
12.不可缺少的后端技能()
第三部分:视频/书籍推荐篇
B站资源汇总
- 语言基础篇
- 数据结构篇
- Linux基础
- 数据库入门
- 计算机基础
- 分布式理论
- Netty与 络通信
框架篇
- Hadoop
- Hive
- Hbase
- Kafka
- Spark
- Flink
项目实战篇
云栖 区
- 关键用法
- 电子书区
- 产品讨论(问答区)
- 学习路线&进阶区
- 公开课
- 活动&训练营
- 热门技术圈
- 总结
第四部分:未来趋势篇
- 近实时架构兴起
- 数据共享与隐私保护成为热点
- IoT成为热点
- AI for System
- 云原生和图计算
第五部分:面试&建议
- 校招面试
- 招同学看这里
第六部分:其他
- 总结
我在写完此文的时候,窗外已经大亮。2022年正迎面走来,也代表着我从事大数据开发领域的第五个年头迎面走来。
文章也仅仅是站在我从业4年多的时间点,基于我过去经历的总结以及对行业未来的思考,向大家展示一个我认为「比较全面」、「比较合理」、「未来天花板比较高」的技术栈模型。如果你有更好的建议,欢迎给我留言。
文章内容较长,请耐心看完,欢迎转发、点赞、收藏。
回顾过去
2019-2020年
2019年9月7日,我第一次发表剑谱总纲 | 大数据方向学习面试知识图谱,彼时大数据领域经历了完整的10年成熟期,从幕后走向台前。站在2019年,这篇文章应该是全 大数据开发领域第一篇完整诠释「数据开发」(偏平台方向)的技术栈模型,全文不长,只有5000字左右。
这篇文章我第一次提出一个观点:「一切技术最终只是雕虫小技」。
现在回想这篇文章,少了关键的一个方向的技术栈也就是「数据仓库」。在大数据这个领域,数据仓库领域提供了茫茫多的就业岗位,也是很大一批人的从业方向。但是偏偏少了这个方向。
为什么/p>
2019年中旬我第一次开始做企业级的数据仓库,涉及到离线数据仓库和实时数据仓库。也是第一次我对自己的工作产生厌恶。数据仓库这个方向在我当时的感觉是整个大数据开发领域最苦最累的工作之一。经历了6个月的建设之后,我终于脱离了这个方向,并且在后续的技术文章中,尽量避免去写关于数仓建设的文章。但是此一时彼一时,随着Flink和数据湖的发展,数据仓库领域经历了前所未有的繁荣。经过深入的研究之后,我的观念也更客观了一些,所以才把这个方向的能力模型慢慢补齐。
2021年
2021年的7月10日,我又发表了八千里路云和月|从零到大数据专家学习路径指南。2021年的中旬是我经历了完整的后端架构、数据中间件、数据平台、ToB领域的数据产品和业务开发(涵盖基本算法和算法工程化)这个过程后,写出来的。
彼时正值我个人工作的第四年,对整个数据体系的发展也有了足够的认知。专业技术写作业持续了差不多2年时间,文笔上更加成熟一些,另外对「数据开发」这个职业也有了足够的认知。这篇文章更加友好了的给出了一些视频和书籍的推荐,最后还增加了一些学习方法和认知上的提升。
Flink的开源促进了整个大数据领域实时计算的发展,并且以此为契机,促进整个实时计算、实时数据仓库等方向的发展。
在阿里云计算平台事业部给出的2021年大数据体系的四大热点中包含了:
- 泛数据领域的系统架构,整体向Shared-EveryThing架构演进
- 湖仓技术的一体化融合
- 云原生与托管化
- BI+AI双模式
另外我还加入了图计算这个小众方向。
上面列出的几大热点听不懂没有关系,等大家真正从事这个方向的开发后,可以再深入了解。
- 第一部分:学习路径概览篇
- 第二部分:学习路径拆分篇
- 第三部分:视频/书籍推荐篇
- 第四部分:未来趋势篇
- 第五部分:面试&建议
- 第六部分:其他
上面的每个部分会对之前的内容进行删减,有一些比较大的改动,另外根据数据开发领域的最新发展趋势给出了一些非常有潜力的技能点。
我对每个技能点都给出了评级,五星最高,一星最低。
第一部分:学习路径概览
1. 编程语言()
计算机专业的同学的第一门语言大都是C语言,然后是面向对象的Java。除此之外,可以学习Scala和Python。
Java是大数据领域的屠龙刀,适合集团化大规模作战。对Java的要求没有上限,越熟悉越好。Python更像一把锋利的匕首,更适用于短兵相接和贴身肉搏,用来写各种脚本。
另外,这里特别提醒大家对于Go这门语言的关注。 随着云原生的发展,Java正受到Go、Rust等新兴语言的挑战,部分组件因为Cloud Native的发展可能在某一个领域会被慢慢替换掉。例如大名鼎鼎的Logstash,因为资源占用的原因,被Elstaic.co用Golang的Filebeat代替了Shipper部分的职能。
2. Linux基础()
需要掌握基于Linux系统下的常用命令和常见问题诊断。
3. 数据库入门()
基于MySQL了解常见的SQL语法,大数据领域SQL化是未来的发展方向。
4. 计算机基础()
计算机 络,操作系统,数据结构和算法,计算机组成原理。
四门专业课,也是校招面试时的重点。
5. Java基础()
- 语言基础
- 锁
- 多线程
- 并发包中常用的并发容器(J.U.C)
- JVM
- NIO
- RPC
6. 分布式理论篇()
- 分布式中的一些基本概念:集群(Cluster)、负载均衡(Load Balancer)等
- 分布式系统理论基础:一致性、2PC 和 3PC
- 分布式系统理论基础:CAP
- 分布式系统理论基础:时间、时钟和事件顺序
- 分布式系统理论进阶:Paxos
- 分布式系统理论进阶:Raft、Zab
- 分布式系统理论进阶:选举、多数派和租约
- 分布式锁的解决方案
- 分布式事务的解决方案
- 分布式 ID 生成器解决方案
这部分内容是很多做底层开发同学会接触到的东西,如果你作为偏业务的开发去看一些源码或者比较有深度的论文,这部分的内容也是你一定要掌握的。
7. 络通信篇()
- 络协议
- I/O模型:BIO/AIO/NIO
- Netty框架
- Netty 三层 络架构:Reactor 通信调度层、职责链 PipeLine、业务逻辑处理层
- Netty 的线程调度模型
- 序列化方式
- 链路有效性检测
- 流量整形
- 优雅停机策略
- Netty 对 SSL/TLS 的支持 等等
8. 离线计算篇()
- MapReduce
- HDFS
- YARN
- Hive
- Hbase
9. 消息队列篇()
- Kafka
- Pulsar
10. 实时计算篇()
- Flink
- Spark
11. 数据调度/治理/血缘等()
- Dolphin Scheduler
- 数据治理体系
- 数据血缘存储和分析
12. 数据仓库&数据湖()
- 数仓理论:范式、分层模型等
- 数据仓库常见的问题:数据治理、元数据管理等
- 数据湖理论和架构、用到的框架(Hudi、IceBerg)等
13. OLAP篇()
常见的OLAP数据库,这个部分因个人而异,看个人业务用到OLAP库,包括不限于:
- Hive、Hawq、Impala:基于 SQL on Hadoop
- Presto 和 Spark SQL 类似:基于内存解析 SQL 生成执行计划
- Kylin:用空间换时间、预计算
- Druid:数据实时摄入加实时计算
- ClickHouse:OLAP领域的HBase,单表查询性能优势巨大
- Greenpulm:OLAP领域的PostgreSQL
当然还有类似Doris等等这样的数据库供你选择。
14. 算法篇()
- 常见的大数据领域的算法:倒排、TopN、布隆过滤、字典树等
- 了解常见的机器学习算法
- 了解算法工程化
15. 不可缺少的后端技能()
- Spring
- Mybatis
- SpringBoot …
以及后端常见的一些接口抽象、分层设计和架构设计(DDD领域驱动,MVC等)。
16.业务()
基于当前业务的技术选型、成本控制、ROI投入产出比。在钻研技术的同时深入了解业务,建立自己的竞争优势和壁垒。
第二部分:学习路径拆分篇
1. 语言基础篇()
Java语言基础()
- Java 的面向对象
- Java 语言的三大特征:封装、继承和多态
- Java 语言数据类型
- Java 的自动类型转换,强制类型转换
- Java 语言中的关键字:final、static、transient、instanceof、volatile、synchronized的底层原理
- Java 中常用的集合类的实现原理:ArrayList/LinkedList/Vector、SynchronizedList/Vector、HashMap/HashTable/ConcurrentHashMap互相的区别以及底层实现原理
- 枚举
- IO
- 反射
- 注解
- Lambda表达式
- 动态代理
锁()
- CAS、乐观锁与悲观锁、数据库相关锁机制、分布式锁、偏向锁、轻量级锁、重量级锁、monitor
- 锁优化、锁消除、锁粗化、自旋锁、可重入锁、阻塞锁、死锁
- 死锁的原因和解决办法
- CountDownLatch、CyclicBarrier 和 Semaphore 三个类的使用和原理
多线程()
- 并发和并行的区别
- 线程与进程的区别
- 线程的实现、线程的状态、优先级、线程调度、创建线程的多种方式、守护线程
- 自己设计线程池、submit() 和 execute()、线程池原理
- 为什么不允许使用 Executors 创建线程池
- 死锁、死锁如何排查、线程安全和内存模型的关系
- ThreadLocal变量
- Executor创建线程池的方式:
- ThreadPoolExecutor创建线程池、拒绝策略
- 线程池关闭的方式
跟线程安全相关:
- 线程安全
- 多级缓存和一致性
- CPU的时间片和原子性
- 指令重排序
- 内存模型
- Happens-before
- as-if-serial
并发()
- 同步容器与并发容器()
- Thread()
- Runnable&Callable()
- ReentrantLock()
- ReentrantReadWriteLock()
- Atomic包()
- Semaphore()
- CountDownLatch()
- ConcurrentHashMap()
- Executors()
JVM()
- JVM内存结构
- 堆和栈
- Java内存模型
- 垃圾回收
- JVM参数及调优
- JAVA对象模型
- 虚拟机性能监控与故障处理工具
- 即时编译器、编译优化
- 类加载机制
- 虚拟机性能监控与故障处理工具
NIO()
- 用户空间以及内核空间
- Linux 络 I/O 模型:阻塞 I/O (Blocking I/O)、非阻塞 I/O (Non-Blocking I/O)、I/O 复用(I/O Multiplexing)、信 驱动的 I/O (Signal Driven I/O)、异步 I/O
- 灵拷贝(ZeroCopy)
- BIO、AIO、NIO 对比
- 缓冲区 Buffer
- 通道 Channel
- 反应堆 Reactor
- 选择器 Selector
- epoll
RPC()
- RPC 的原理编程模型
- 常用的 RPC 框架:Thrift、Dubbo、SpringCloud
- RPC 的应用场景和与消息队列的差别
- RPC 核心技术点:服务暴露、远程代理对象、通信、序列化
2. Linux基础()
- 基本指令
- 系统和 络命令
- 权限模型
- 基础的Shell脚本
3. 分布式理论篇()
和上面内容保持一致。
- 分布式中的一些基本概念:集群(Cluster)、负载均衡(Load Balancer)等
- 分布式系统理论基础:一致性、2PC 和 3PC
- 分布式系统理论基础:CAP
- 分布式系统理论基础:时间、时钟和事件顺序
- 分布式系统理论进阶:Paxos
- 分布式系统理论进阶:Raft、Zab
- 分布式系统理论进阶:选举、多数派和租约
- 分布式锁的解决方案
- 分布式事务的解决方案
- 分布式ID生成器解决方案
4. 络通信Netty()
Netty 是当前最流行的 NIO 框架,Netty 在互联 领域、大数据分布式计算领域、游戏行业、通信行业等获得了广泛的应用,业界著名的开源组件只要涉及到 络通信,Netty 是最佳的选择之一。
关于 Netty 我们要掌握:
- Netty 三层 络架构:Reactor通信调度层、职责链PipeLine、业务逻辑处理层
- Netty 的线程调度模型
- Netty的核心组件:
- ByteBuf
- TCP/IP粘包拆包
- 编/解码器
- 零拷贝、内存池设计
5.离线计算()
Hadoop 体系是我们学习大数据框架的基石,尤其是 MapReduce、HDFS、Yarn 三驾马车基本垫定了整个数据方向的发展道路。也是后面我们学习其他框架的基础,关于 Hadoop 本身我们应该掌握哪些呢/p>
MapReduce
- 掌握 MapReduce 的工作原理
- 能用 MapReduce 手写代码实现简单的 WordCount 或者 TopN 算法
- 掌握 MapReduce Combiner 和 Partitioner的作用
- 熟悉 Hadoop 集群的搭建过程,并且能解决常见的错误
- 熟悉 Hadoop 集群的扩容过程和常见的坑
- 如何解决 MapReduce 的数据倾斜
- Shuffle 原理和减少 Shuffle 的方法
HDFS
- 十分熟悉 HDFS 的架构图和读写流程
- 十分熟悉 HDFS 的配置
- 熟悉 DataNode 和 NameNode 的作用
- NameNode 的 HA 搭建和配置,Fsimage 和 EditJournal 的作用的场景
- HDFS 操作文件的常用命令
- HDFS 的安全模式
Yarn
- Yarn 的产生背景和架构
- Yarn 中的角色划分和各自的作用
- Yarn 的配置和常用的资源调度策略
- Yarn 任务资源调度的过程
Hadoop3.0新特性
- Erasure Coding
- HDFS数据冗余存储策略
这些新特性需要你了解。
Hive
Hive 是一个数据仓库基础工具,在 Hadoop 中用来处理结构化数据。它架构在 Hadoop 之上,总归为大数据,并使得查询和分析方便。Hive 是应用最广泛的 OLAP 框架。Hive SQL 也是我们进行 SQL 开发用的最多的框架。
关于 Hive 你必须掌握的知识点如下:
- HiveSQL原理和引擎:MapRuce、Tez、Spark
- Hive 和普通关系型数据库有什么区别
- Hive 支持哪些数据格式
- Hive 在底层是如何存储 NULL 的
- HiveSQL 支持的几种排序各代表什么意思(Sort By/Order By/Cluster By/Distrbute By)
- Hive 的动态分区
- HQL 和 SQL 有哪些常见的区别
- Hive 中的内部表和外部表的区别
- Hive 表进行关联查询如何解决长尾和数据倾斜问题
- HiveSQL 的优化(系统参数调整、SQL语句优化)
列式数据库 Hbase
我们在提到列式数据库这个概念的时候,第一反应就是 Hbase。
HBase 本质上是一个数据模型,类似于谷歌的大表设计,可以提供快速随机访问海量结构化数据。它利用了 Hadoop 的文件系统(HDFS)提供的容错能力。它是 Hadoop 的生态系统,提供对数据的随机实时读/写访问,是 Hadoop 文件系统的一部分。
我们可以直接或通过 HBase 的存储 HDFS 数据。使用 HBase 在 HDFS 读取消费/随机访问数据。HBase 在 Hadoop 的文件系统之上,并提供了读写访问。
HBase 是一个面向列的数据库,在表中它由行排序。表模式定义只能列族,也就是键值对。一个表有多个列族以及每一个列族可以有任意数量的列。后续列的值连续地存储在磁盘上。
表中的每个单元格值都具有时间戳。总之,在一个 HBase:表是行的集合、行是列族的集合、列族是列的集合、列是键值对的集合。
关于 Hbase 你需要掌握:
- Hbase 的架构和原理
- Hbase 的读写流程
- Hbase 有没有并发问题base 如何实现自己的 MVVC 的/li>
- Hbase 中几个重要的概念:HMaster、RegionServer、WAL机制、MemStore
- Hbase 在进行表设计过程中如何进行列族和 RowKey 的设计
- Hbase 的数据热点问题发现和解决办法
- 提高 Hbase 的读写性能的通用做法
- HBase 中 RowFilter 和 BloomFilter 的原理
- Hbase API 中常见的比较器
- Hbase 的预分区
- Hbase 的 Compaction
- Hbase 集群中 HRegionServer 宕机如何解决
- Hbase中的重要数据结构:LSM树、SkipList、布隆过滤器
6.消息队列()
Kafka()
Kafka 是最初由 Linkedin 公司开发,是一个分布式、支持分区的(partition)、多副本的(replica)的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于 Hadoop 的批处理系统、低延迟的实时系统、Spark 流式处理引擎,Nginx 日志、访问日志,消息服务等等,用 Scala 语言编写,Linkedin 于 2010 年贡献给了 Apache 基金会并成为顶级开源项目。
Kafka 或者类似 Kafka 各个公司自己造的消息’轮子’已经是大数据领域消息中间件的事实标准。Kafka 不满足单纯的消息中间件,也正朝着平台化的方向演进。
关于 Kafka 我们需要掌握:
- Kafka 的特性和使用场景
- Kafka 中的一些概念:Leader、Broker、Producer、Consumer、Topic、Group、Offset、Partition、ISR
- Kafka 的整体架构
- Kafka 选举策略
- Kafka 读取和写入消息过程中都发生了什么
- Kakfa 如何进行数据同步(ISR)
- Kafka 实现分区消息顺序性的原理
- 消费者和消费组的关系
- 消费 Kafka 消息的 Best Practice(最佳实践)是怎样的
- Kafka 如何保证消息投递的可靠性和幂等性
- Kafka 消息的事务性是如何实现的
- 如何管理 Kafka 消息的 Offset
- Kafka 的文件存储机制
- Kafka 是如何支持 Exactly-once 语义的
- 通常 Kafka 还会要求和 RocketMQ 等消息中间件进行比较
Pulsar()
- 第一部分:OneModel 致力于实现数据的标准与统一。
- 第二部分:OneID 致力于实现实体的统一,让数据融通而非以孤岛存在,为精准的用户画像提供基础。
- 第三部分:OneService 致力于实现数据服务统一,让数据复用而非复制。
9.数据仓库&数据湖()
离线数据仓库
你需要掌握:
- 数据模型架构原则
- 数仓分层原则
- 主题域划分原则
- 数据模型设计原则
- 数仓公共开发规范
- 层次调用规范
- 数据类型规范
- 数据冗余规范
- NULL字段处理规范
- 指标口径规范
- 数据表处理规范
- 表的生命周期管理
- 数仓各层开发规范
- ODS层设计规范
- 公共维度层设计规范
- DWD明细层设计规范
- DWS公共汇总层设计规范
- 数仓命名规范
- 词根设计规范
- 表命名规范
- 指标命名规范
实时数据仓库
- 实时数据仓库架构选型:Lambda、Kappa、流批一体
- 实时数据体系架构分层
- 实时数据体系技术选型:接入、存储、计算、服务、应用
- 实时数据模型分层
数据湖

数据仓库的高性能与管理能力,与数据湖的灵活性,仓和湖的两套体系在相互借鉴与 融合。在2020年各大公司分别提出湖仓一体架构,成为当下架构演进最热的趋势。但湖仓一体架构有多种形态,不同形态尚在演进和争论中。
这部分设计到Format层的数据选型包含:Hudi、IceBerg、Delta三个主要的框架。大家可以根据公司需要选择学习。
10.OLAP篇()
常见的OLAP数据库,这个部分因个人而异,看个人业务用到OLAP库,包括不限于:
- Hive、Hawq、Impala:基于 SQL on Hadoop
- Presto 和 Spark SQL 类似:基于内存解析 SQL 生成执行计划
- Kylin:用空间换时间、预计算
- Druid:数据实时摄入加实时计算
- ClickHouse:OLAP领域的HBase,单表查询性能优势巨大
- Greenpulm:OLAP领域的PostgreSQL
包括如果你要做搜索还可能用到ElasticSearch这样的框架,根据个人业务需要学习。
11. 算法篇()
- 常见的大数据领域的算法:倒排、TopN、布隆过滤、字典树等
- 了解常见的机器学习算法
- 了解算法工程化
12.不可缺少的后端技能()
- Spring
- Mybatis
- SpringBoot
- 常见的设计模式
以及后端常见的一些接口抽象、分层设计和架构设计(DDD领域驱动,MVC等)。
第三部分:视频/书籍推荐篇
这部分就是我之前写的B站资源和云栖 区资源合集。稍有改动。
B站资源汇总
语言基础篇
关于编程语言这部分,大部分同学都是Java附带Scala技能加点,当然如果你学了一点Python的东西也是一个加分项。
那么关于Java语言你可以参考下面这个视频,尤其是如果你的语言基础极差,都没有用过Java语言。
《Java基础到高级-宋红康》 https://www.bilibili.com/video/BV1Qb411g7cz
如果你有一定的语言基础,想看看自己掌握到了什么程度K,下面这个视频就满足你的胃口了。这个视频从关键字到新特性,带着问题的形式,边学边考。
《最全Java零基础入门教程(含百道Java真题)》 https://www.bilibili.com/video/BV1Kb411W75N
数据结构篇
如果你还在读书,结合课本来看,我推荐这个:
《数据结构-浙江大学》 https://www.bilibili.com/video/BV1JW411i731
浙江大学老师的这个视频可以说是公开课的牌面了,可以称为数据结构篇的「正规军」了。
与之对应的是,下面这个视频。如果你工作有一段时间了,那么可以直接看这个视频:
《数据结构与算法(小甲鱼)》 https://www.bilibili.com/video/av29175690
小甲鱼简直可以称为良心UP主的楷模。小甲鱼的视频语言风趣幽默,举了很多的例子配合知识点。
Linux基础
Linux基础这块对于数据开发非常重要,因为大家平时接触过的数据框架的搭建过程涉及大量的Linux命令操作,并且在系统级别的调优还会接触atime、ulimit这种比较高级的命令。
这里我推荐史上最牛的Linux视频教程:
《史上最牛的Linux视频教程—兄弟连》 https://www.bilibili.com/video/av18156598
如果这个视频满足不了你,你还可以参考:
《Linux教程(千万级学习人次)》 https://www.bilibili.com/video/av21303002
数据库入门
基于MySQL了解常见的SQL语法,大数据领域SQL化是未来的发展方向。
《MySQL 基础+高级篇》 https://www.bilibili.com/video/av49181542
以及下面这个:
《MySQL最新教程通俗易懂》 https://www.bilibili.com/video/BV1NJ411J79W
计算机基础
操作系统
这里B站是万能的,但是我还给出了一些其他的链接:
学堂在线上清华的操作系统 https://www.xuetangx.com/course/THU08091000267/5883104
哈工大李治军老师的操作系统 https://www.icourse163.org/course/HIT-1002531008#/声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!