惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Attack and Defense Labs
Attack and Defense Labs
aimingoo的专栏
aimingoo的专栏
月光博客
月光博客
D
Darknet – Hacking Tools, Hacker News & Cyber Security
K
Kaspersky official blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Stack Overflow Blog
Stack Overflow Blog
T
Threatpost
AWS News Blog
AWS News Blog
小众软件
小众软件
美团技术团队
L
Lohrmann on Cybersecurity
Hacker News: Ask HN
Hacker News: Ask HN
Security Latest
Security Latest
Jina AI
Jina AI
Hacker News - Newest:
Hacker News - Newest: "LLM"
宝玉的分享
宝玉的分享
A
Arctic Wolf
M
MIT News - Artificial intelligence
Scott Helme
Scott Helme
爱范儿
爱范儿
The Cloudflare Blog
博客园 - 聂微东
云风的 BLOG
云风的 BLOG
博客园 - 叶小钗
有赞技术团队
有赞技术团队
The GitHub Blog
The GitHub Blog
T
The Blog of Author Tim Ferriss
I
InfoQ
V
Visual Studio Blog
N
Netflix TechBlog - Medium
Latest news
Latest news
C
CERT Recently Published Vulnerability Notes
T
Tenable Blog
H
Heimdal Security Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Cisco Talos Blog
Cisco Talos Blog
L
LINUX DO - 最新话题
博客园 - 三生石上(FineUI控件)
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Application and Cybersecurity Blog
Application and Cybersecurity Blog
T
Threat Research - Cisco Blogs
S
Secure Thoughts
The Hacker News
The Hacker News
S
Schneier on Security
博客园 - 【当耐特】
T
The Exploit Database - CXSecurity.com
博客园_首页
N
News | PayPal Newsroom
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org

博客园 - 曹振华

移动营业厅推广 DolphinScheduler2.0.1 源码 招聘java工程师 Apache seaTunnel 数据集成平台 Scala 深入浅出实战经典 第81讲:Scala中List的构造是的类型约束逆变、协变、下界详解 Scala 深入浅出实战经典 第79讲:单例深入讲解及单例背后的链式表达式 Scala 深入浅出实战经典 第78讲:Type与Class实战详解 Scala 深入浅出实战经典 第77讲:模式匹配下的提取器动手构造实战 Scala 深入浅出实战经典 第76讲:模式匹配下的赋值语句 Scala 深入浅出实战经典 第75讲:模式匹配下的For循环 Scala 深入浅出实战经典 第68讲:Scala并发编程原生线程Actor、Cass Class下的消息传递和偏函数实战解析 Scala 深入浅出实战经典 第67讲:Scala并发编程匿名Actor、消息传递、偏函数解析 Scala 深入浅出实战经典 第66讲:Scala并发编程实战初体验 Scala 深入浅出实战经典 第65讲:Scala中隐式转换内幕揭秘、最佳实践及其在Spark中的应用源码解析 Scala 深入浅出实战经典 第64讲:Scala中隐式对象代码实战详解 Scala 深入浅出实战经典 第63讲:Scala中隐式类代码实战详解 Scala 深入浅出实战经典 第62讲:Scala中上下文界定内幕中的隐式参数实战详解 Scala 深入浅出实战经典 第61讲:Scala中隐式参数与隐式转换的联合使用实战详解及其在Spark中的应用源码解析 Scala 深入浅出实战经典 第60讲:Scala中隐式参数实战详解以及在Spark中的应用源码解析
Spark RDD解密
曹振华 · 2016-01-17 · via 博客园 - 曹振华

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

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

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

2. RDD弹性数据集

   特点: 

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

       B) 基于lineage的高效容错;

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

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

       E) Checkpointpersist.

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:Intshuffle:Boolean=false):RDD[T] 

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

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

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

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

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

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

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

      Spark不产生中间结果,但是需要手动cachepersist. 内存消耗比较大,最主要是sparkshuffle机制(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到计算节点内存当中.