MR 分布式计算引擎, 可以用来处理大规模数据, 主要是用于批处理, 用于离线处理
MR存在弊端:
1- 执行效率比较低
2- API相对比较低级, 开发效率慢
3- 执行迭代计算不方便
也正因为MR存在这样的一些弊端 在一些场景中, 希望能够有一款执行效率更加高效, 能够更好支持迭代计算, 同时还能够处理大规模数据的一款新的软件, 而spark就是在这样的背景下产生了
Apache spark 是一款用于处理大规模数据的分布式计算引擎, 基于内存计算, 整个spark的核心数据结构: RDD
RDD: 弹性的分布式数据集
Spark 最早期是来源于 加州大学伯克莱分析一帮博士发布的论文,而产生的, 后期贡献给了apache 称为apache的顶级项目: http://spark.apache.org
Spark采用Scala语言编写的
为什么Spark的执行速度快:
原因一: spark 提供了一个全新的数据结构: RDD
通过这个数据结构, 让分布式执行引擎能够在内存中进行计算, 同时能够更好的进行迭代计算操作
对于MR来说, 主要是基于磁盘来计算, 而且迭代计算的时候, 需要将多个MR程序串联, 执行效率低
原因二: Spark是基于线程运行的, MR是基于进程运行的
线程的启动和销毁的速度, 要远远高于进程的启动和销毁
关注:
spark是一个分布式计算引擎, pyspark是一个python的库 专门用于操作spark的库
方面一: 基于内存计算的 采用DAG 有向无环图 进行计算操作 中间的结果是保存在内存中
方面二: spark是基于线程来运行的, 线程的启动和销毁要高于进程
方面一: spark提供多种语言的客户端, 可以基于多种语言来运行spark: 比如 python SQL scala java R ...
方面二: spark提供了更加高阶的API, 而且这些API在不同的语言上, 基本上都是一样的, 大大的降低了程序员学习成本
spark提供了多种工具库, 用于满足各种计算的场景
spark core: spark的核心库, 次重点, 它是学习的基础
主要是用于放置spark的核心API, 内存管理API,包括维护RDD的数据结构
spark SQL: 通过SQL操作spark计算框架 最为重要的
spark streaming: spark的流式处理, 主要是用于支持流式计算(实时计算) (目前不使用, 整个实时主要是基于flink来完成的)
spark MLlib: spark的机器学习库, 主要包括相关算法: 回归 聚类 .... (针对于特点人群)
spark graphX: spark的图计算库 比如导航行程规划 (针对于特点人群)
方面一: 编写的spark程序可以运行在不同的资源调度平台: local yarn平台 spark集群 , 云上的调度平台
方面二: spark程序可以和大数据生态圈中各种软件进行集成, 让我们更加方便使用spark对接各个软件
local 模式主要是用于本地代码测试操作
本质上就是一个单进程程序, 在一个进程中运行多个线程
类似于pandas , 都是一个单进程程序, 无法处理大规模数据, 只需要处理小规模数据
安装操作, 可以直接参考课件中 部署文档
注意事项:
要求: 只要能够上传到 linux的 /export/software 下 那么就是OK的, 用什么方式无所谓
如果想使用rz上传:
请先安装:
yum -y install lrzsz
注意: 如果使用 浏览器访问 node1:4040 无法访问的时候, 尝试去看一下windows本地hosts文件是否有以下配置:
hosts文件所在位置: C:\Windows\System32\drivers\etc
192.168.88.161 node1 node1.itcast.cn
192.168.88.162 node2 node2.itcast.cn
192.168.88.163 node3 node3.itcast.cn
退出客户端, 禁止使用 ctrl + z (本质挂载后台)
尝试使用以下方式退出:
ctrl + c
ctrl + d
:quit
quit
:exit
exit
安装pyspark ,其实就是在python上安装pyspark的库, 要求首先必须先有python环境
发现在虚拟机上, python环境为 2.7.5 , 但是实际是3.8的版本, 需要先安装 python3环境
安装 python环境和pyspark环境, 可以直接参考部署文档即可
扩展: anaconda的常用命令
安装库:
conda install 包名
pip install 包名
卸载库:
conda uninstall 包名
pip uninstall 包名
设置anaconda下载的库的镜像地址:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --set show_channel_urls yes
如何使用anaconda构建虚拟环境:
-- 查看当前有那些虚拟环境(沙箱环境)
conda env list
-- 创建一个新的虚拟环境:
conda create 虚拟环境名称 python=python版本号 #创建python3.8.8环境
-- 激活当前环境
source activate 虚拟环境名称
或者
conda activate 虚拟环境名称
-- 退出当前环境
deactivate 虚拟环境名称 #退出环境
或者
conda deactivate
如何将spark程序, 提交给spark local模式进行执行运行呢?
使用命令:
spark-submit
简单使用
cd /export/server/spark/bin
./spark-submit --master local[*] 指定python的spark程序文件 [args参数]
案例演示:
./spark-submit --master local[2] /export/server/spark/examples/src/main/python/pi.py 10
背景说明:
一般在企业中, 会存在两套线上环境, 一套环境是用于开发(测试)环境, 一套环境是用于生产环境, 首先一般都是先在开发测试环境上进行编写代码, 并且在此环境上进行测试, 当整个项目全部开发完成后, 需要将其上传到生产环境, 面向用于使用
如果说还是按照之前的本地模式开发方案, 每个人的环境有可能都不一致, 导致整个团队无法统一一套开发环境进行使用, 从而导致后续在进行测试 上线的时候, 出现各种各样环境问题
pycharm提供了一些解决方案: 远程连接方案, 允许所有的程序员都去连接远端的测试环境的, 确保大家的环境都是统一, 避免各种环境问题发生, 而且由于连接的远程环境, 所有在pycharm编写代码, 会自动上传到远端环境中, 在执行代码的时候, 相当于是直接在远端环境上进行执行操作
操作实现: 本次这里配置远端环境, 指的连接虚拟机中虚拟环境, 可以配置为 base环境, 也可以配置为 pyspark_env虚拟环境, 但是建议配置为 base环境, 因为base环境自带python包更全面一些
创建项目后, 设置自动上传操作
校验是否有pyspark
ok 后, 就可以在项目上创建子项目进行干活了: 最终项目效果图
最后, 就可以在 main中编写今日代码了, 比如WordCount代码即可
扩展: 关于pycharm 专业版 高级功能
异常: JAVA_HOME is not set
出现位置: 当pycharm采用SSH连接远程Python环境时, 启动执行spark程序可能报出
原因: 加载不到jdk的位置
解决方案:
第一步: 可以在linux的 /root/.bashrc 文件中, 添加以下两行内容 (注意需要三台都添加)
export JAVA_HOME=/export/server/jdk1.8.0_241
export PYSPARK_PYTHON=/root/anaconda3/bin/python
第二步: 在代码中, 指定linux中spark所在目录, spark中配置文件, 即可自动加载到: 锁定远端操作环境, 避免存在多个版本环境的问题
os.environ['SPARK_HOME'] = '/export/server/spark'
os.environ["PYSPARK_PYTHON"]="/root/anaconda3/bin/python"
os.environ["PYSPARK_DRIVER_PYTHON"]="/root/anaconda3/bin/python"
1- 第一步: 需要安装Python 环境 , 建议使用anaconda 来安装即可
2- 第二步: 在Python安装pySpark
执行:
pip install pyspark==3.1.2
首先, 需要将 hadoop-3.3.0 放置到一个没有中文, 没有空格的目录下
接着将目录中bin目录下有一个 hadoop.dll文件, 放置在c:/windows/system32 目录下 (配置后, 需要重启电脑)
最后, 将这个hadoop3.3.0 配置到环境变量中:
配置后, 一定一直点确定退出, 否则就白配置了…
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b4UnVo3R-1649749704191)(day01_pySparkBase.assets/image-20211011093739472.png)]
首先, 需要将 spark-3.1.2... 放置到一个没有中文, 没有空格的目录下
最后, 将这个 spark-3.1.2... 配置到环境变量中:
配置后, 一定一直点确定退出, 否则就白配置了…
需要修改环境变量
配置后, 一定一直点确定退出, 否则就白配置了…
首先: 需要将 jdk1.8 放置在一个没有中文, 没有空格的目录下
接着:要在环境变量中配置 JAVA_HOME, 并在path设置