# 第1部分、离线分析(Batch Processing)
分布式协作服务框架Zookeeper
大数据基础框架Hadoop(HDFS、MapReduce和YARN)
大数据数仓框架Hive
大数据辅助框架:FLUME、SQOOP、Oozie和Hue
# 实战项目:亿品新零售
# 第2部分、内存分析(In-Memory Processing)
Apache Spark(Environment环境、Core、SQL等),属于批处理,相比MapReduce快
将分析数据封装到数据结构:RDD(分布式集合),类似Python中列表list,调用函数处理数据
# 实战项目:一站制造项目或保险项目
# 第3部分、实时存储
基于Key-Value内存数据Redis
大数据NoSQL海量数据库HBase
分布式消息队列Kafka
# 实战案例:陌陌综合案例
# 第4部分、实时计算
Apache Flink(实时流式计算框架,天猫双十一实时大屏):Environment、DataStream和Table API & SQL
数据流封装DataStream,调用函数处理
Table API和SQL批处理和流计算
# 实战项目:车联网项目或今日指数项目
Apache Spark课程学习,从4个大方面,基于Python语言编程开发(又称为
PySpark
)。
# 第1方面、Basic Environment(基础环境):
Spark 框架安装部署及开发运行,如何在本地模式和集群模式运行,使用spark-shell及PyCharm开发应用程序,测试及打包提交运行集群。
2天时间
# 第2方面、SparkCore(核心模块)
数据结构RDD,所有数据封装,分布式集合,处理数据直接调用方法(函数)
2天时间
# 第3方面、SparkSQL(交互式分析)
结构化数据处理分析,将数据封装在DataFrame,调用API或者使用SQL分析数据;
实际企业中使用最多的模块,提供丰富外部数据源
2天时间
# 第4方面、Spark in Action(实战演练)
基于Spark框架,进行海量数据分析处理,无论SQL语句还是DSL链式编程
以案例贯彻,知识巩固
1天时间
Spark第1天,主要学习配置Spark 基础环境
框架概述、快速入门(本地模式)和Standalone 集群
1、Spark 框架概述
2、Spark 快速入门
3、Standalone 集群
Apache Spark是一种闪电般的群集计算技术,专为快速计算而设计。它基于Hadoop MapReduce,它扩展了MapReduce模型以便将其用于更多类型的计算,其中包括交互式查询和流处理。Spark的主要特点是其 内存集群计算,可提高应用程序的处理速度。
Spark是Hadoop在2009年在UC Berkeley的Matei Zaharia的AMPLab中开发的子项目之一。它是在2010年根据BSD许可开放源代码。它于2013年捐赠给Apache软件基金会,2014年2月成为顶级Apache项目。
官网:http://spark.apache.org/
Apache Spark是一个开源的类似于Hadoop MapReduce的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Spark中的Job中间输出和结果可以保存在内存中,从而不再需要频繁读写磁盘,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的map reduce的算法。
Aapche Spark 是一种快速、通用、可扩展的大数据分析引擎,2009 年诞生于加州大学伯克利分校 AMPLab,2010 年开源, 2013年6月成为Apache孵化项目,2014年2月成为 Apache 顶级项目,用 Scala进行编写项目框架
。
从世界著名的开发者论坛,Stack Overflow的数据可以看出,2015年开始Spark每月的问题提交数量已经超越Hadoop,而2018年Spark Python版本的API PySpark每月的问题提交数量也已超过Hadoop。2019年排名Spark第一,PySpark第二;而十年的累计排名是Spark第一,PySpark第三。按照这个趋势发展下去,Spark和PySpark在未来很长一段时间内应该还会处于垄断地位。
从 GitHub 的数据中可以看到,在 Apache 的所有开源项目中,Spark 的关注度排名第 4(前三位分别是前端可视化框架ECharts、 RPC 服务框架 Dubbo 和可视化平台 Superset),在所有大数据处理技术中排名第 1。
github网站:https://github.com/search?o=desc&q=apache&s=stars&type=Repositories
Apache Spark是用于大规模数据(large-scala data)处理的统一(unified)分析引擎。
# 官方定义:轻量级lightning、快速fast、大数据和机器学习bigdata&ml、统一分析引擎
1、Apache Spark 官网:http://spark.apache.org/
2、Databricks 官网:https://databricks.com/spark/about
Aapche Spark 是一种快速、通用、可扩展的大数据分析引擎,基于内存分析数据,可以处理任何类型业务分析。
# 1、分析引擎(计算引擎)
分析处理数据,类似MapReduce框架(分布式处理框架,分而治之思想)
# 2、大规模数据
海量数据,数据很多,多数据源(存储在任何地方数据)
# 3、统一的分析引擎
离线分析
实时计算
机器学习
图形计算
科学计算
# 4、分布式并行计算
分而治之思想,与MapReduce计算思想完全一致
Spark具有运行速度快、易用性好、通用性强和随处运行等特点。http://spark.apache.org/
Spark编程支持5种语言:Java、Scala、Python、R及SQL
,满足各种分析需求,目前Python语言全球最多
Spark框架中,最核心要点:抽象,称为RDD
,相当于集合,比如列表List,存储数据
Spark程序无处不在运行【Runs Everywhere
】
1、数据存储
2、程序运行
Spark 编程代码,在何处执行,分析数据??
2014 年的时候Benchmark测试中,Spark 秒杀Hadoop,在使用十分之一计算资源的情况下,相同数据的排序上,Spark 比Map Reduce快3倍!
Spark处理数据与MapReduce处理数据相比,有如下两个不同点:
其一、Spark处理数据时,可以将中间处理结果数据存储到内存中;
其二、Spark Job调度以DAG(有向无环图)
方式,并且每个任务Task执行以线程(Thread)
方式,并不是像MapReduce以进程(Process)方式
执行。
Spark是一个通用的DAG引擎,使得用户能够在一个应用程序中描述复杂的逻辑,以便于优化整个数据流,并让不同计算阶段直接通过本地磁盘或内存交换数据,而不是像MapReduce那样需要通过HDFS。
下面左图是MapReduce生成的DAG数据流,右图是Spark生成的DAG数据流。
Spark 与 MapReduce 比较:Spark 为什么比MapReduce计算要快?
比较方面 | MapRedue 计算引擎 | Spark 计算引擎 |
---|---|---|
1、Job 程序结构 | 1 个Map Stage + 1个 Reduce Stage | 构架DAG图,多个Stage 多个Map Stage + 多个Redue Stage |
2、中间结果存储 | 本地磁盘Disk | 没有Shuffle时,存储内存Memory |
3、Task 运行方式 | 进程Process:MapTask 和Reduce Task | 线程Thread:Task,无需频繁启动和销毁 |
4、程序编程模型 | 直接读取文件数据,map + reduce | 文件数据封装:RDD,调用函数处理 |
整个Spark 框架模块包含:Spark Core
、 Spark SQL
、 Spark Streaming、 Spark GraphX、Spark MLlib,而后四项的能力都是建立在核心引擎之上 。
# 1、最核心,最基础
SparkCore【★★★★★】:RDD 数据结构,分布式集合,目前理解为列表list=[1,2,3,4]
# 2、四大公共模块
SparkSQL【★★★★★★★★★★】:使用最多模块,提供SQL和DSL编程分析数据
SparkStreaming:流式计算
GraphX:图形计算
MLlib:机器学习库
# 3、高级分析模块
PySpark:基于Python语言编程
SparkR:基于R语言编程
# 4、新的模块:从Spark 2.0开始
Structured Streaming:针对流式数据处理模块,官方推荐使用
5.1 每个MapReduce运行时(比如运行YARN集群),由2部分组成:
(1)MRAppMaster:MapReduce应用程序管理者,负责申请资源,调度任务执行和监控等;
(2)MapTask或ReducetTask:要么是处理数据任务MapTask,要么是聚合数据任务ReduceTask;
5.2 每个Spark 应用运行在集群上时,有2部分组成:Driver和Executors
(1)Driver Program
(2)Executors
Spark 框架编写的应用程序可以运行在本地模式(Local Mode)、集群模式(Cluster Mode)和云端(K8s),方便开发测试和生产部署。基于当前最新版本:Spark-3.1.2 版本学习。
Local Mode
,在当前操作系统,启动1个JVM 进程,指定最多同时运行Task任务数目,以线程Thead方式运行Task任务
当Spark程序运行在本地模式时,设置最多同时运行几个Task:--master local[K]
,其中K含义
Cluster Mode
以Standalone集群和YARN集群为例讲解
在实际项目中,Spark 应用程序运行最多集群模式:Hadoop YARN
。
# 1、Hadoop YARN集群模式(生产环境使用):
运行在 YARN 集群之上,由 YARN 负责资源管理,Spark 负责任务调度和计算
好处:计算资源按需伸缩,集群利用率高,共享底层存储,避免数据跨集群迁移。
# 2、Spark Standalone集群模式(开发测试及生成环境使用):
类似Hadoop YARN架构,典型的Mater/Slaves模式,使用Zookeeper搭建高可用,避免Master是有单点故障的。
# 3、 Apache Mesos集群模式(国内使用较少):
运行在 Mesos 资源管理器框架之上,由 Mesos负责资源管理,Spark 负责任务调度和计算。
Kubernetes
模式