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

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

  1. 不适合于大量的迭代:
  2. 不适合交互式查询:每次查询都需要对磁盘进行交互.
  3. 基于数据流的方式不能够复用曾经的结果或者中间的结果;

2. RDD弹性数据集

特点:

A)自动的进行内存和磁盘数据的存储切换:

B) 基于lineage的高效容错;

C) Task如果失败会自动进行重试

D) Stage如果失败会自动进行重试,而且只会计算失败的分片;

E) Checkpoint和persist.

3.  数据分片的高度弹性. Partition合并可以提升效率(数据比较小的适合),  数据大的时候可以提高partition设置,避免OOM. 如果小的分片变大的时候,一般需要shuffle. 可以使用coalesce.

def coalesce(numPartitions: Int, shuffle: Boolean = false)

    (implicit ord: Ordering[T] = null): RDD[T]

返回一个新的RDD,且该RDD的分区个数等于numPartitions个数。如果shuffle设置为true,则会进行shuffle.

def repartition(numPartitions: Int)(implicit ord: Ordering[T] = null): RDD[T]

该函数其实就是coalesce函数第二个参数为true的实现

repartition(numPartitions:Int):RDD[T]和coalesce(numPartitions:Int,shuffle:Boolean=false):RDD[T]

他们两个都是RDD的分区进行重新划分,repartition只是coalesce接口中shuffle为true的简易实现,(假设RDD有N个分区,需要重新划分成M个分区)

1)、N<M。一般情况下N个分区有数据分布不均匀的状况,利用HashPartitioner函数将数据重新分区为M个,这时需要将shuffle设置为true。

2)如果N>M并且N和M相差不多,(假如N是1000,M是100)那么就可以将N个分区中的若干个分区合并成一个新的分区,最终合并为M个分区,这时可以将shuff设置为false,在shuffl为false的情况下,如果M>N时,coalesce为无效的,不进行shuffle过程,父RDD和子RDD之间是窄依赖关系。

3)如果N>M并且两者相差悬殊,这时如果将shuffle设置为false,父子RDD是窄依赖关系,他们同处在一个Stage中,就可能造成spark程序的并行度不够,从而影响性能,如果在M为1的时候,为了使coalesce之前的操作有更好的并行度,可以讲shuffle设置为true。

总之:如果shuff为false时,如果传入的参数大于现有的分区数目,RDD的分区数不变,也就是说不经过shuffle,是无法将RDD的分区数变多的。

4. RDD的延迟加载. Lazy. 构造的时候的第一个参数就是父RDD;

就相当于 f(x) = x + 1; x =y+1; y=z+1; 这就是依赖,最终的计算是先计算z的值,然后再计算y的值,最终计算出f(x);

Spark不产生中间结果,但是需要手动cache,persist. 内存消耗比较大,最主要是spark的shuffle机制(spark1.x以前有数据规模的限制.现在没有,原因主要是shuffle的原因,但是最新版本以来shuffle支持更多的方式.)

5.  容错的两种方式: 数据检查点和记录数据的更新;

Spark采取的是记录数据更新方式容错为什么更高效:

A) RDD是不可变 + lazy:数据的恢复需要checkpoint. 比如从第900步恢复的前提是要在900步进行checkpoint.

B) RDD是粗粒度.  写操作是粗粒度.但是rdd读操作既可以是粗粒度也可以是细粒度的. 高效率的. 简化复杂度. 但有部分场景不适合spark rdd. 爬虫就不合适.

6. 关于数据本地性问题, 如果读取的是比如mysql, hbase,那么需要这些集群和spark集群在一个集群里; 这样都是内网进行读取; 针对不同机房数据不同步问题可以采用Tachyon 内存同步.

7. 实时事物性处理不适用spark.

8.  如果是scala集合的话,那么针对数据本地性,是数据集合会被copy到计算节点内存当中.

Spark RDD解密的更多相关文章

  1. 14.spark RDD解密

    开篇:spark各种库,sparksql,sparkmachicelearning,等这么多库底层都是封装的RDD.意味着 1:RDD本身提供了通用的抽象, 2:spark现在有5个子框架,sql,S ...

  2. Spark RDD概念学习系列之rdd的依赖关系彻底解密(十九)

    本期内容: 1.RDD依赖关系的本质内幕 2.依赖关系下的数据流视图 3.经典的RDD依赖关系解析 4.RDD依赖关系源码内幕 1.RDD依赖关系的本质内幕 由于RDD是粗粒度的操作数据集,每个Tra ...

  3. [Spark内核] 第28课:Spark天堂之门解密

    本課主題 什么是 Spark 的天堂之门 Spark 天堂之门到底在那里 Spark 天堂之门源码鉴赏 引言 我说的 Spark 天堂之门就是SparkContext,这篇文章会从 SparkCont ...

  4. 通过WordCount解析Spark RDD内部源码机制

    一.Spark WordCount动手实践 我们通过Spark WordCount动手实践,编写单词计数代码:在wordcount.scala的基础上,从数据流动的视角深入分析Spark RDD的数据 ...

  5. Spark Rdd coalesce()方法和repartition()方法

    在Spark的Rdd中,Rdd是分区的. 有时候需要重新设置Rdd的分区数量,比如Rdd的分区中,Rdd分区比较多,但是每个Rdd的数据量比较小,需要设置一个比较合理的分区.或者需要把Rdd的分区数量 ...

  6. Spark RDD API详解(一) Map和Reduce

    RDD是什么? RDD是Spark中的抽象数据结构类型,任何数据在Spark中都被表示为RDD.从编程的角度来看,RDD可以简单看成是一个数组.和普通数组的区别是,RDD中的数据是分区存储的,这样不同 ...

  7. Spark RDD aggregateByKey

    aggregateByKey 这个RDD有点繁琐,整理一下使用示例,供参考 直接上代码 import org.apache.spark.rdd.RDD import org.apache.spark. ...

  8. Spark - RDD(弹性分布式数据集)

    org.apache.spark.rddRDDabstract class RDD[T] extends Serializable with Logging A Resilient Distribut ...

  9. Spark RDD Operations(1)

    以上是对应的RDD的各中操作,相对于MaoReduce只有map.reduce两种操作,Spark针对RDD的操作则比较多 ************************************** ...

随机推荐

  1. Android瀑布流照片墙实现,体验不规则排列的美感

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/10470797 传统界面的布局方式总是行列分明.坐落有序的,这种布局已是司空见惯,在 ...

  2. mysql远程连接:ERROR 1130 (HY000): Host '*.*.*.*' is not allowed to connect to this MySQL server解决办法

    安装完MySQL后,远程连接数据库的时候,出现 ERROR 1130 (HY000): Host '192.168.0.1' is not allowed to connect to this MyS ...

  3. Jetty入门

    Jetty的入门 一.开发环境 Eclipse  4.3.1 Maven  3.1 Jetty  9.0.6.v20130930 Jetty的下载地址: http://download.eclipse ...

  4. Android性能优化方法(八)

    Android SDK tools目录下提供一个观察布局的工具,层级观察器(Hierarchy Viewer).Hierarchy Viewer工具是一个非常好的布局优化工具,同时,你也可以通过它学习 ...

  5. [转]框架模式 MVC 在Android中的使用

    算来学习Android开发已有2年的历史了,在这2年的学习当中,基本掌握了Android的基础知识.越到后面的学习越感觉困难,一来是自认为android没啥可学的了(自认为的,其实还有很多知识科学), ...

  6. Rtp 协议实现网络广播台网络收音机

    RTP协议介绍:http://www.360doc.com/content/11/1009/15/496343_154624612.shtml 本文中使用了 StreamCoders 的 RTP.ne ...

  7. 【概念笔记】 EL表达式

    一.EL简介 1.语法结构  ${expression} 2.[]与.运算符  EL 提供.和[]两种运算符来存取数据. 当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要 ...

  8. Dynamic CRM 2013学习笔记(四十三)流程6 - 自定义流程活动

    当我们在流程里添加步骤时,有一些默认的步骤,像创建.更新.发邮件等,但如果你想加一个里面没有的步骤,比如发SMS消息,或者调用一个外部的web service,怎么办?这时就只能自定义一个流程活动了. ...

  9. iis php5.3.8 默认文档无效 404 - 找不到文件或目录

    环境:WIN2008 R2 IIS7.5 / .NET4.X 新开1站点,使用php(5.3.8),默认首页文档已设置为index.php,网站所在目录的网站运行时用户权限正确,应用程序池是asp.n ...

  10. [C++] socket - 6 [API互斥事件对象实现线程同步]

    /*API互斥事件对象实现线程同步*/ #include<windows.h> #include<stdio.h> DWORD WINAPI myfun1(LPVOID lpP ...