大数据学习笔记(spark总结)

Spark的运行模式

local,standalone,yarn,mesos。yarn还分为yarn-client 和 yarn-master.

Spark名词

Standalone模式下:
Master:集群中含有Master进程的节点。Master是整个集群的控制器,负责整个集群的正常运行。

Worker:Worker是工作节点,接收主节点的命令并进行状态汇报。

Yarn模式下:

ResourceManager:相当于Master,负责整个集群资源的调度。

NodeManager:相当于Worker,负责工作。
ApplicationMaster:相当于Driver。

Container:在NM上启动,负责执行任务。
Driver:在client提交Spark程序的时候产生的进程,运行Application中的main函数,初始化SparkContext。

SparkContext:整个Spark应用的上下文。

Executor:执行器,在NodeManager上执行任务的组件,启动线程池运行任务,每个Application都有一组的Executors。

RDD:Spark中的数据集。

Job:当程序碰到action算子的时候会提交一个job。job之前的操作都是延迟执行的。

Stage:每个job都会被切割成一个或者多个stage。

Task:RDD中的每一个分区都是一个task,task是RDD中最小的处理单元了。

TaskSet:一组task组成taskSet。每组TaskSet会被分发到各个节点上执行。

DAGScheduler:根据每个作业job,切分成一个个的stage。负责切分job

TaskScheduler:将任务taskset分发到每个节点上执行。

RDD

RDD的五大特性:

(1)RDD是有一系列的psrtition组成的
(2)RDD提供的每一个函数实际上是作用在每一个partition上的
(3)RDD是有一系列的依赖关系的,依赖于其他的RDD
(4)可选项,分区器是作用在kv格式的RDD上的
(5)可选项,RDD会提供一系列的最佳的计算位置

算子
  1. taransformation类算子
    map(一对一)、flatMap(一对多)、filter(一对N(0、1))、join、leftouterJoin、rightouterJoin、fullouterJoin、sortBy、sortByKey、gorupBy、groupByKey、reduceBy、reduceByKey、sample。
  2. action类算子
    count、collect(将task的计算结果拉回到Driver端)、foreach(不会回收所有task计算结果,原理:将用户传入的参数推送到各个节点上去执行,只能去计算节点找结果)、saveAsTextFile(path)、reduce
    (查看计算结果的方式:WEBUI、去各个节点的Worker工作目录查看)
    3. 控制类算子
    cache(相当于MEMOORY_ONLY)、
    persist(MEMORY_ONLY、DISK_ONLY、MEMORY_AND_DISK)
    控制类算子注意点:
    1)、控制类算子后不能紧跟action类算子
    2)、缓存单元是partition
    3)、懒执行、需要action类算子触发执行。(如果application中只有一个job,没必要使用控制类算子)
宽窄依赖

宽依赖:父RDD中的每个partition去向子RDD中的 多个partition。
窄依赖:父RDD中的每个partition去向子RDD中的一个partition。
DAGScheduler根据宽窄依赖将job切分成多个stage。
DAG优化:连续的窄依赖不切分,窄依赖是直接在原有partition的基础上进行数据的变化(同一机器的内存上的瞬时状态),速度快。将一条直线封装成一个task,这样多个算子作用实际上只需要发一个task任务。
注:这也是Spark延迟执行的原因,将多个窄依赖封装在一个task中,只需要发一个task任务就行。task任务是Spark的最小计算单元。

Spark中的共享变量

广播变量:不可修改,在sc中创建,发送到各个节点。
var broadcastVar = sc.broadcast(Array(1,2,3))
broadcastVar.value
累加器:在从节点中不可读,只能进行累加。
val accum = sc.accumulator(0,“My Accumulator”)
accum.value

提交Application的方式

1、Client
提交方式:spark-submit --deploy-mode client --class jarPath args
特点:Driver进程在客户端节点启动
适用场景:测试环境
大概运行流程:
1)、在Client本地启动Driver进程。
2)、Driver会向Master为当前Application申请资源。
3)、Master接收到请求后,会在资源充足的节点上启动Executor进程。
4)、Driver分发task到Executor执行。
2、Cluster
提交方式:spark-submit --deploy-mode cluster --class jarPath args
特点:每次启动application,Driver进程在随机一台节点启动
适用场景:生产环境
大概运行流程:
1)、客户端执行spark-submit --deploy-mode cluster --class jarPath args命令,启动一个sparksubmit进程。
2)、为Driver向Master申请资源。Driver进程默认需要1G内存,1core。
3)、master会随机找一台Worker节点启动Driver进程。
4)、Driver进程启动成功后,spark-submit进程关闭,然后Driver会向Master为当前Application申请资源。
5)、Master接收到请求后,会在资源充足的节点上启动Executor进程。
6)、Driver分发task到Executor执行。

你可能感兴趣的:(大数据学习笔记(spark总结))