Spark RDD

At a high level, every Spark application consists of a driver program that runs the user’s main function and executes various parallel operations on a cluster. 

来自 <http://spark.apache.org/docs/latest/rdd-programming-guide.html>

提供两个抽象,第一个抽象是RDD,第二个是共享变量

一、RDD弹性分布式数据集

分布式数据架构,即 rDD,Spark的核心数据结构。

RDD 的三种种创建方式:

1、来自内存中的对象集合(也称为并行化的一个集合)sc.parallize(data)data可以是一个Array

2、从Hadoop文件系统(或与Hadoop兼容的其他持久化存储系统,如Hive、

Cassandra、 Hbase)输入(如HDFS)创建

3、从父RDD转换得到新的RDD

第一种方法用于对少量的输入数据进行并行的CPU密集型计算。

第二种方法是创建一个对外部数据集的引用,sc.textFile(),括号里的路径可以是任何Hadoop文件系统的路径。

第三种方法,从已有的RDD进行转换,Transformation,转换是惰性的。

转换常用的操作有:映射、分组、聚合、重新分区、采样、连接RDD以及把RDD作为集合处理

持久化:.cache()标记需要缓存的中间结果,并不会立即缓存RDD

序列化:一般用Java序列化机制,spark中采用Kryo序列化机制。要使用它需要在conf中设置spark.serializer的属性

 

共享变量:广播变量和累加器

RDD的两种操作算子

变换(Transformation)和动作(Action)

变换操作是延时执行的,从一个RDD转换生成另一个RDD的操作不是马上执行,而是要等到有Action操作时才触发。

Action算子会触发spark作业提交,并将数据输出到spark系统。

RDD 的内部属性。

1、分区列表

2、计算每个分片的函数

3、对父RDD的依赖列表

4、对Key-Value对数据类型RDD的分区器,控制分区策略和分区数。

5、每个数据分区的地址列表(如HDFS上的数据块的地址)。

 

Spark数据存储的核心是RDD,RDD可以被理解为一个抽象的数组,但这个数组是分布在集群上的,逻辑上RDD的每个分区叫一个Partition。经历每一次Transformation操作之后,就会将RDD转换成另一个新的RDD

本质上RDD 是数据的元数据结构,存储的是数据分区及其逻辑结构映射关系,存储rdd之前的依赖转换关系。实际的物理块block是由blockManager进行管理的。

Spark算子分类,在程序运行过程中通过算子对RDD进行转换。

1、spark算子的作用:算子是RDD中定义的函数。包括输入函数、运行转换函数、输出函数,每一步操作都可以认为是一个算子。

输入:如textFile从文件读取、parallellize方法输入scala集合或数据输入spark,数据进入spark后转换为spark数据块,通过blockmanager进行管理

运行:输入spark形成RDD后就可以通过变换算子,如filter、map等转换为新的RDD。如果数据需要复用,就可以通过cache()将数据缓存到内存。

输出:saveAsTextFile输出到HDFS或collect()操作输出scala集合,count()直接返回。

RDD是个抽象类,具体实现由其子类如MappedRDD、ShuffledRDD等。

2spark算子的分类:

三类:value型的transformation算子、key-value型的transformation算子、Action算子,会触发SparkContext提交Job作业。

第一类:又可以分为五种:

如map(),实现子类MappedRDD的方法。flatmap(),与map类似

mapPartitions、glom。这些都是输入输出一对一型

union、cartesian笛卡尔积。这些是输入与输出多对一型

groupBy 输入与输出多对多

filter、distinct、substract(集合的差操作)、sample、takeSample输出为输入的子集

cache、persist Cache类型

 

第二类:Key-Value型的

三种类型:输入分区与输出分区一对一如mapValues(只对值进行map操作)

对单个RDD或两个RDD聚集:单个如combineByKey、reduceByKey、partitonBy

对两个rdd聚集:如cogroup

连接 join、LeftOutJoin、rightOutJoin

第三类:Actions算子

分类:无输出、HDFSscala集合、数据类型

foreach、saveAsTextFile、saveAsObjectFile、collect、collectAsMap、reduceByKeyLocally、lookup、count、top、reduce、fold、aggregate

Spark作业的运行机制:driver和executor

两种类型的任务,shffle map和result,除了结果计算的最终阶段外,其他任务都算作shfflemap 任务。

当对RDD执行一个动作时,会自动提交一个spark作业,导致sparkcontext调用runJob,然后调用传递给作为driver的一部分运行的调度程序。。调度程序由DAG调度程序和任务调度程序组成。DAG把作业分解为若干阶段,这些阶段构成一个DAG;任务调度程序则把每个阶段的任务提交到集群。

 

二、共享变量

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值