sparkRDD
基本概念
RDD(Resilient Distributed Dataset),弹性分布式数据集,是Spark数据处理的核心抽象
属性:分区列表、分区函数、RDD依赖、分片函数(只有kv格式数RDD才有,两种函数HashPatitioner和RangePartitioner,不是kv格式的RDD则是none。可选)、数据就近原则(数据在哪里就在哪个节点执行任务或最近的节点。可选)
弹性:
1、自动进行内存和磁盘数据存储的转化
2、基于血统的高效容错机制
3、Task如果失败会自动进行重试,默认4次
4、Stage如果失败会自动进行重试,默认4次
5、CheckPoint(Cache、Persist)可主动或被动触发
6、数据调度弹性
7、数据分片的高度弹性
特点:分区、只读、依赖、缓存、CheckPoint
创建及操作方式
创建方式:三种,即利用已有的数据集合、利用数据源、RDD转换
操作方式:两种,即transformation、action,前者不会执行具体操作,只有当action执行时,才会触发执行
依赖关系
宽依赖、窄依赖、lineage(血统)
缓存
将计算的每一个RDD缓存在内存中,不管哪里需要都能迅速调用
DAG的生成
RDD经过一系列的转换,生成一个DAG(有向无环图),从程序最后往前,分成一个个的Stage,Stage划分标准,遇到宽依赖切分为另外一个Stage,若时窄依赖则加入到当前的Stage当中
Spark任务调度
各个RDD之间存在着依赖关系,这些依赖关系就形成有向无环图DAG,DAGScheduler对这些依赖关系形成的DAG进行Stage划分,划分的规则很简单,从后往前回溯,遇到窄依赖加入本stage,遇见宽依赖进行Stage切分。完成了Stage的划分。DAGScheduler基于每个Stage生成TaskSet,并将TaskSet提交给TaskScheduler。TaskScheduler 负责具体的task调度,最后在Worker节点上启动task。
容错机制
Persist:在内存和磁盘中各存储一份
Cache:只在内存中存储一份
CheckPoint:将数据存到hdfs上
Spark运行架构
运行流程:
构建Spark Application的运行环境(启动SparkContext),SparkContext向资源管理器(可以是Standalone、Mesos或YARN)注册并申请运行Executor资源;资源管理器分配Executor资源并启动Executor,Executor运行情况将随着心跳发送到资源管理器上;SparkContext构建成DAG图,将DAG图分解成Stage,并把Taskset发送给Task Scheduler。Executor向SparkContext申请Task,Task Scheduler将Task发放给Executor运行同时SparkContext将应用程序代码发放给ExecutorTask在Executor上运行,运行完毕释放所有资源。
架构特点:
1、每个Application获取专属的executor进程,该进程在Application期间一直驻留,并以多线程方式运行tasks。
2、Spark任务与资源管理器无关,只要能够获取executor进程,并能保持相互通信就可以了。
3、提交SparkContext的Client应该靠近Worker节点(运行Executor的节点),最好是在同一个任务槽,因为Spark程序运行过程中SparkContext和Executor之间有大量的信息交换;如果想在远程集群中运行,最好使用RPC将SparkContext提交给集群,不要远离Worker运行SparkContext。
4、Task采用了数据本地性和推测执行的优化机制。
数据读取与保存的主要方式
textFile、Json、CSV、SequenceFile、对象文件、hadoop输入输出格式