RDD基于工作集的应用抽象(动态感知,容错,负载均衡,弹性)
1、RDD(Resilient distributed Dataset)弹性体现
- 自动的进行内存和磁盘数据存储的切换
- 基于lineage的高效容错(第n个节点出错,会从n-1个节点恢复,血统容错)
- Task如果失败会自动进行特定次数的重试(默认4次)
- Stage如果失败会自动进行特定次数的重试(可以只运行计算失败的阶段),只计算失败的数据分片
- Checkpoint和persist
- DAG,Task和资源管理无关
- 数据分片的高度弹性(eg:如果有100万数据碎片要合成1万个。要用coalesce(numpartitions: Int,shuffle: Boolean = false) .不能用repartition。Because : repartition调用了coalesce 但是shuffle默认为true.这样的话就会造成shuffle开销很大,且行且珍惜~)
2、常用容错方式
- 数据检查点以及记录数据的更新
3、RDD通过记录数据更新的方式为何很高效
- RDD是不可变的且加lazy.构成链条。从后往前函数展开(函数开始会new mappartitionsRDD。第一个构造参数传的是父RDD)。如果第101个分片失败了。会从第100个分片重新开始计算
- RDD的写操作是粗粒度的但是RDD的读操作既可以是粗粒度的也可以是细粒度的。为了效率。
4、RDD缺陷
- 不支持细粒度的更新操作以及增量迭代计算。例如网络爬虫。
5、RDD创建的几个方式
第一个RDD:代表了spark应用程序输入数据的来源。通过Transformation来对RDD进行各种算子的转换实现算法
- 使用程序中的集合创建RDD
意义:测试
- 使用本地文件系统创建RDD
意义:测试大量数据的文件
- 使用HDFS创建RDD
意义:生产环境最常用的RDD
- 基于DB创建RDD
- 基于NOSQL创建RDD 例如 HBase
- 基于啥s3创建RDD
- 基于数据流创建RDD