第一:基于工作集合的应用抽象(中间的和曾经的)
第二:RDD内幕解密
第三:RDD思考
-----------------------------------------
基于工作集合的应用抽象特点:位置感知,容错,负载均衡
基于数据集:从物理存储加载数据,操作数据,写入物理存储。
缺点:不适合大量的迭代运算,交互查询,重点是基于数据流的方式,不能复用曾经的结果或者中间计算结果
----------------------------------------------------
RDD弹性层面的特点:
1、自动进行内存和数据磁盘存储转换。
2、基于lineage的高度容错
3、task如果失败会自动进行特定次数的重试、
4、stage失败会自动进行特定次数的重试。
5、checkpoint和persist
6、数据调度弹性:DAG,task和资源管理无关
7、数据分片的高度弹性。
-------------------------------
RDD特点举例:
f(x)=x+2
x=y+1
y=z+3
每次的第一个参数都是this,父依赖。相当于函数展开的过程。
---------------------------------
常规的容错方式有2种:数据检查点和记录数据更新。
数据检查点:通过数据中心的网络,连接每台机器,复制数据集。此种情况会通过网络,严重消耗io
数据更新:每次改变都要记录(写操作)。问题:1复杂,数据更新太多2消耗性能
spark采用的方式:数据更新,之所以高效是因为
1.RDD是不可变得lazy级别,且是计算链条,不产生中间结果,只是记录的相互依赖。
例如第901步出错,可以从第900步开始计算。前提是900步进行了persist或者是stage
2.RDD的写操作是粗粒度的,但是RDD的读(查询),既可以是粗粒度,也可以是细粒度的。
---------------------------------------
repartition 默认是shuffle的
coalesce默认不shuffle
------------------------------------
RDD操作默认返回的是itorator,spark的接口可以调用子类的方法,原因就是this.type
-------------------------------------------------------------------------------------------
RDD缺点:不支持细粒度的更新操作和增量迭代计算
-----------------------------------
如果是scala集合的话,那么针对数据本地性,是数据集合会被copy到计算节点内存。
-------------------------------------------------------------
spark rdd是被分区的,对于rdd来说,每个分区都会被一个计算任务处理,并且决定并行计算的粒度,rdd的每次转换操作都会生成新的rdd。在生成新的rdd时,一般可以指定分区的数量,如果不指定分区的数量,当rdd从集合创建的时候,则默认为该程序分配到的cpu核数,如果从hdfs创建,则默认为文件的block数。
-------------------------------------------------
第二:RDD内幕解密
第三:RDD思考
-----------------------------------------
基于工作集合的应用抽象特点:位置感知,容错,负载均衡
基于数据集:从物理存储加载数据,操作数据,写入物理存储。
缺点:不适合大量的迭代运算,交互查询,重点是基于数据流的方式,不能复用曾经的结果或者中间计算结果
----------------------------------------------------
RDD弹性层面的特点:
1、自动进行内存和数据磁盘存储转换。
2、基于lineage的高度容错
3、task如果失败会自动进行特定次数的重试、
4、stage失败会自动进行特定次数的重试。
5、checkpoint和persist
6、数据调度弹性:DAG,task和资源管理无关
7、数据分片的高度弹性。
-------------------------------
RDD特点举例:
f(x)=x+2
x=y+1
y=z+3
每次的第一个参数都是this,父依赖。相当于函数展开的过程。
---------------------------------
常规的容错方式有2种:数据检查点和记录数据更新。
数据检查点:通过数据中心的网络,连接每台机器,复制数据集。此种情况会通过网络,严重消耗io
数据更新:每次改变都要记录(写操作)。问题:1复杂,数据更新太多2消耗性能
spark采用的方式:数据更新,之所以高效是因为
1.RDD是不可变得lazy级别,且是计算链条,不产生中间结果,只是记录的相互依赖。
例如第901步出错,可以从第900步开始计算。前提是900步进行了persist或者是stage
2.RDD的写操作是粗粒度的,但是RDD的读(查询),既可以是粗粒度,也可以是细粒度的。
---------------------------------------
repartition 默认是shuffle的
coalesce默认不shuffle
------------------------------------
RDD操作默认返回的是itorator,spark的接口可以调用子类的方法,原因就是this.type
-------------------------------------------------------------------------------------------
RDD缺点:不支持细粒度的更新操作和增量迭代计算
-----------------------------------
如果是scala集合的话,那么针对数据本地性,是数据集合会被copy到计算节点内存。
-------------------------------------------------------------
spark rdd是被分区的,对于rdd来说,每个分区都会被一个计算任务处理,并且决定并行计算的粒度,rdd的每次转换操作都会生成新的rdd。在生成新的rdd时,一般可以指定分区的数量,如果不指定分区的数量,当rdd从集合创建的时候,则默认为该程序分配到的cpu核数,如果从hdfs创建,则默认为文件的block数。
-------------------------------------------------