Spark 基础 与 安装
图片无法加载请跳转CSDN:Spark 基础 与 安装-CSDN博客
Spark 基础
一、MapReduce编程模型的局限性
1、繁杂:只有Map和Reduce两个操作,复杂的逻辑需要大量的样板代码
2、处理效率低:
Map中间结果写磁盘,Reduce写HDFS,多个Map通过HDFS交换数据
任务调度与启动开销大
3、不适合迭代处理、交互式处理和流式处理
二、Spark是类Hadoop MapReduce的通用【并行】框架
1、Job中间输出结果可以保存在内存,不再需要读写HDFS
2、比MapReduce平均快10倍以上
三、版本
2014 1.0
2016 2.x
2020 3.x
四、优势
1、速度快
- 基于内存数据处理,比MR快100个数量级以上(逻辑回归算法测试)
- 基于硬盘数据处理,比MR快10个数量级以上
2、易用性
- 支持Java、【Scala】、【Python:pyspark】、R语言
- 交互式shell方便开发测试
3、通用性
一栈式解决方案: 批处理、交互式查询、实时流处理(微批处理)、图计算、机器学习
4、多种运行模式
YARN ✔、Mesos、EC2、Kubernetes、Standalone、Local[*]
五、技术栈
1、Spark Core:核心组件,分布式计算引擎 RDD
2、Spark SQL:高性能的基于Hadoop的SQL解决方案
3、Spark Streaming:可以实现高吞吐量、具备容错机制的准实时流处理系统
4、Spark GraphX:分布式图处理框架
5、Spark MLlib:构建在Spark上的分布式机器学习库
六、spark-shell
Spark自带的交互式工具
local:spark-shell –master local[*]
alone:spark-shell –master spark://MASTERHOST:7077
yarn :spark-shell –master yarn
七、运行架构
Spark服务
Master : Cluster Manager
Worker : Worker Node
1、在驱动程序中,通过SparkContext主导应用的执行
2、SparkContext可以连接不同类型的 CM(Standalone、YARN),连接后,获得节点上的 Executor
3、一个节点默认一个Executor,可通过 SPARK_WORKER_INSTANCES 调整
4、每个应用获取自己的Executor
5、每个Task处理一个RDD分区
八、Spark架构核心组件
名称 | 作用 |
---|---|
Application | 建立在Spark上的用户程序,包括Driver代码和运行在集群各节点Executor中的代码 |
Driver program | 驱动程序。Application中的main函数并创建SparkContext |
Cluster Manager | 在集群(Standalone、Mesos、YARN)上获取资源的外部服务 |
Worker Node | 集群中任何可以运行Application代码的节点 |
Executor | 某个Application运行在worker节点上的一个进程 |
Task | 被送到某个Executor上的工作单元 |
Job | 多个Task组成的并行计算,由Action触发生成,一个Application中含多个Job |
Stage | 每个Job会被拆分成多组Task,作为一个TaskSet,其名称为Stage |
Spark 安装
一、下载
首先检查是否安装了 jdk 并查看版本是否符合要求。这里是JDK8
1、 linux 安装spark-3.1.2,输入如下命令 (没有wget可自行下载)
1 |
|
2、要安装其他版本:Index of /dist/spark (apache.org)
二、解压
安装好后将其解压到自己的目录
1 |
|
-x 解压,v 显示解压过程,-f 指定解压文件,-C 指定解压路径
三、环境变量
1、在/etc/profile.d
目录新建一个myenv.sh
文件
1 |
|
2、写入如下
1 |
|
3、激活环境变量 (执行/etc/profile
即可)
1 |
|
4、注意:spark on yarn 必配,且需保证 HADOOP 环境变量已经正确配置
可在/opt/software/spark-3.1.2/conf/
目录下配置
1 |
|
1 |
|
四、启动、关闭、检查Spark
1、启动 Spark Standalone 集群,执行脚本
1 |
|
2、查看 Spark 服务
jps -ml
查看到类似如下信息1
jps -ml
1
231987 org.apache.spark.deploy.master.Master --host single01 --port 7077 --webui-port 8080
32089 org.apache.spark.deploy.worker.Worker --webui-port 8081 spark://single01:7077访问8080 和 8081 (http://single01:8080) 端口,结果如下
启动 Spark Shell 会话
1
2
3spark-shell --master spark://single01:7077 # 启动 spark-shell 测试 scala 交互式环境
spark-shell --master local[*]
spark-shell --master yarn # 测试 Spark on YARN--master
用于指定 Spark 应用程序连接的 Spark Master 地址。1
2
3
4
5
6
7
8
9
10
11
12Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 3.1.2
/_/
Using Scala version 2.12.10 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_171)
Type in expressions to have them evaluated.
Type :help for more information.
scala>
3、关闭 Spark Standalone 集群
1 |
|