整篇文章约2.5万字(不包含引用和连接内容)。
回顾过去
2019-2020年
2021年
本文的行文思路
第一部分:学习路径概览
- 编程语言(⭐️⭐️⭐️⭐️⭐️)
- 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字左右。
这篇文章我第一次提出一个观点:「一切技术最终只是雕虫小技」。
现在回想这篇文章,少了关键的一个方向的技术栈也就是「数据仓库」。在大数据这个领域,数据仓库领域提供了茫茫多的就业岗位,也是很大一批人的从业方向。但是偏偏少了这个方向。
为什么?
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
并发(⭐️⭐️⭐️⭐️⭐️)
- 同步容器与并发容器(⭐️⭐️⭐️⭐️)
JUC 包中 List 接口的实现类:CopyOnWriteArrayList
JUC 包中 Set 接口的实现类:CopyOnWriteArraySet、ConcurrentSkipListSet
JUC 包中 Map 接口的实现类:ConcurrentHashMap、ConcurrentSkipListMap
JUC包中Queue接口的实现类:ConcurrentLinkedQueue、ConcurrentLinkedDeque、ArrayBlockingQueue、LinkedBlockingQueue、LinkedBlockingDeque
- Thread(⭐️⭐️⭐️⭐️⭐️)
- Runnable&Callable(⭐️⭐️⭐️⭐️⭐️)
- ReentrantLock(⭐️⭐️⭐️⭐️⭐️)
- ReentrantReadWriteLock(⭐️⭐️⭐️⭐️⭐️)
- Atomic包(⭐️⭐️⭐️⭐️)
- Semaphore(⭐️⭐️⭐️⭐️)
- CountDownLatch(⭐️⭐️⭐️⭐️)
- ConcurrentHashMap(⭐️⭐️⭐️⭐️⭐️)
- Executors(⭐️⭐️⭐️⭐️⭐️)
JVM(⭐️⭐️⭐️⭐️⭐️)
- JVM内存结构
- 堆和栈
- Java内存模型
- 垃圾回收
GC算法:标记清除、引用计数、复制、标记压缩、分代回收、增量式回收
GC参数
垃圾收集器(CMS、G1、ZGC、Epsilon)
对象存活的判定
- JVM参数及调优
- JAVA对象模型
- 虚拟机性能监控与故障处理工具
- 即时编译器、编译优化
- 类加载机制
- 虚拟机性能监控与故障处理工具
jps
jstack
jmap
jstat
jconsole
jinfo
jhat
javap
btrace
TProfiler
jlink
Arthas
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的核心组件:
Channel
EventLoop
ChannelFuture
EventLoopGroup
ChannelHandler
ChannelPipeLine
ChannelHandlerContext
- ByteBuf
- TCP/IP粘包拆包
- 编/解码器
- 零拷贝、内存池设计
5.离线计算(⭐️⭐️⭐️⭐️⭐️)
Hadoop 体系是我们学习大数据框架的基石,尤其是 MapReduce、HDFS、Yarn 三驾马车基本垫定了整个数据方向的发展道路。也是后面我们学习其他框架的基础,关于 Hadoop 本身我们应该掌握哪些呢?
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数据冗余存储策略
这些新特性需要你了解。
1. 最低要求的Java版本从Java 7增加到Java 8
现在,已针对Java 8的运行时版本编译了所有Hadoop JAR。仍在使用Java 7或更低版本的用户必须升级到Java 8。
2. 支持HDFS中的纠删码
纠删码是一种持久存储数据的方法,可节省大量空间。与标准HDFS副本机制的3倍开销相比,像Reed-Solomon(10,4) 这样的标准编码的空间开销是1.4倍。
由于纠删码在重建期间会带来额外的开销,并且大多数情况下会执行远程读取,因此传统上已将其用于存储较冷,访问频率较低的数据。
在部署此功能时应考虑纠删码机制的网络和CPU开销。
3. Shell脚本重写
Hadoop Shell脚本已被重写,以修复许多长期存在的错误并包括一些新功能。Hadoop的开发人员尽管一直在寻求兼容性,但是某些更改可能会破坏现有的安装。
4. MapReduce 任务本地优化
MapReduce 增加了对 map output 收集器的本地执行的支持,对于 shuffle 密集型工作,这可以使性能提高30%或更多。
5. 支持两个以上的 NameNode
在之前的版本中,HDFS的高可用最多支持两个NameNode。在HDFS 3.x 版本中,通过将编辑复制到法定数量的三个JournalNode,该体系结构能够容忍系统中任何一个节点的故障。
但是,某些部署需要更高的容错度。这个新特性启用了这一点,该功能允许用户运行多个备用NameNode。例如,通过配置三个NameNode和五个JournalNode,群集可以忍受两个节点的故障,而不仅仅是一个节点的故障。
6. 多个服务的默认端口已更改
以前,多个Hadoop服务的默认端口在Linux临时端口范围内(32768-61000)。这意味着在启动时,服务有时会由于与另一个应用程序的冲突而无法绑定到端口。
这些冲突的端口已移出临时范围,具体的端口更改如下:
NameNode 的端口: 50070 --> 9870, 8020 --> 9820, 50470 --> 9871;
Secondary NameNode 的端口: 50091 --> 9869, 50090 --> 9868;
DataNode 的端口: 50020 --> 9867, 50010 --> 9866, 50475 --> 9865, 50075 --> 9864;
Hadoop KMS 的端口: 16000 --> 9600(HBase的HMaster端口号与Hadoop KMS端口号冲突。两者都使用16000,因此 Hadoop KMS 更改为9600)。
7. 支持Microsoft Azure数据湖和阿里云对象存储系统文件系统连接器
Hadoop现在支持与Microsoft Azure数据湖和Aliyun对象存储系统集成,作为与Hadoop兼容的替代文件系统。
8. 数据内节点平衡器
单个DataNode可管理多个磁盘。在正常的写操作过程中,磁盘将被均匀填充。但是,添加或替换磁盘可能会导致DataNode内部出现严重偏差。原有的HDFS平衡器无法处理这种情况。新版本的HDFS中有平衡功能处理,该功能通过hdfs diskbalancer CLI调用。
9. 基于HDFS路由器的联合
基于HDFS路由器的联合添加了一个RPC路由层,该层提供了多个HDFS名称空间的联合视图。这简化了现有HDFS客户端对联合群集的访问。
10. YARN资源类型
YARN资源模型已被通用化,以支持用户定义的CPU和内存以外的可计数资源类型。例如,集群管理员可以定义资源,例如GPU,软件许可证或本地连接的存储。然后可以根据这些资源的可用性来调度YARN任务。
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 有没有并发问题?Hbase 如何实现自己的 MVVC 的?
- 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(⭐️⭐️⭐️)
- Pulsar的核心概念
Topic
Bookie
Broker
Entry
Ledger
MetaData Storage
Journal
等等
- Pulsar的关键特性
跨地域复制( geo-replication),单个实例原生支持多个集群(跨集群复制)
极低的发布延迟和端到端延迟
可无缝扩展到超过一百万个 topic
简单的客户端API,支持Java、Go、Python和C++
支持多种topic订阅模式:独占订阅、共享订阅、故障转移订阅、键共享(exclusive, shared, failover, key_shared)
通过 Apache BookKeeper 提供的持久化消息存储机制保证消息传递
由轻量级的无服务器(serverless )计算框架 Pulsar Functions 实现流原生的数据处理
基于 Pulsar Functions 的无服务器连接器框架 Pulsar IO 使得数据更易移入、移出 Apache Pulsar
分层式存储可在数据陈旧时,将数据从热存储卸载到冷/长期存储(如S3、GCS)中
- Pulsar的架构设计
一个Pulsar实例由一个或多个Pulsar集群组成。实例中的集群可以在它们之间复制数据。一个Pulsar cluster由三部分组成:
一个或者多个 broker :负责处理和负载均衡 producer 发出的消息,并将这些消息分派给 consumer;Broker 与 Pulsar 配置存储交互来处理相应的任务,并将消息存储在 BookKeeper 实例中(又称 bookies);Broker 依赖 ZooKeeper 集群处理特定的任务;
一个BookKeeper:包含一个或多个 bookie 的 BookKeeper 集群负责消息的持久化存储;
一个ZooKeeper:特定于某个Pulsar集群的ZooKeeper集群处理Pulsar集群之间的协调任务。
7.实时计算篇(⭐️⭐️⭐️⭐️⭐️)
- Spark
Spark 是专门为大数据处理设计的通用计算引擎,是一个实现快速通用的集群计算平台。它是由加州大学伯克利分校 AMP 实验室开发的通用内存并行计算框架,用来构建大型的、低延迟的数据分析应用程序。它扩展了广泛使用的 MapReduce 计算模型。高效的支撑更多计算模式,包括交互式查询和流处理。Spark 的一个主要特点是能够在内存中进行计算,即使依赖磁盘进行复杂的运算,Spark 依然比 MapReduce 更加高效。
Spark 生态包含了:Spark Core、Spark Streaming、Spark SQL、Structured Streming 和机器学习相关的库等。
学习 Spark 我们应该掌握:
Spark Core(⭐️⭐️⭐️⭐️⭐️)
-
Spark的集群搭建和集群架构(Spark 集群中的角色)
-
Spark Cluster 和 Client 模式的区别
-
Spark 的弹性分布式数据集 RDD
-
Spark DAG(有向无环图)
-
掌握 Spark RDD 编程的算子 API(Transformation 和 Action 算子)
-
RDD 的依赖关系,什么是宽依赖和窄依赖
-
RDD 的血缘机制
-
Spark 核心的运算机制
-
Spark 的 CheckPoint 和容错
-
Spark 的通信机制
-
Spark Shuffle 原理和过程
-
Spark Streaming
-
原理剖析(源码级别)和运行机制
-
Spark Dstream 及其 API 操作
-
Spark Streaming 消费 Kafka 的两种方式
-
Spark 消费 Kafka 消息的 Offset 处理
-
数据倾斜的处理方案
-
Spark Streaming 的算子调优
-
并行度和广播变量
-
Shuffle 调优
Spark SQL(⭐️⭐️⭐️⭐️⭐️) -
Spark SQL 的原理和运行机制
-
Catalyst 的整体架构
-
Spark SQL 的 DataFrame
-
Spark SQL 的优化策略:内存列式存储和内存缓存表、列存储压缩、逻辑查询优化、Join 的优化
-
Catalyst、Tunsten
Structured Streaming、Spark Streaming(⭐️⭐️⭐️⭐️)
这两块部分优先级有所降低,因为Flink社区的蓬勃发展,基于Flink的大数据实时计算技术栈未来会是第一选择。
Spark 从 2.3.0 版本开始支持 Structured Streaming,它是一个建立在 Spark SQL 引擎之上可扩展且容错的流处理引擎,统一了批处理和流处理。正是 Structured Streaming 的加入使得 Spark 在统一流、批处理方面能和 Flink 分庭抗礼。
我们需要掌握:
- Structured Streaming 的模型
- Structured Streaming 的结果输出模式
- 事件时间(Event-time)和延迟数据(Late Data)
- 窗口操作
- 水印
- 容错和数据恢复
Spark Mlib、GraphX(⭐️⭐️⭐️)
本部分是 Spark 对机器学习支持的部分,我们学有余力的同学可以了解一下 Spark 对常用的分类、回归、聚类、协同过滤、降维以及底层的优化原语等算法和工具。可以尝试自己使用 Spark Mlib 做一些简单的算法应用。
- Flink
Flink目前已经成为大数据实时计算领域的第一选择,基于Flink及周边设施的建设也在越来越完善中。
那么关于 Flink 这个框架我们应该掌握哪些核心知识点?
- Flink 集群的搭建
- Flink 的架构原理
- Flink 的编程模型
- Flink 集群的 HA 配置
- Flink DataSet 和 DataSteam API
- 序列化
- Flink 累加器
- 状态 State 的管理和恢复
- 窗口和时间
- 并行度
- Flink 和消息中间件 Kafka 的结合
- Flink Table 和 SQL 的原理和用法
- Flink CDC
- Flink和其他框架的Connector的原理和使用
- Flink SQL中常见的问题
8. 数据调度/数据交换/数据治理、血缘等(⭐️⭐️⭐️⭐️)
数据任务调度
老牌调度框架Oozie、Azkaban、Airflow应用广泛,基于当前公司技术平台的选型情况掌握。
这里我要着重提一下Apache DolphinScheduler这个框架,这个框架为国内开源项目,相对其他国外项目,有天然的本土优势,如果你还没有接触过任务调度框架,可以直接学习DolphinScheduler这个框架。
数据交换
Kettle、DataX、Streamsets、SeaTunnel等异构数据交换工具,可以根据自己的业务需要选择一种学习和掌握。
数据治理
数据治理是这两年数据领域兴起的一个小方向,尤其是一些传统企业在做数字化转型过程中需要很多懂数据治理的人才。
你应该懂的内容包含:
- 数据治理的业务标准、技术标准、数据安全标准等
- 架构治理、模型治理、元数据治理
- 元数据采集、元模型构建、元数据服务、元数据应用
- 数据地图、数据可视化、数据质量监控
这部分内容大家可以直接参考阿里的OneData理论进行学习。
- 第一部分: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
如果你有一定的语言基础,想看看自己掌握到了什么程度?OK,下面这个视频就满足你的胃口了。这个视频从关键字到新特性,带着问题的形式,边学边考。
《最全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#/info
操作系统 参考链接:https://www.bilibili.com/video/BV1YE411D7nH
数据结构与算法
陈越&何应钦的数据结构和算法公开课 https://www.icourse163.org/course/zju-93001#/info
《Java版数据结构与算法》 参考链接:https://www.bilibili.com/video/BV1E4411H73v
计算机网络
哈工大版本 参考链接:https://www.icourse163.org/course/hit-154005
中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版》 参考链接:https://www.bilibili.com/video/BV1JV411t7ow
计算机组成原理
哈工大计算机组成原理
上:https://www.icourse163.org/course/hit-309001#/info 下:https://www.icourse163.org/course/hit-1001527001#/info
分布式理论
关于这一块内容,我没有在B站找到资源可以直接看。这块内容因为都是一些比较高深的论文,我相信很少有老师能够通俗易懂的讲给大家,这块就全靠大家搜集资源了。我给出了学习大纲:
- 分布式中的一些基本概念:集群(Cluster)、负载均衡(Load Balancer)等
- 分布式系统理论基础:一致性、2PC 和 3PC
- 分布式系统理论基础:CAP
- 分布式系统理论基础:时间、时钟和事件顺序
- 分布式系统理论进阶:Paxos
- 分布式系统理论进阶:Raft、Zab
- 分布式系统理论进阶:选举、多数派和租约
- 分布式锁的解决方案
- 分布式事务的解决方案
- 分布式 ID 生成器解决方案
Netty与网络通信
我只找到了这个,我挑了几章我自己研究过的看,总体来说讲到点子上了。
《Netty视频教程》 https://www.bilibili.com/video/BV1DJ411m7NR
框架篇
这部分就到了真正考验各个老师的水平阶段了。
离线部分必看的几个视频:
Hadoop
《Hadoop2.x框架入门教程》 https://www.bilibili.com/video/BV1cW411r7c5
《大数据Hadoop3.x(全新升级/部署+源码+实战)》 https://www.bilibili.com/video/BV1Qp4y1n7EN
当时看到3.x这个视频的时候,无哥我是虎躯一震。这也太强了,Hadoop3.x才出多久,这网上视频都有了?
Hive
Hive也是,这特么3.x版本才出来没多久。在下实在也是震惊了。关键这课的质量还挺好。
《Hive教程(基于Hive3.1.2)》 https://www.bilibili.com/video/BV1EZ4y1G7iL
如果上面的入门课程满足不了你,下面的这个进阶课相信可以填满你了。
《2021新版Hive高级进阶教程》 https://www.bilibili.com/video/BV1Cb4y1r7p2
Hbase
如果你是一个初学者,那么可以看这个:
HBase入门教程 https://www.bilibili.com/video/BV1Y4411B7jy
那么如果你是一个资深的开发,需要系统的学习或者查漏补缺,视频就满足不了大家了。这里我推荐一本书:
《HBase原理与实践》, 作者: 胡争、范欣欣
Kafka
你可以参考这个视频:
《消息队列kafka快速入门》 https://www.bilibili.com/video/BV1a4411B7V9
Kafka这个框架更新也非常频繁,至今已经到了3.x版本了,并且引入了很多新的特性。目前还没有看到跟最新版本有关的视频出现。
如果你的时间有限,可以看这个:
《B站讲的最好的Kafka视频教程全集》 https://www.bilibili.com/video/BV1eg411g7s3
Spark
这个名字取得很大,但是当成一个入门课还是不错的。
《大数据Spark教程从入门到精通》 https://www.bilibili.com/video/BV11A411L7CK
同样大家也知道,Spark3.x版本的更新也带来了一波巨大的改变。
大数据Spark3.0教程 https://www.bilibili.com/video/BV11A411L7CK
就问你强不强!
Flink
再次给清华大佬跪下了。Flink的这个视频我在群里跟很多小伙伴推荐过了。
此视频一出,B站吃瓜群众惊呼:武老师,发生甚么事了?!
Java版Flink(武老师清华硕士,原IBM-CDL负责人) https://www.bilibili.com/video/BV1qy4y1q728
清华大佬不满足于此,竟然给Flink SQL出了单独的视频!
Flink SQL(武老师清华硕士,原IBM-CDL负责人) https://www.bilibili.com/video/BV12k4y1z7LM
项目实战篇
《大数据电商数仓V3.0版本教程》 https://www.bilibili.com/video/BV1Hp4y1z7aZ
《实时数据仓库项目(阿里云实时数仓)》 https://www.bilibili.com/video/BV1dJ411k7BE
《2021新版电商数仓V4.0丨大数据数据仓库项目实战》 https://www.bilibili.com/video/BV1rL411E7uz
云栖社区
我们来看一下简介:
阿里云开发者社区覆盖云计算、物联网、大数据、云原生、数据库、人工智能、微服务、安全、开发、运维等技术领域,集合阿里巴巴经济体各个单元技术优势。
阿里云开发者社区集合阿里巴巴经济体各个单元技术优势,提供分享、交流、学习、认证、工具、资源、大赛、活动、创业等一站式服务能力,满足开发者全生命周期成长需求。
大家不要觉得啰嗦,这个简介就是整个阿里云栖社区的最终定位。所有围绕云栖社区的建设都是基于这样的构想而进行的。
今天我们介绍的就是它的大数据板块,我们直接给出网址:
https://developer.aliyun.com/community/bigdata
在首页的左上角你可以看到更多的的子目录:
如果你需要从大数据扩展到其他领域的学习,那么你能看到更多的板块,去对应板块寻找资源。
关键用法
云栖社区里的内容非常庞大,虽然很多文章和资源都是介绍阿里云相关的产品,但是你可以找到很多官方和个人博主总结的电子书和问答内容。
下面我介绍几个关键的内容,教大家怎么用好这个社区。
电子书区
你可以通过首页的「电子书」标签进入这个板块,这个板块又被称为「藏经阁」,这里面有非常多的电子书可以直接下载。包括「书架上新」「阿里精选」「技术实战」等板块。
这里的电子书质量非常高,比如整个Java开发领域奉为圭臬的「Java开发手册」,就出自这里。
这里面关于大数据的电子书也非常多,很多都是阿里云的专家进行的总结,深度远超任何博客。比如我经常看的「Redis最佳实践和实践指南」、「Apache Flink十大技术难点实战」等等,更多的书大家可以自己去找。
在「藏经阁」下有一个栏目叫做「职业发展」,这里面的内容需要工作5年以内的开发要好好读一读,基于整个数据开发方向的技术栈和未来进阶的方向上的指引,这里已经有很多大佬总结好了。相信能给你解答很多困惑。
产品讨论(问答区)
这个问答区,在大数据领域应该是一个比较好论坛板块了。当然有些回答不是很及时,或者很多讨论阿里云产品的,但是阿里云的产品很多都和开源的产品有对应关系。
大数据领域的问题不比Java或者Go等的后端开发,首先问题的难点不是一个数量级。也就是说,大数据领域的难点比后端开发解决起来要困难的多。因为导致某一个现象的原因可能有很多,对回答者的技术栈深度和广度要求比后端高太多太多,根本不在一个级别。
比如你的问题是「如何计算pv/uv」?,这样的问题很难回答,需要的前置条件太多,比如你是基于Spark还是基于Flink,你是实时统计还是SQL查询?所以大数据领域的问题一般都是方向性的。
这个板块的问题,大家可以好好看看。看看业界的做法一般都是什么样的。
学习路线&进阶区
这个部分不在多言,如果你需要在某一个领域深造,那么首先方向不能错,否则一切都是徒劳的。
这个板块不仅给出了学习路线,你学习完成后还可以测试一下你掌握的程度。也就是「技能自测」区,如下图:
公开课
这里有很多公司技术专家、技术负责人、CTO级别的技术分享,你可以看到很多大的公司在某一个领域是怎么做的,而且大都是高清的视频。
比如你所在公司也是电商行业,需要做搜索,那么你可以参考:
看看别人是怎么做的?不要局限在某一段代码的开发,某一个技术点学习上。这种方向上的把握是大家未来进阶必须要经历的过程,否则你永远只能待在最一线做基础的开发工作。
活动&训练营
这个板块是很多线上的训练营和活动的发布地址,你可以在这里看到很多训练营的活动。虽然有的是基于开源的,有基于阿里云产品的,但是没有关系,总有一些适合你的,比如Apache Flink的极客挑战赛活动。
热门技术圈
这个就是大家最关注的一些圈子了。热度很高的圈子自然可能就是未来发展的重点,有时间不妨多跳出自己目前从事的这个方向,看看其他的圈子都在做什么。
总结
整个云栖社区的大数据板块还有非常多的宝藏区等待大家自己去发掘。整个云栖社区大数据体系,无论是从质量还是广度上,都远超其他任何博客的大数据板块。
第四部分:未来趋势篇
大数据领域仍然处于发展期,部分技术收敛,但新方向和新领域层出不穷。阿里云计算平台事业部也推出了「后红海」时代的大数据的发展趋势。
我把其中的观点详细列了出来:
近实时架构兴起
在离线 batch 计算和纯流式实时计算之间,以开源 Apache Delta/Hudi 为代表的近实时架构成为热点。近实时架构避免了流计算庞大的状态存储与管理,在成本和延迟上找到了另一个平衡。随近实时架构的形成,计算架构最终完成从离线到实时全频谱支持。
数据湖三巨头的持续发展给近实时架构的落地带来了可能性。数据湖方向也是需要大家密切关注的方向。
数据共享与隐私保护成为热点
数据成为资产,开始具备可变现和可交易的能力。可保护隐私的数据交换/共享能力成 为强劲的需求。基于 Differential Privacy 的数据编码交易,以及基于 Federated Learning的多方面安全计算是该领域的热点技术。
隐私计算是一类技术方案,在处理和分析计算数据的过程中能保持数据不透明、不泄露、无法被计算方法以及其他非授权方获取。
从技术角度出发,隐私计算是涵盖众多学科的交叉融合技术,目前主流的隐私计算技术主要分为三大方向:
- 第一类是以多方安全计算为代表的基于密码学的隐私计算技术;
- 第二类是以联邦学习为代表的人工智能与隐私保护技术融合衍生的技术;
- 第三类是以可信执行环境为代表的基于可信硬件的隐私计算技术。
不同技术往往组合使用,在保证原始数据安全和隐私性的同时,完成对数据的计算和分析任务。
IoT成为热点
目前人的行为数据(日志)是大数据计算的主要来源,超过 80%的数据都来源于行为 日志(例如浏览、点击)。随 5G+智能化设备的兴起,设备日志会成为更大的数据源增长点,面向海量低价值设备数据的处理和优化,需要得到更多的关注。
Apache 软件基金会于北京时间2020年9月23日宣布Apache IoTDB毕业成为 Apache 顶级项目。
Apache IoTDB(物联网数据库)是一体化收集、存储、管理与分析物联网时序数据的软件系统。Apache IoTDB 采用轻量式架构,具有高性能和丰富的功能,并与Apache Hadoop、Spark和Flink等进行了深度集成,可以满足工业物联网领域的海量数据存储、高速数据读取和复杂数据分析需求。
如果未来你从事的是IoT方向,那么需要持续关注这个领域的发展。
AI for System
AI for System,即大数据自动驾驶。AI 作为工具,成为优化的常用手段。在大数据领域,随数据量/系统复杂度的增长,DBA 模式已经不再试用。利用算法优化系统成为主流方向,大数据的"自动驾驶"会越来越自动。
云原生和图计算
根据阿里云关涛老师的一些观点:
数据库和数仓已经发展了 40 多年,主流的计算范式就是二维关系表达。近 10 年,深度学习带来了一个新的计算方式。那除此以外,还有没有一个更新一代的计算方式会产生?
图计算是目前最被看好的方向,它是点边模型,与二维关系表达并不相同。但是数据库技术发展过程中也诞生了图计算模式,并且已经发展多年,但目前仍然不是主流。
随着图学习 GraphEmbedding 技术的兴起,图计算是否能焕发新生变成一个主流的计算范式也是值得大家关注的。
图计算领域的一些数据库可能是大家学习的重点,例如:Neo4j、JanusGraph、HugeGraph等。
而「云原生(Cloud Native)」在2021年在大数据与云计算领域牢牢占据了C位。数据显示,云原生计算基金会(CNCF)现在拥有 730 多个成员组织和 100 多个开源云原生项目,整个云原生生态逐步趋于完善。
云原生领域涵盖的技术类别越来越多,但最关键的三项是容器、Serverless、Service Mesh。其中以K8s为核心的容器技术需要大家持续关注。
第五部分:面试&建议
这部分你可以直接参考:《八千里路云和月 | 从零到大数据专家学习路径指南》的面试部分。
校招面试
一个校招的同学在面试这些中大公司的时候会进行评级,例如S/A/B/C这样的分级。
那么影响一个校招同学评级的要素有哪些?
第一,硬条件、学校、学历。
这部分不必多言,大家应该都懂。学校的牌子是你拿到一面的最好的招牌。
第二,比赛/荣誉/论文等
这部分主要是在学校的一些论文、获奖、比赛等。这部分需要你突出你在学校的科研能力,这是证明你过去能力的最直接证明。
第三,计算机基础
计算机基础包含计算机专业的基本主要的课程,也就是数据结构,计算机组成原理,计算机网络,操作系统。
此外你还需要刷上一些Leetcode题目保证自己的算法题能写出来。
还有就是你的语言基础,如果你是做OLAP数据库底层,那么可能要求C和C++基础,如果你去做Flink这样的中间件平台或者业务开发,那么就是Java的基础。懂了啵?
第四,项目经验
这部分主要是各位在学校实验室跟导师做的项目,以及你的实习经历。一份名企的实习经历是非常加分的。
大家根据自己的情况去做一些实际项目吧。能实习最好,其次在实验室写一些项目也可以,最后实在不行就在B站找上几个学一下,参考:《我在B站读大学,大数据专业》。
社招同学看这里
要有信心
2021年是非常糟糕的一年。比如让大家看起来非常焦虑的: 《互联网最坏的时代可能真的来了》。
但是大家应该有信心,毕竟你们已经工作很多年了。如果你不是混日子,那么技术积累应该都是有的。在过去几年里,是技术爆炸的几年。很多工作多年的朋友应该都经历过从0到1开发某个平台或者项目的经历。
这样的机会,刚参加工作的同学们可能再也没有这样的机会了。
起码从2019年到2021年这近3年时间里,大数据方向应该是走向成熟的3年。很多公司都经历了一整套大数据解决方案的开发和上线过程。
这3年时间,大数据方向也经历了和后端一样的发展路线。很多很高深难懂的技术被封装的简单易用,大数据开发方向SQL化就是证明。
如果你有之前的技术沉淀,那么换个工作对你来说都不是问题。
随着大数据领域成熟度越来越高,开发门槛也会变得越来越低。相应技术沉淀机会越来越少了。使得新进入的同学更容易变成螺丝钉,这是一个非常可怕的事实。
要讲方法
工作多年的老兵在跳槽的时候要懂得 「错位竞争」。应届生和新手的优势在于年轻、有活力,但是缺乏技术沉淀。
尤其是这两年刚刚进入的新人,在和工作5年+的老员工竞争的时候会处于明显劣势。前提是老工程师们在过去的几年要有真真正正的技术和业务壁垒。
在国内几家头部企业遭到重锤后,还有很多三线四线,不知名的企业在进行新IT改造。他们需要那些工作多年的老工程师去从0搭建整套的大数据技术体系,老工程师的技术沉淀、需求分析和跨部门协同能力相比年轻的工程师们有绝对的优势。而这样的机会给到年轻人大概率是干不了的。
第六部分:其他
可以参考:《个人思考和总结》。
在公号栏目中可以找到,如下图所示:
这部分内容包含了我个人在工作上的一些思考和总结,包含了对于业务和管理的理解、工作中的一些思考,整个互联网行业发展的一些个人看法。
涉及到的内容比较多,而且很多文章的阅读超过平均水平,也能看出来大家的认可。
如果你需要一些对整个行业的发展有一些认知和外部输入,可以作为参考。但是仅仅是个人看法,也仅供参考。
总结
整篇文章行文1.5万字,不包含为展开的引用和连接。相比之前的两版内容新增了很多关于未来方向的内容。
时代在发展,旧的技术在消亡,例如Hadoop体系中一些不在活跃的项目,Mesos、Storm这样的框架。新的领域层出不穷,云原生(Cloud Native)、隐私计算、湖仓一体、IoT等等。
国内互联网领域持续被整治,各大公司麻烦不断。但是2021年也有非常多的新兴公司脱颖而出走近大家的视野,例如DataBricks、ClickHouse,Inc、Stream Native等等。
大数据技术体系完成了1.0版本的建设,正在向2.0方向演进和迭代。
技术上将会做到更好的技术分层和更强的专业化。数据平台赛道价值显性化,也带来大量投资和创业机会。
你准备好了吗?
Hi,我是王知无,一个大数据领域的原创作者。
放心关注我,获取更多行业的一手消息。