既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
- 非结构化数据:图片视频
- 半结构化数据:日志数据
- 结构化数据:关系数据
- 数据采集
数据采集常用的是Flume
,但是考虑数据流量过大,我们通常使用Kafka做缓冲。
数据采集肯定是一端进数据
,一端出数据
,找了官方的一张图,结构如下:
Source端
是数据的入口,Sink端
是数据的出口。中间的Channel是进行数据的清理的管道。
上面分析中我们提到过,当数据量过大的时候,我们通常会对数据进行缓冲,保证数据的进出适配
。我们可以使用Kafka这个组件,Kafka是一个非常优秀的数据队列与缓冲组件。
- 数据存储
既然是大数据,那肯定不是一台服务器能够解决的,肯定是分布式存储HDFS,在大数据刚出来,就有人很多人认为大数据=hadoop,可见当时的hadoop的火热程度,实时上,这是因为hadoop同时具备了数据的存储与计算
。Hadoop的框架最核心的设计就是:HDFS
和MapReduce
。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。
- 数据计算
除了Hadoop自身的计算组件,有一款专门进行数据内存计算的组件–Spark,它可以同时提供离线计算
和在线计算
。
- 数据应用
数据的应用就比较广泛了,我们可以把处理好的数据放入MySQL,使用Java EE
那套技术根据业务的需要具体操作即可;举一个简单的例子,我们可以把处理好的数据可视化(Echarts、D3),这也算是发挥它的价值。
上面仅仅是粗略的介绍,并没有详细的介绍每个步骤所对应的技术,要想学好大数据,自己必须要规划一个清晰的学习路线
,坚持下去。下面,我们就聊一聊如何学习大数据,这个路线适合任何阶段的学习者。
大数据技术路线
大数据的技术路线还是非常庞大的,在这里,我要特别感谢尚硅谷韩顺平老师提供的技术路线,基本上包含了:入门
–>进阶
–>精通
–>成神
。
话不多说,先看下总体学习路线:
路线总体与分支
上面这张思维导图包含了我们学习大数据路线所需要的全部知识,可能除了计算机基础
、JAVA基础
,对其它技术体系可能有一点点感到迷茫,不要慌下面我们一一分析:
路线分支庖丁解牛
计算机基础
按照正常情况下,如果你想当个普通的程序员,这部分内容其实不学也行,因为技术的天花板很低,当达到一定水平后,就会原地踏步,停滞不前。但是如果你想在这个领域有所建树,发光发热,就得好好学习这些基础知识,这是为啥呢?你想想看,在这个文科可以使用Python来进行数据分析的时代,不搞点技能怎么傍身。当然,这是次要的,最主要的原因是当我们把某个领域学的一定阶段的时候,这时你接触的就会越接近于底层
,举个例子:当你学习Java中的内存管理、线程、进程和锁的知识点时,如果你不了解操作系统的知识,理解起来还是挺难的。
下面,我们介绍下具体学习那些基础,这里只列出书籍,每个人根据自己的学习情况具体学习即可
- 计算机网络
- 操作系统
- 数据结构与算法
- 计算机组成原理
- 离散数学及其应用
- 编译原理
JAVA基础路线
学习大数据是必须要学JAVA的,为什么这么说呢?学习大数据,我们或多或少都听说过Hadoop
,很多同学甚至将Hadoop和大数据画了等号,可见Hadoop是必须要学的,而且我们知道Hadoop和其他大数据处理技术很多的部分都是由Java语言来实现的,所以在学习Hadoop的一个前提条件,就是掌握Java语言
。
那么,我们应该学习Java的那些内容呢,别单担心,贴心的Simon郎
为你画了张思维导图。
JAVA EE核心路线
作为一个大数据工程师,理论上讲,JAVA EE的技术不是必须的
,为什么说呢,你想啊,JAVA EE开发是Java语言中的一个应用领域
,比如开发WEB程序;大数据开发也是Java语言中的一个应用领域,比如开发海量数据处理程序。两者就好比是学习了中文,一个用于写段子,一个英语写诗,两者没太大关系啊,都要依赖语言(Java)。
但是问题来了,既然两者都是Java语言的应用,那么为什么大数据路线中还要学习JAVA EE呢,我的理由很简单,大数据处理的数据是供给具体的业务使用的,如果你一点都不懂,说的过去么?再说了,JAVA EE中有很多框架的思想都是挺值得借鉴的,所以,我觉得,学习大数据路线上适当的学习JAVA EE,会有着不错的效果,至于具体学习到什么程度,自己可以把握。
Hadoop生态体系学习路线
学习大数据肯定绕不开Hadoop
,可见Hadoop的地位是多么重要,但是对于接触大数据时间较短或者尚未接触过大数据的同学来说,如果问他们我们应该学习Hadoop的那些内容,分布式存储
和计算
一定会说出来,但是仅仅这两个概念还是太笼统了,那么我们应该怎样把控Hadoop的学习呢,莫慌,且听Simon郎
慢慢道来。
话不多说,先看一张Hadoop生态体系
的脑图。
妈耶,咋那么多内容啊,快把我干懵逼了。千万别懵,虽然看起来很多,但是可以用一句总结:Hadoop是一个分布式计算开源框架
,提供了一个分布式系统
子项目(HDFS)和支持MapReduce分布式计算软件架构
。既然脑图的内容有点多,咱们就介绍几个在Hadoop家组中占有地位较高的几个组件,如果小伙伴对其它组件感兴趣,可以自行查阅。
- Hive
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
- Hbase
Hbase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用Hbase技术可在廉价PC Server上搭建起大规模结构化存储集群。
- Sqoop
Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中
- Zookeeper
Zookeeper 是一个为分布式应用所设计的分布的、开源的协调服务,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。
- Ambari
Ambari是一种基于Web的工具,支持Hadoop集群的供应、管理和监控。
- Oozie
Oozie是一个工作流引擎服务器, 用于管理和协调运行在Hadoop平台上(HDFS、Pig和MapReduce)的任务。
- Hue
Hue是一个基于WEB的监控和管理系统,实现对HDFS,MapReduce/YARN, HBase, Hive, Pig的web化操作和管理。
…
Hadoop生态体系先介绍这么多,对其它内容感兴趣的同学自行补充
Spark生态体系学习路线
学习完Hadoop后,稍作调整后,就可以学习Spark了,这时,可能就有同学会问,Spark和Hadoop有啥区别呢?我们为什么还要学Spark呢?要学习Spark那些内容呢?
别慌,咱么一一解决
1. Spark和Hadoop有什么区别?
简单理解,Spark是在Hadoop基础上的改进
,是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架
,Spark基于map reduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是中间输出和结果可以保存在内存中
,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的map reduce的算法。
2.为什么要学Spark
基于MapReduce的计算引擎通常会将中间结果输出到磁盘上,进行存储和容错。出于任务管道承接的考虑,当一些查询翻译到MapReduce任务时,往往会产生多个Stage,而这些串联的Stage又依赖于底层文件系统(如HDFS)来存储每一个Stage的输出结果。
Spark是MapReduce的替代方案,而且兼容HDFS、Hive,可融入Hadoop的生态系统,以弥补MapReduce的不足。
要学习Spark的那些内容呢?
首先要学的就是Scala
,因为Spark就是Scala写的,所以要好好学,这对于我们分析源码非常有帮助。这时你又有疑问,不是已经学了Java了么,怎么还学Scala,你个骗子!
别骂我,但是Scala是基于Java写的,难道学习Java还忽悠你了不成!
其次要学的就是Spark的基础知识,先把地基打牢,才能更上一层楼么。学完Spark后,就可以着手学习较有挑战性的SparkCore
、SparkSQL
、SparkStreaming
、MLib
- SparkCore
SparkCore将分布式数据抽象为弹性分布式数据集(RDD),实现了应用任务调度、RPC、序列化和压缩,并为运行在其上的上层组件提供API。
- SparkSQL
SparkSQL 是Spark来操作结构化数据的程序包,可以让我使用SQL语句的方式来查询数据,Spark支持 多种数据源,包含Hive表,parquest以及JSON等内容。
- SparkStreaming
SparkStreaming是Spark提供的实时数据进行流式计算的组件。
- MLlib
MLlib提供常用机器学习算法的实现库。
Flink生态体系学习路线
马上2021年了,如果学习大数据还不知道flink就有点过分了,现在各个大厂都在尝试着使用flink,那么flink到底是什么
呢?
先看看官方的定义
:flink是一个框架和分布式的处理引擎
,用于对无界和有界数据流进行有状态的计算
。
定义明确了flink的作用是计算
,想一想,我们在上面已经介绍了Hadoop中的MapReduce和Spark都可以用于计算,怎么还要学,它的优势是什么呢?
其实蛮难的理解的,我查了很多的资料,我发现云栖社区的蒋晓伟老师的说的就挺明白,问题和回答的原话如下:
- Q1:相比Spark、Hadoop、Storm等,是什么样的场景需求让阿里搜索团队选择了Flink?
蒋晓伟:首先我们希望有个流计算和批处理的一体化处理方案。Spark和Flink都具有流和批处理能力,但是他们的做法是相反的。**Spark Streaming是把流转化成一个个小的批来处理,这种方案的一个问题是我们需要的延迟越低,额外开销占的比例就会越大,这导致了Spark Streaming很难做到秒级甚至亚秒级的延迟。Flink是把批当作一种有限的流,这种做法的一个特点是在流和批共享大部分代码的同时还能够保留批处理特有的一系列的优化。**因为这个原因,如果要用一套引擎来解决流和批处理,那就必须以流处理为基础,所以我们决定先选择一个优秀的流处理引擎。从功能上流处理可以分为无状态的和有状态两种。在流处理的框架里引入状态管理大大提升了系统的表达能力,让用户能够很方便地实现复杂的处理逻辑,是流处理在功能上的一个飞跃。流处理引擎对一致性的支持可以分为:best effort,at least once 和 exactly once。Exactly once的语义才能真正保证完全的一致性,Flink采用的架构比较优雅地实现了exactly once的有状态流处理。另外在保证了一致性的前提下Flink在性能上也是相当优秀的。总结一下,我们觉得在流处理方面Flink在功能,延迟,一致性和性能上综合来看是目前社区最优秀的。所以我们决定采用它来实现流和批的一体化方案。最后,还有一个很重要的原因是Flink有一个比较活跃的社区。
- Q2:如何看待Flink、Spark、Hadoop、Storm等技术发展和不同场景下的优势对比?比如与Spark相反,Flink把批处理化作流处理,这种方式在使用时是否有什么限制?
蒋晓伟:大数据是从批处理开始的,所以很多系统都是从批处理做起,包括Spark。在批处理上Spark有着较深的积累,是一个比较优秀的系统。随着技术的发展,很多原来只有批处理的业务都有了实时的需求,流处理将会变得越来越重要,甚至成为大数据处理的主要场景。**Flink把批当作流来处理有个很重要的优点是如果我们在流中引入一个blocking的算子,我们还能接着做批处理特有的优化,这个是以流处理为基础的计算引擎的一大优势。**所以我认为在架构上这种设计在批处理上是可以做到最优的,而且比传统的做法还有一些特别的优势,当然工程上的实现也很重要。
看了上面两个问答,大家应该对为什么使用flink有个比较宏观的了解,那我们具体学习什么呢,我觉得啊,学它的不同点就好啊
技术的学习是建立在职业规划上的,那么作为还未入门的大数据从业者,应该怎么规划自己呢?
大数据职业规划
据我了解,目前市面存在的大数据的岗位有以下几种:
- 大数据分析师
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
15661577450)]
[外链图片转存中…(img-aWZxinIM-1715661577450)]
[外链图片转存中…(img-3SN8enIC-1715661577450)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新