文章目录
传送门:
- 视频地址:黑马程序员Spark全套视频教程
- 1.PySpark基础入门(一)
- 2.PySpark基础入门(二)
- 3.PySpark核心编程(一)
- 4.PySpark核心编程(二)
- 5.PySaprk——SparkSQL学习(一)
- 6.PySaprk——SparkSQL学习(二)
- 7.Spark综合案例——零售业务统计分析
- 8. Spark3新特性及核心概念(背)
一.Spark框架简述
1.Spark是什么
定义:Apache Spark是用于大规模数据(large-scala data)处理的统一(unified)分析引擎(数据处理分析引擎)。
RDD 是一种分布式内存抽象,其使得程序员能够在大规模集群中做内存运算,并且有一定的容错方式。而这也
是整个 Spark 的核心数据结构,Spark 整个平台都围绕着RDD进行。
"分而治之"的思想,对数据的处理与计算,都是进行分区,对数据进行分布式任务分配来完成大规模数据集的计算。
Spark 借鉴了 MapReduce 思想发展而来,保留了其分布式并行计算的优点并改进了其明显的缺陷,让中间数据存储在内存中提高了运行速度、并提供丰富的操作数据的API提高了开发速度。
Spark是一款分布式内存计算的统一分析引擎。其特点就是对任意类型的数据进行自定义计算。Spark可以计算:结构化、半结构化、非结构化等各种类型的数据结构,同时也支持使用Python、Java、Scala、R以及SQL语言去开发应用程序计算数据。Spark的适用面非常广泛,所以,被称之为 统一的(适用面广)的分析引擎(数据处理)。
2.Spark与Hadoop的对比
Spark与Hadoop技术栈的对比:
Spark解决什么问题? 海量数据的计算,可以进行离线批处理和实时流计算
注:
线程是CPU的基本调度单位
一个进程一般包含多个线程, 一个进程下的多个线程共享进程的资源
不同进程之间的线程相互不可见
线程不能独立执行
一个线程可以创建和撤销另外一个线程
尽管Spark相对于Hadoop而言具有较大优势,但Spark并不能完全替代Hadoop
- 在计算层面,Spark相比较MR(MapReduce)有巨大的性能优势,但至今仍有许多计算工具基于MR构架,比如非常成熟的Hive
- Spark仅做计算,而Hadoop生态圈不仅有计算(MR)也有存储(HDFS)和资源管理调度(YARN),HDFS和YARN仍是许多大数据体系的核心架构。
Spark与Hadoop融合在一起,形成HDFS+YARN+Spark。仍然需要使用Hadoop中的存储(HDFS)和资源管理调度(YARN)。
3.Spark的四大特点
-
运行速度快
由于Apache Spark支持内存计算,并且通过DAG(有向无环图)执行引擎支持无环数据流,所以官方宣称其在内存中的运算速度要比Hadoop的MapReduce快100倍,在硬盘中要快10倍。Spark处理数据与MapReduce处理数据相比,有如下两个不同点:
- 其一、Spark处理数据时,可以将中间处理结果数据存储到内存中;
- 其二、Spark 提供了非常丰富的算子(API), 可以做到复杂任务在一个Spark 程序中完成。
-
易于使用
Spark支持了包括 Java、Scala、Python 、R和SQL语言在内的多种语言 -
通用性强
在 Spark 的基础上,Spark 还提供了包括Spark SQL、Spark Streaming、MLib 及GraphX在内的多个工具库,我们可以在一个应用中无缝地使用这些工具库。
- Spark SQL模块:通过SQL语言来完成结构化数据处理
- Spark Streaming模块:完成流式数据处理
- MLib模块:完后机器学习的数据计算
- GraphX模块:完成图计算
-
多种模式运行
Spark 支持多种运行方式,包括在 Hadoop 和 Mesos 上,也支持 Standalone的独立运行模式,同时也可以运行在云Kubernetes——容器(Spark 2.3开始支持)上。对于数据源而言,Spark 支持从HDFS、HBase、Cassandra 及 Kafka 等多种途径获取数据。
- 文件系统: LocalFS、HDFS、Hive、text、parquet、orc、json、csv
- 数据库RDBMs: mysql、Orade、mssql
- NOSQL数据库:HBase、ES、Redisiv
- 消息对象:Kafka
4.Spark框架模块
整个Spark 框架模块包含: SparkCore、Spark SQL、SparkStreaming、Spark GraphX、Spark MLlib,而后四项的能力都是建立在核心引擎之上。
- Spark Core:Spark的核心,Spark核心功能均由Spark Core模块提供,是Spark运行的基础。Spark Core以RDD为数据抽象,提供Python、Java、Scala、R语言的API,可以编程进行海量离线数据批处理计算。
- SparkSQL:基于SparkCore之上,提供结构化数据的处理模块。SparkSQL支持以SQL语言对数据进行处理,SparhSQL本身针对离线计算场景。同时基于SparkSQL,Spark提供了StructuredStreaming模块,可以以SparkSQL为基础,进行数据的流式计算。
- SparkStreaming:以SparkCore为基础,提供数据的流式计算功能。
- MLlib:以SparkCore为基础,进行机器学习计算,内置了大量的机器学习库和API算法等。方便用户以分布式计算的模式进行机器学习计算。
- GraphX:以SparkCore为基础,进行图计算,提供了大量的图计算API,方便用于以分布式计算模式进行图计算。
5.Spark运行模式
Spark提供多种运行模式,包括:本地模式、集群模式和云模式
- 本地模式(单机)=> Local:用于开发和测试,下面的几个模式用于生产环境
本地模式就是以一个独立的进程,通过其内部的多个线程来模拟整个Spark运行时环境 - Standalone模式(集群)
Spark中的各个角色以独立进程的形式存在,并组成Spark集群环境 - Hadoop YARN模式(集群)
Spark中的各个角色运行在YARN的容器内部,并组成Spark集群环境 - Kubernetes模式(容器集群)
Spark中的各个角色运行在Kubernetes的容器内部,并组成Spark集群环境 - 云服务模式(运行在云平台上)
提供EMR框架(弹性MapReduce)
6.Spark的架构角色
注:正常情况下Executor是干活的角色,不过在特殊场景下(Local模式)Driver可以即管理又干活
二、Spark环境搭建
1.服务器环境
使用三台Linux虚拟机服务器来学习,三台虚拟机的功能分别是:
- node1: Master(HDFS\YARN\Spark) 和 Worker(HDFS\ YARN\ Spark)
- node2: Worker(HDFS\ YARN\ Spark)
- node3: Worker(HDFS\ YARN\ Spark) 和 Hive
我使用的是课程中提供的虚拟机,没有自己搭建
课程资料中提供了3台虚拟机的压缩包, 同学们解压后导入VMWare即可
软件存放在/export/software
组件安装存放/export/server/
2.Local模式基本原理
本质:启动一个JVM Process进程(一个进程里面有多个线程),执行任务Task。简单来讲,Local模式就是以一个独立进程配合其内部线程(每个线程模拟一个Spark服务器)来提供完成Spark运行时环境.。Local模式可以通过spark-shell/pyspark/spark-submit等来开启。
- Local模式可以限制模拟Spark集群环境的线程数量, 即Local[N] 或 Local[*]
- 其中N代表可以使用N个线程,每个线程拥有一个cpu core。如果不指定N,则默认是1个线程(该线程有1个core)。 通常Cpu有几个Core,就指定几个线程,最大化利用计算能力。
- 如果是local[*],则代表按照Cpu最多的Cores设置线程数。
Local下的角色分布:
- 资源管理:
Master:Local进程本身
Worker:Local进程本身 - 任务执行:
Driver:Local进程本身
Executor:不存在,没有独立的Executor角色, 由Local进程(也就是Driver)内的线程提供计算能力
Driver也算一种特殊的Executor, 只不过多数时候, 我们将Executor当做纯Worker对待, 这样和Driver好区分(一类是管理 一类是工人)
注意: Local模式只能运行一个Spark程序, 如果执行多个Spark程序, 那就是由多个相互独立的Local进程在执行
3.安装包下载
-
anaconda3
//安装文件夹 /root/anaconda3
每个虚拟机中有两个虚拟环境,pyspark_env可供课程使用
4.基础操作
- 解压spark文件并建立软链接
- 配置spark环境变量,
配置Spark由如下5个环境变量需要设置,这5个环境变量 都需要配置在:
/etc/profile
中- SPARK_HOME: 表示Spark安装路径在哪里
- PYSPARK_PYTHON: 表示Spark想运行Python程序, 那么去哪里找python执行器
- JAVA_HOME: 告知Spark Java在哪里
- HADOOP_CONF_DIR: 告知Spark Hadoop的配置文件在哪里
- HADOOP_HOME: 告知Spark Hadoop安装在哪里
PYSPARK_PYTHON和 JAVA_HOME 需要同样配置在:
/root/.bashrc
中
5.测试
spark中代码展示如下:
bin/pyspark:利用bin目录下的pyspark来进行测试
bin/pyspark 程序, 可以提供一个
交互式
的 Python解释器环境, 在这里面可以写普通python代码让spark执行
ctrl+d退出
这一步碰到一个错误:开启hadoop集群后,可以正常使用了
WEB UI (4040):
Spark的任务在运行后,会在Driver所在机器绑定到4040端口,提供当前任务的监控页面供查看。如果4040端口被占用, 会顺延到4041 … 4042…
输入:服务器ip:4040
即可打开:
打开监控页面后, 可以发现 在程序内仅有一个Driver。因为我们是Local模式, Driver即管理 又干活。
spark-submit
利用bin目录下的spark-submit来提交写好的代码到spark集群中运行
总结:pyspark/spark-shell/spark-submit 对比
三、Standalone环境搭建
1.Standalone 架构
Standalone模式是Spark自带的一种集群模式,Standalone模式是真实地在多个机器之间搭建Spark集群的环境,完全可以利用该模式搭建多机器集群,用于实际的大数据处理。StandAlone 是完整的Spark运行环境,其中: