Spark深入浅出之从源码看Spark布局

RDD基于工作集的应用抽象(动态感知,容错,负载均衡,弹性)

 1、RDD(Resilient distributed Dataset)弹性体现

  1. 自动的进行内存和磁盘数据存储的切换
  2. 基于lineage的高效容错(第n个节点出错,会从n-1个节点恢复,血统容错)
  3. Task如果失败会自动进行特定次数的重试(默认4次)
  4. Stage如果失败会自动进行特定次数的重试(可以只运行计算失败的阶段),只计算失败的数据分片
  5. Checkpoint和persist
  6. DAG,Task和资源管理无关
  7. 数据分片的高度弹性(eg:如果有100万数据碎片要合成1万个。要用coalesce(numpartitions: Int,shuffle: Boolean = false) .不能用repartition。Because : repartition调用了coalesce 但是shuffle默认为true.这样的话就会造成shuffle开销很大,且行且珍惜~)

 2、常用容错方式 

  • 数据检查点以及记录数据的更新

 3、RDD通过记录数据更新的方式为何很高效   

  1. RDD是不可变的且加lazy.构成链条。从后往前函数展开(函数开始会new mappartitionsRDD。第一个构造参数传的是父RDD)。如果第101个分片失败了。会从第100个分片重新开始计算
  2. RDD的写操作是粗粒度的但是RDD的读操作既可以是粗粒度的也可以是细粒度的。为了效率。

 4、RDD缺陷

  • 不支持细粒度的更新操作以及增量迭代计算。例如网络爬虫。

 5、RDD创建的几个方式

   第一个RDD:代表了spark应用程序输入数据的来源。通过Transformation来对RDD进行各种算子的转换实现算法

  1. 使用程序中的集合创建RDD

意义:测试

  1. 使用本地文件系统创建RDD

意义:测试大量数据的文件

  1. 使用HDFS创建RDD

意义:生产环境最常用的RDD

  1. 基于DB创建RDD
  2. 基于NOSQL创建RDD 例如 HBase
  3. 基于啥s3创建RDD
  4. 基于数据流创建RDD

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章