运行模式:
local:适用于本地测试
yarn: 分为yarn-client、yarn-cluster两个模式。yarn-client的Driver驱动程序会在客户端进行运行,而yarn-cluster的驱动程序是在集群的(nodemanager)applicationMaster上面。
standalone:独立模式,spark客户端将任务提交到 Master/slaves结构的集群上的master处理,使用spark自身的调度系统。
spark任务提交的方式:J2ee还是shell?
shell
#!/bin/bash
# 设置Spark主节点URL和应用程序名称
SPARK_MASTER="spark://localhost:7077"
APP_NAME="MySparkApp"
# 设置其他Spark配置属性
SPARK_CONF="--executor-memory 2g --num-executors 4"
# 提交Spark应用程序
spark-submit \
--master $SPARK_MASTER \
--name $APP_NAME \
$SPARK_CONF \
path/to/your/app.jar
1)在提交任务时的几个重要参数
executor-cores —— 每个 executor 使用的内核数,默认为 1,官方建议 2-5 个,我们企业是 4 个 num-executors —— 启动 executors 的数量,默认为 2
executor-memory —— executor 内存大小,默认 1G
driver-cores —— driver 使用内核数,默认为 1
driver-memory —— driver 内存大小,默认 512M
2)一个提交任务的样式
spark-submit
\ --master local[5]
\ --driver-cores 2
\ --driver-memory 8g
\ --executor-cores 4
\ --num-executors 10
\ --executor-memory 8g
\ --class PackageName.ClassName XXXX.jar
\ --name "Spark Job Name"
\ InputPath
\ OutputPath
spark架构与作业提交流程简述
yarn-cluster模式
1.spark-submit 中main被执行
2.反射 Client类的main方法执行
3.向RM注册任务并加入队列
4.NM认领后创建AM,AM中的driver申请所需资源
5.同时会申请相应的executors并创建executor对象,这个executors会向driver注册
6.driver 执行代码 初始化SC 任务划分
7.分配对应任务给指定的executors执行
spark的血统(lineage)概念及其作用
lineage是记录分区之间依赖关系的机制,分为宽依赖和窄依赖;窄依赖是一个分区依赖一个分区,没有shuffle操作,流程图呈现是一条直线;宽依赖是一个分区依赖多个分区,可能涉及shuffle操作,产生更多的IO。
窄依赖(Narrow Dependency):
宽依赖(Wide Dependency):
lineage的作用主要是以下2点:
1.容错和数据恢复
lineage可以让spark在出错后根据依赖关系定位上次出错的地方重新执行,把丢失的数据找回来。
2.优化执行
可以根据lineage依赖关系优化执行计划,由于spark是惰性计算,故只需识别用到的部分,过滤掉多余的宽依赖来提高效率。
spark根据什么划分stage?根据什么划分tasks?
根据宽依赖划分,将job划分成若干个stage,每一个宽依赖都会对应一个stage;一个stage是taskSet,而task是根据RDD中的分区数将stage划分成数个tasks。
spark常用的transformation算子(惰性算法,不会马上执行),列举并说明其作用(功能)。
map(func)转化算子,每个输入元素,使用接受到的func函数的聚合逻辑按key分组合并value(做了转化),返回一个新的RDD。(元素数=map调用数)
分区:数据集被划分成若干个较小的数据块,即分区,每个分区可以在集群不同的节点上并行处理,并行度=分区数。
元素:即数据项,数据集被划分成若干个较小的数据块,数据块包含一定数量的元素,元素是数据集中一个个独立的数据项,是处理的基本单元,spark对每个元素进行计算转换,并存储在分区中。
mapPartitions(func)类似于map,但mapP是针对每个分区调用一次,即分区数=调用mapP数。
reduceByKey (func,numtasks)numtasks指定reduce任务数(并行数),func为聚合函数逻辑,按key聚合value,输入k-v类型rdd,返回一个新的k-v类型rdd。
def aggregateByKey[U](zeroValue: U)(seqOp: (U, V) => U, combOp: (U, U) => U): RDD[(K, U)]
自定义函数,zeroV是初始值,seq是分区内聚合逻辑,comb是分区间聚合逻辑(将前两个value进行合并comb得到的结果与下一个value再一起传给comb,以此类推),返回一个k-v类型的rdd(key与计算结果作为一个新rdd)。
spark常用的action算子(马上执行),列举并说明其作用(功能)。