大数据开发学习路线
本文主要是对于大数据行业前景的一个调研,以及选择大数据开发方向的一个学习路径和方案的调研报告。
大数据时代
本小节主要参考骆俊武老师的AI 时代,还不了解大数据?一文。
大数据的发展史
「大数据」已经发展三十余年,其中经历5个阶段。接下来,我们主要以分析每个阶段要解决的问题是什么,又存在的不足来展开叙述。
5个阶段职业对比分析:
发展阶段 | 解决问题 |
---|---|
1991年-数据仓库 | 解决传统数据库只能单一业务数据进行操作,而不能多个业务数据进行聚合操作数据分析的难题。 |
2005年-Hadoop | 解决数据规模越来越大,数据类型越来越复杂的问题。相对于传统数仓的优势:1)完全分布式,满足存储要求,2)弱化数据结构,满足异构数据分析。 |
2010年-数据湖 | 基于Hadoop构建数据湖,将数据作为企业的核心资产。 |
201X年-大数据平台 | 基于Paas思想,提高了数据研发效率 |
2016年-数据中台 | 避免数据的重复计算,通过数据服务化,提高数据的共享能力,赋能业务。 |
大数据核心概念
什么是大数据?
大数据是一种海量的、高增长率的、多样化的信息资产,它需要新的存储和计算模式才能具有更强的决策力、流程优化能力。
大数据的4个特征:
- Volume:海量的数据规模,数据体量达到PB甚至EB级别。
- Variety:异构的数据类型,不仅仅包含结构化的数据、还包括半结构化和非结构化数据。
- Velocity:快速的数据流转,数据的产生和处理速度非常快。
- Value:价值密度低,有价值的数据占比很小,需要用到人工智能等方法去挖掘新知识。
什么是数据仓库?
数据仓库是来自一个或多个不同源集成数据的中央存储库,主要用于为商业决策提供数据支撑的数据集合
数据仓库具有以下特点:
- 面向主题的:表示按照主题或者业务场景组织数据。
- 集成的:从多个异构数据源采集数据,进行抽取、加工、集成。
- 随时间变化的:关键数据需要标记时间属性。
- 相对稳定的:极少进行数据删除和修改,而只是进行数据新增。
传统数据仓库和新一代数据仓库
认识大数据生态
大数据通用平台架构
以下展示的是大数据几十种技术中最为通用的平台架构,我们学习的一定阶段就是需要掌握其中的技术搭建一个这样的大数据平台。
大数据通用处理流程
主要包含以下几个步骤:
- 数据采集:这是大数据处理的第一步,数据来源主要是两类,第一类是各个业务系统的关系数据库,通过Sqoop或者Cannal等工具进行定时抽取或者实时同步;第二类是各种埋点日志,通过Flume进行实时收集。
- 数据存储:收集到数据后,下一步便是将这些数据存储在HDFS中,实时日志流情况下则通过Kafka输出给后面的流式计算引擎。
- 数据分析:这一步是数据处理最核心的环节,包括离线处理和流处理两种方式,对应的计算引擎包括MapReduce、Spark、Flink等,处理完的结果会保存到已经提前设计好的数据仓库中,或者HBase、Redis、RDBMS等各种存储系统上。
- 数据应用:包括数据的可视化展现、业务决策、或者AI等各种数据应用场景。
大数据数仓通用架构
每一层的具体作用如下:
- ODS:源数据层,源表。
- DW:数据仓库层,包含维度表和事实表,通过对源表进行清洗后形成的数据宽表,比如:城市表、商品类目表、后端埋点明细表、前端埋点明细表、用户宽表、商品宽表。
- DM:数据集市层,对数据进行了轻粒度的汇总,由各业务方共建,比如:用户群分析表、交易全链路表。
- ADS:数据应用层,根据实际应用需求生成的各种数据表。
因此,上面的对应的架构架构图也对应了大数据开发最主要的两个方向(平台开发和数仓开发)。
大数据的就业方向
本节主要参考文章学大数据应该怎么入门,根据大数据各个阶段任务职责,区分对应了不同的就业岗位。
根据上图,我们可以了解到整个应用领域大数据技术所处于的一个位置。大数据技术往往都是对业务系统进行数据采集,然后创建数据仓库,为后续的数据分析以及人工智能等环节提供数据支撑。
因此,我们也可以从这里看出了大数据技术在企业中占据的何种重要的地位。然后聚焦大数据技术中间的具体环节,我们将大数据技术岗位划分为ELT工程师、大数据开发工程师、数据分析工程师。
数据仓库开发工程师
工作内容:以写SQL为主,搭建离线和实时数仓
离线数仓需要重点掌握的技能:
- Hadoop(HDFS,MapReduce,YARN)
- Hive(重点,包括 hive 底层原理,hive SQL 及调优)
- Spark(Spark 会用及了解底层原理)
- Oozie(调度工具,会用即可)
- 离线数仓建设(搭建数仓,数仓建模规范)
- 维度建模(建模方式常用的有范式建模和维度建模,重点关注维度建模)
实时数仓需要重点掌握的技能:
- Hadoop(这是大数据基础,不管离线和实时都必须掌握)
- Kafka(重点,大数据领域中算是唯一的消息队列)
- Flink(重中之重,这个不用说了,实时计算框架中绝对王者)
- HBase(会使用,了解底层原理)
- Druid(会用,了解底层原理)
- 实时数仓架构(两种数仓架构:Lambda 架构和 Kappa 架构)
大数据开发工程师
工作内容:第一类以编写基于Hadoop、Spark、Flink应用程序为主,第二类针对大数据系统本身的开发(开源框架扩展开发,数据中台开发)
工作特点:这个方向师大数据领域企业岗位最多的方向
掌握技能:
-
语言:Java 和 Scala(语言以这两种为主,需要重点掌握)
-
Linux(需要对 Linux 有一定的理解)
-
Hadoop(需理解底层,能看懂源码)
-
Hive(会使用,能进行二次开发)
-
Spark(能进行开发。对源码有了解)
-
Kafka(会使用,理解底层原理)
-
Flink(能进行开发。对源码有了解)
-
HBase(理解底层原理)
大数据开发工程师,其实技能和数仓开发工程师有很多重叠。因此,通常这两个岗位都不明确区分,通常前者也需要负责后者的工作。
数据分析工程师
工作内容 :根据数据和业务情况,分析得出结论、制定业务策略或者建立模型,创造新的业务价值并支持业务高效运转。
掌握技能:
-
数学知识(数学知识是数据分析师的基础知识,需要掌握统计学、线性代数等课程)
-
编程语言(需要掌握 Python、R语言)
-
分析工具(Excel是必须的,还需要掌握 Tableau 等可视化工具)
-
数据敏感性(对数据要有一定的敏感性,看见数据就能想到它的用处,能带来哪些价值)
ELT工程师
工作内容:ETL 工程师是对接业务和数据的交接点,所以需要处理上下游的关系。
工作特点:对接上下游,因此需要较强的沟通交流的能力。
掌握技能:
-
语言:Java/Python(会基础)
-
Shell 脚本(需要对 shell 较为熟悉)
-
Linux(会用基本命令)
-
Kettle(需要掌握)
-
Sqoop(会用)
-
Flume(会用)
-
MySQL(熟悉)
-
Hive(熟悉)
-
HDFS(熟悉)
-
Oozie(任务调度框架会用其中一个即可,其他如 azkaban,airflow)
由于本人的选择大数据开发方向,因此,后续都在阐述大数据开发方向的相关的内容。为了不浪费读者的宝贵时间,选择其他方向的读到这里就可以了。
为什么选择大数据开发?
本节主要是讲,为什么的选择的大数据开发方向?包括了和Java后端方向的比较,记忆大数据行业发展调研,还有国家相关的政策调研。
Java后端开发 VS 大数据开发
下面根据几方面,罗结了Java后端开发和大数据开发上面的异同点
分类 | Java后端开发 | 大数据开发 |
---|---|---|
描述 | 抽象各种业务数据到数据库进行一系列的增删改查操作 | 整合不同源数据并对数据进行各种计算 |
领域难点 | 1)对复杂业务的理解 2)对线上服务的三高特性 |
1)数据及时性 2)数据准确性 3)数据稳定性和容灾 |
行业现状 | 1)提供的岗位多,从业者也众多 2)全栈工程师成为趋势,增加了竞争压力 |
1)人工智能缺口巨大,人工智能依赖大数据支撑 2)目前的岗位和从业者较少,竞争压力相对较小 |
领域发展 | 技术强的做架构师,技术一般的转行非技术岗 | 重技术非业务,技术生涯可能更长久 |
为什么选择大数据开发?
除上述图表的一个客观的比较,接下来要谈一谈本人选择从后端开发转向大数据开发方向的一个主观感受。
1)未来属于DATA时代
现在我们使用的数据,很多时候就是一些使用C端APP或者网站的数据。目前的物联网还没有到普及的时候,我们可以畅想未来万物互联的时代,那将会产生多少的数据,那个时候肯定是DATA的时代,那么大数据相关的技术和岗位在目前看来还属于一片蓝海。每个企业,都需要建立自己的大数据系统。
2)职业发展上面的规划
其实选择哪个方向并不是很重要,重要的是对于职业发展上面的帮助。就方向来看,前端如果不转全栈的话,职业寿命和上线都是最低的;后端相对要高一点,可是大部分工作都是对于业务的CRUD,CRUD很无聊。然后大数据技术,跟技术接触最多,可以更长的延长职业生涯。
3)竞争压力相对较小
通过中国软件行业协会发布的2020年IT供需现状研究报告,我们可以看到以下一些供需现状问题:
- 全栈开发成为趋势:由于云服务和大数据发展推动产品迭代速度加快,技术团队小型化、敏捷化,也要求程序员担任更多的技术角色,传统前后端程序猿的界限逐渐模糊,前端程序员需要掌握一定的后端技术成为趋势,全栈程序员的需求大幅增加。
- 人工智能方向存在大量人才缺口:人工智能方向存在一定的缺口是相对于美国同样的市场来评判的,人工智能依赖于数据支撑,大数据也是未来发展的方向之一。
- 后端开发工程师人数增长趋势放缓:由预测图可见,从2019年149万到2023年增长并不会很大。我们也可据此预估以后的该岗位的竞争程度。
4)就业方向选择多
1)数据仓库开发处于技术与业务之间
2)数据平台开发会处于技术底层
3)数据分析会离业务最近
如何学习大数据开发?
本小节主要介绍大数据开发的生态链,汇总一些相关的学习资料,以及如何制定切实可行的自学计划。
由于目前的大数据岗位确实也不是很多。大数据生态也不过都是Java语言环境上面的一个方向,和Web开发其实是一样的,知识方向不同而已。因此,本学习路线的制定会兼顾Java基础,为后面如果大数据就业确实比较难做好走Java后端开发的准备。
基础篇
1、Java基础
-
《Java核心技术卷I》
-
《Java8实战》(Java8特性的应用)
-
常见容器源码分析,结合常见面试题抓重点
2、JAVA虚拟机
- 《深入理解Java虚拟机》(全文精读,多次翻看,重点2、3、7章)
- 常见虚拟机排错与调优技巧
3、高并发
- 《Java并发编程之美》(分析源码的书籍,建议全文精读,对于之后分析JUC包下的源码帮助很大)
- 《Java多线程编程实战指南(核心篇)》(主要讲解高并发一些思想和设计,最后两张关于内存屏障的部分建议精读)
- JUC源码剖析,包括
ConcurrentHashMap
,AbstracQueuedSynchronizer
、ConditionObejct
、CopyOnWriteArrayList
、线程池原理、阻塞队列源码(重点把AQS原理和ConditionObject
搞明白)
3、计算机基础
- 操作系统
- 计算机网络
4、数据库
- 《MySQL必知必会》(三四天可看完)
- 刷几十道牛客SQL题库
- 《MySQL技术内幕:InnoDB存储引擎》
5、算法和数据结构
- 《算法》常见的数据结构和算法
- 《剑指offer》和leetcode
大数据框架篇
框架分类
日志收集框架:Flume、Logstash、Filebeat
分布式文件存储系统:Hadoop HDFS
数据库系统:Mongodb、HBase
分布式计算框架:
- 批处理框架:Hadoop MapReduce
- 流处理框架:Storm
- 混合处理框架:Spark、Flink
查询分析框架:Hive 、Spark SQL 、Flink SQL、 Pig、Phoenix
集群资源管理器:Hadoop YARN
分布式协调服务:Zookeeper
数据迁移工具:Sqoop
任务调度框架:Azkaban、Oozie
集群部署和监控:Ambari、Cloudera Manager
同一类型框架只需要掌握一个即可。要想了解详细的具体框架介绍可以参考文章Hadoop Ecosystem: Hadoop Tools for Crunching Big Data。
学习路线
-
第一阶段:Hadoop(28h) -> zookeeper(6h)-> hive(21h) -> flume(7h) && sqoop -> azkaban(3h) && oozie -> kafka(13h) -> 数仓建模理论+电商数仓实践 (63h)
-
第二阶段:hbase(9h) -> redis -> elk() -> scala(25h) -> spark(31h) -> kylin(4h) -> flink(39h) -> 实时数仓项目
1、Hadoop原理
- 《hadoop 权威指南 (第四版)》 2017 年
- 《Hadoop技术内幕》
- 《Hive 编程指南》
- 主要掌握Mapreduce、YARN、HBASE、HDFS、Hvide的基本原理
2、消息队列
- 《Kafka 权威指南》 2017 年
- 这一块在Java后端中也是需要的,好好学也可以用到Java岗位上面。
3、流计算
- 《Spark 技术内幕 深入解析 Spark 内核架构设计与实现原理》 2015 年
- 《Spark.The.Definitive.Guide》 2018 年
- 理解计算调度原理、容错机制、语义等方面
4、分布式协议
- 《从 Paxos 到 Zookeeper 分布式一致性原理与实践》 2015 年
- 学习Raft协议,将这些进行总结,并对Zookeeper进行深入学习
时间安排
这里的时间安排主要是针对应届生。
学习篇:花3-6个月学习大数据相关知识点,中间多刷算法和顺便刷点Sql题。有时间的话,推荐两段以上的实习。
实习篇
-
第一段实习(研二|大三第一学期)
- 时间点:8、9月份-1、2月份
- 原因:大量实习生返校,可以以较低成本进入公司
- 目的:积累项目经验,为春招拿到更好offer做铺垫
-
第二段实习(研二|大三第二学期)
- 时间点:3、4月份-6、7月份
- 原因:好的秋招实习会对拿正式offer有很大帮助
直接在实习公司秋招答辩转正
拿到春招offer,假如没有去实习,部分公司可以在提前批的时候直通终面
大厂背景会在秋招面试的时候发挥出比较大的作用,尤其筛选简历 - 目的:检验所学成果,为秋招正式offer做铺垫
注意秋招和提前批的时间线,尽量抓入提前批的机会。
秋招提前批:6月下旬到8月份
秋招:8月上旬开始
参考资料
- AI 时代,还不了解大数据?: https://mp.weixin.qq.com/s/ky-a4Me6wHvT9zvFFVLWnA
- 数据仓库_wiki: https://zh.wikipedia.org/zh-cn/資料倉儲
- 学大数据应该怎么入门 -- 大数据学习之路: https://xie.infoq.cn/article/9bc68ee9416fcb4d2d6db700f
- Java开发工程师与大数据开发工程师有何区别?: https://www.bilibili.com/read/cv11513661
- 2020 年度软件和信息服务技术人才供需现状研究报告: http://www.csia-jpw.com/upload/news/file/20210811/20210811163343_7395.pdf
- 你为什么从后端开发(JAVA/golang)转到大数据开发(Hadoop/Spark)?: https://www.zhihu.com/question/297875175
- 大数据学习路线:https://github.com/heibaiying/BigData-Notes/blob/master/notes/大数据学习路线.md
- Hadoop Ecosystem: Hadoop Tools for Crunching Big Data:https://www.edureka.co/blog/hadoop-ecosystem
- 转岗前景分析:人工智能、大数据开发是未来高薪的趋势?: https://mp.weixin.qq.com/s?__biz=MzA5MzI3NjE2MA==&mid=2650246550&idx=1&sn=c959969b37d2df1f1cd14e5e9f497797&chksm=88637cf9bf14f5ef69ba86fd748f0c2e3687f3652674e088f9db391ff486f63e0fa95416bb6d&scene=27#wechat_redirect