您的位置:首页 > 大数据

大数据IMF传奇行动绝密课程第14课:Spark RDD解密

2016-08-11 22:38 441 查看

Spark RDD解密

RDD提供了通用的框架

根据自己领域大数据最佳实践建模做新的库

spark高手:解决BUG,调优、顶级高手拿源码修改适配自己领域业务

RDD基于工作集的应用抽象

MapReduce基于数据集

位置感知,容错 负载均衡

基于数据集的处理,从物理存储上加载数据,然后操作数据,然后写入物理存储设备

基于数据集的操作不适用的场景:

1、不适合于大量的迭代

2、交互式查询

重点是:基于数据流的方式不能复用曾经的结果或者中间计算结果

RDD是基于工作集的,除了有基于数据集的优点外还增加了Resillient Distributed Dataset(弹性分布式数据集)

弹性之一:自动进行磁盘和内存数据存储的切换

弹性之二:基于lineage的高效容错,不需要从头开始计算

弹性之三:Task如果失败会自动进行特定次数的重试

弹性之四:Stage如果失败会自动进行特定次数的重试,且只计算失败的分片

弹性之五:checkpoint和persisit(弹性之二的延伸)

弹性之六:DAG、Task和资源管理无关

弹性之七:数据分片的高度弹性

Spark位置感知比Hadoop好很多,Hadoop在map后不管reduce在哪里了。Hadoop有一定感知的

数据分片可变:10万->1万,可以调用coalesce,不用repartition,因为repartition需要重新shuffle

1万->10万两者都可以

RDD是分布式函数式编程的抽象

Spark1.2.x之前shuffle机制有问题,所以当时不适合大规模数据计算。1.3开始有DataFrame

RDD是lazy模式的,每次都会创建新的RDD并把之前的RDD迭代进来,直到遇到action时才触发计算

这样容错的开销会比较低

常规容错都有哪些方法:

1、数据检查点

2、记录数据的更新

RDD通过数据更新的方式,为何高效呢?

1、RDD是不可变的+lazy,不存在全局修改,控制难度下降。有链条,某部计算错误可以回来重算(某部checkpoint或某部是要给Stage的结尾,因为Stage结束时写磁盘)

2、RDD是粗粒度的操作(每次写操作都可以记录其中的集合),为了简化,为了效率。而RDD的读操作是粗粒度也可以是细粒度的。

如果要和mysql或hbase结合使用,可能要重写RDD。

所有RDD操作计算结果返回的都是迭代器,好处是所有框架无缝集成

this.type指向具体的子类可以调用子类的方法,Java中不可以。运行时把实际的实例赋值给RDD从而调用子类方法

例如:子框架,子框架可以直接调机器学习、图计算等等。同理机器学习也可以调用金融框架。

我的理解,子框架继承RDD的接口,这时RDD类型可以在运行时调用子框架的方法

PreferedLocation ,数据不动代码动,Spark可以处理任何数据,完美符合数据本地性

实时事务性处理Spark依然不适用

RDD缺陷:不支持细粒度的更新(写)操作以及增量迭代计算
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spark
相关文章推荐