一、Spark介绍
- Spark是一个分布式计算框架,和MapReduce的作用一样,完成数据的计算
- 与MapReduce的区别:
- Spark是基于内存计算,会将中间结果存放在内存,方便后续计算的使用; MR会将中间结果存储在磁盘上
- 内存的读写速度要比磁盘快的多,所以Spark的计算速度要比MR快
- Presto也是基于内存计算的,但Presto不适合海量数据处理,而且不能创建库表。Spark对海量数据在内存上的计算做了优化, 内存不足时会将结果存在在磁盘上,适合海量数据处理,并且可以进行库表创建
- Spark的计算任务是由线程完成的,MR的计算任务是由进程完成的
- 线程切换计算任务的速度比进程切换计算任务速度快
- Spark和MR的计算思想是一样的:分而治之
- Spark是由Scala语言编写完成的,Scala语言本质上是对Java语言的二次开发,底层还是要依赖Java的JVM
- Spark是Apche基金会下的顶级开源项目
二、Spark特性
- 高效性
- 计算速度快
- 基于内存计算
- 线程完成计算任务执行
- 计算速度快
- 易用性
- 支持多种语言开发(Python、Java、Scala、SQL、R),降低了学习难度
- 通用性
- 支持多种计算方式
- SQL计算(离线计算)
- 图计算
- 机器学习计算
- 流式数据计算(实时数仓中使用)
- 支持多种开发方式
- 交互式开发
- 脚本式开发
- 通过编写代码文件完成程序运行
- 支持多种计算方式
- 兼容性
- 支持三方工具接入
- 存储工具
- HDFS
- Kafka
- HBASE
- 资源调度
- Yarn
- Standalone(Spark自带的)
- 高可用
- zookeeper
- 存储工具
- 支持多种操作系统
- Linux
- Windows
- Mac
- 支持三方工具接入
三、Spark架构
四、Spark部署方式
- Local模式部署(本地模式部署,需要运维人员部署)
- 使用一台服务器进行部署,一般用于测试代码,在本地能运行成功的代码在集群下也能运行
- Cluster模式部署(集群模式部署,需要运维人员部署)
- 集群需要多台服务器
- 多台服务器的资源需要统一管理,使用资源调度服务
- Standalone
- Yarn
- 云服务(比较省事,可以直接使用)
- 使用云服务供应商提供的服务
- 数据可以存储在本地,用云服务连接本地数据源进行计算,在将结果保存在本地
- 只是使用云服务的计算资源
- 使用云服务供应商提供的服务
五、Local本地模式部署
使用单台服务器进行部署
公司中的部署流程:
运维人员
1、申请服务器(10台,内存128G,磁盘1T),需要发送邮件
2、编写部署文档 部署流程,部署服务器中对应的服务说明
3、开始部署
5-1 部署流程
Spark版本使用3.1.2版本
部署文档
本地模式
1.1 上传压缩包
将spark-3.1.2-bin-hadoop3.2.tar.gz压缩包到node1下的/export/server目录
1.2 解压压缩包
tar -zxvf /export/server/spark-3.1.2-bin-hadoop3.2.tgz -C /export/server/
1.3 修改权限
如果有权限问题,可以修改为root,方便学习时操作,实际中使用运维分配的用户和权限即可
chown -R root /export/server/spark-3.1.2-bin-hadoop3.2
chgrp -R root /export/server/spark-3.1.2-bin-hadoop3.2
1.4 修改文件名
mv /export/server/spark-3.1.2-bin-hadoop3.2 /export/server/spark
1.5 将spark添加到环境变量
echo 'export SPARK_HOME=/export/server/spark' >> /etc/profile
echo 'export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin' >> /etc/profile
source /etc/profile
1.6 启动测试
spark-shell
本地模式使用的是本地资源,不需要做其他配置,解压完成后就可以直接使用
六、Spark开发方式
6-1 交互式开发
- 通过指令进入交互终端进行开发
spark/bin目录下的命令
例如:spark-shell:使用Scala和Java进行开发
pyspark:使用Python进行开发
spark-sql:使用SQL进行开发
6-1-1 使用Python进行交互式开发
Spark依赖的Python版本是Python3,当前系统中没有Python3会报如下错误
Python3的安装可以借助Anaconda工具完成,Anaconda中自带Python3,同时还集成了各种Python的科学计算库(Pandas, Numpy等)
Anaconda安装
sh Anaconda3-2020.07-Linux-x86_64.sh
第一次直接按回车,阅读协议文档,跳过读取,直接按q
第二次输入yes,同意协议
第三次输入安装目录
第四次输入yes,初始化
如果安装过程输入错误了,不支持撤销,需要按ctrl+z退出,重新安装
pyspark模块安装
pip install pyspark=3.1.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
配置环境变量
echo 'export PYSPARK_PYTHON=/export/server/anaconda3/bin/python3' >> /etc/bashrc
source /etc/bashrc
执行编写的PySpark程序文件
为什么使用pyspark指令进入终端就可以直接输入pyspark命令,可以直接执行计算,而编写python脚本就需要安装pyspark模块才能执行代码?
pyspark指令时一个可执行命令,可以直接使用cat或者vim查看内容,本质是一个python脚本。所以可以说在终端中执行pypark指令本质是执行一个脚
本文件。当执行pyspark指令,会进入spark的安装包目录下的python目录下找到pyspark进行导入,运行代码。
在使用python3 执行python代码时, 是从Anaconda中的python环境中找pyspark进行导入的,所以需要在该python环境下安装pyspark模块