1、Spark概述
1、spark是什么
Spark是基于内存的分析计算引擎。
2、Spark的应用场景
Spark用于离线、实时、机器学习、图计算
3、spark比MR快的原因
1、中间结果保存位置不一样
多个MR计算的时候,中间结果保存在磁盘中
SPARK计算的时候,中间结果保存在内存中
2、task级别不一样
MR的task是进程级别,进程创建与销毁的代价会比较大
spark的task是线程级别
2、spark运行模式
1、Local模式【单机安装spark】
1、任务提交: bin/spark-submit --master local/local[N]/local[*] --class 待运行类的全类名 jar包所在位置 [参数...]
master=local 使用单线程模拟执行,同一时间只能运行一个task
master=local[N] 使用N个线程模拟执行,同一时间只能运行N个task
master=local[*] 使用cpu个数个线程模拟执行,同一时间只能运行cpu个数个task
2、集群模式
集群角色
Master[类似yarn的ResourceManager]
职责: 负责资源管理与分配
Worker[类似yarn的NodeManager]
职责: 资源节点与任务执行节点
Master与Worker是随着spark集群的启动而启动,随着集群的停止而消失。
Driver
职责:
1、负责将用户的代码转成job
2、负责提交task到executor执行
3、监控executor中task的执行状态
4、负责job执行过程中webui界面的展示
Executor
职责: 资源进程与任务执行进程
Driver与Executor是随着任务提交而出现,随着任务的完成而消失。
1、standalone模式[使用自带的资源调度器<Master与Worker>,需要搭建spark集群]
1、任务提交
bin/spark-submit
--master spark://master主机名:7077 --class 待运行类的全类名 --total-executor-cores cpu总核数
--executor-cores 单个executor核数 --executor-memory 单个executor内存 jar包所在位置 参数 ...
2、部署模式[--deploy-mode client/cluster]
client模式与cluster模式的区别: Driver所在的位置不一样
client模式: Driver与client都在SparkSubmit进程中,此时Client端不能关闭,关闭之后Driver消失不能进行任务调度,spark程序会停止
工作流程:
1、通过spark-submit脚本提交任务,此时会生成SparkSubmit进程,进程中会创建Client与Driver
2、Driver向Master注册任务,申请资源
3、Master筛选出资源充足的Worker
4、Master向Worker发起启动executor的请求
5、executor启动之后会向Driver反向注册,申请计算任务
6、Driver提交task到executor中执行
7、等到task执行完成之后,注销释放资源
cluster模式: Driver在任意一个Worker中,此时Client端能关闭,不会影响Driver
工作流程
1、通过spark-submit脚本提交任务,此时会生成SparkSubmit进程,进程中会创建Client
2、Client向Master注册任务,申请启动Driver
3、Master会向其中Worker发起请求,启动Driver
4、Driver启动之后向Master申请资源
5、Master筛选出资源充足的Worker
6、Master向Worker发起启动executor的请求
7、executor启动之后会向Driver反向注册,申请计算任务
8、Driver提交task到executor中执行
9、等到task执行完成之后,注销释放资源
2、yarn模式[单机安装spark既可以,将任务提交到yarn执行]
1、任务提交
bin/spark-submit
--class 待运行类的全类名 --master yarn --num-executors executor个数[2]
--exeuctor-cores[1] 单个executor核数 --executor-memory[1] 单个executor内存 jar包所在位置 参数 ...
2、部署模式[--deploy-mode client/cluster]
client模式与cluster模式的区别: Driver所在的位置不一样 [测试用client,生产用cluster]
client模式: Driver与client都在SparkSubmit进程中,此时Client端不能关闭,关闭之后Driver消失不能进行任务调度,spark程序会停止
工作流程:
1、通过spark-submit脚本提交任务,此时会生成SparkSubmit进程,进程中会创建Client与Driver
2、Driver向ResourceManager注册任务,申请启动ApplicationMaster
3、AM启动之后会向RM申请资源
4、RM会将资源列表返回给AM
5、AM根据资源列表向NodeManager发起申请启动executor的请求
6、executor启动之后会向Driver反向注册
7、Driver提交task到executor中执行
8、task执行完成之后,AM会向RM注销自己释放资源
cluster模式: Driver在ApplicationMaster进程中,此时Client端能关闭,不会影响Driver
工作流程:
1、通过spark-submit脚本提交任务,此时会生成SparkSubmit进程,进程中会创建Client
2、Client向ResourceManager注册任务,申请启动ApplicationMaster
3、AM启动之后会在进程中启动Driver线程
4、AM启动会向RM申请资源
5、RM会将资源列表返回给AM
6、AM根据资源列表向NodeManager发起申请启动executor的请求
7、executor启动之后会向Driver反向注册
8、Driver提交task到executor中执行
9、task执行完成之后,AM会向RM注销自己释放资源
3、端口号总结
4040: 任务执行过程中webui界面端口[任务执行完成之后打不开界面]
8080: spark集群界面端口(和zookeeper冲突,建议改成8989)
7077: spark master通信端口
18080: spark历史服务器webui界面端口
4、spark-submit提交任务常用参数
--master 指定任务提交到哪个资源调度器中执行
local模式: local/local[N]/local[*]
standalone模式: spark://master主机名:7077
yarn模式: yarn
--class 待运行的带有main方法的object全类名
--deploy-mode 指定部署模式[client/cluster]
--driver-memory 指定Driver内存大小[一般设置为5-10G]
--executor-memory 指定单个executor内存大小
--exeucutor-cores 指定单个executor的cpu核数
--total-exeucutor-cores 指定任务所有executor总核数[仅限于standalone模式使用]
--num-executors 指定任务需要的executor个数[仅限于yarn模式使用]
--queue 指定任务提交到哪个资源队列中[仅限于yarn模式使用]
--driver-cores 指定Driver核数[默认值1 一般不设定 足够使用]
WorldCount
1 配置SparkConf
setMaster.setAppName IDEA本地执行这两个必须设
setAppName 如果是打包到Yarn集群执行Master不用设[bin/spark-submit --master yarn] 如IDEA设置了,那么IDEA设置的优先级更高
2 创建SparkContext
new SparkContext.(SparkConf)
3 读数据 处理数据
sc.textFile
4 调用行动算子
5 关闭sc
sc.stop
IDEA
创建Class的时候 没有scala Class
Flie ->Project Structure->Libraries 或 Global Libraries->点击+把Scala SDK加进来
打包Spark jar包注意事项
target包所在位置:Show in Explorer
Spark用小包[大包有依赖,Spark内部有对应的包],
用解压工具打开小包,检查有没有class文件[没有代表打包有问题,可能需要添加打包插件]