• 深入理解Spark RDD


    RDD是什么?

    RDD,全称是Reslilient Distributed Datasets,是一个容错的,并行的数据结构,可以让用户显式地将数据存储到磁盘和内存中,并能控制数据的分区。同时,RDD还提供了一组丰富的操作来操作这些数据。在这些操作中。诸如map,flatMap,filter等转换操作实现了monad模式,很好的契合了Scala的集合操作。除此之外,RDD还提供了诸如join,groupBy,reduceByKey等更为方便的操作,(注意:reduceByKey是action,而非transformation),以支持常见的数据运算。

    通常来讲,针对数据处理有集中常见模型,包括:Iterative Algorithms,Relational Queries,MapReduce,Stream Processing。例如Hadoop MapReduce采用了MapReduces模型,Storm则采用了Stream Processing模型。RDD混合了这四种模型,使得Spark可以应用于各种大数据处理场景。

    RDD作为数据结构,本质上是一个只读的分区记录集合。一个RDD可以包含多个分区,每个分区就是一个dataset片段。RDD可以相互依赖。如果RDD的每个分区最多只能被一个Child RDD的一个分区使用,则称之为narrow dependency;若多个Child RDD分区都可以依赖,则称之为wide dependency。不同的操作依据其特性。,可以回产生不同的依赖。例如map操作会产生narrow dependency.而join操作则参数wide dependency.

    Spark之所以将依赖分为narrow和wide.基于两点原因。

    首先,narrow dependencies可以支持在同一个cluster node上以管道形式执行多条命令,例如在执行了map后,紧接着执行filter。相反,wide dependecies需要所有的福分区都是可用的,可能还需要调用雷速MapReduce之类的操作进行跨节点传递。

    其次,则是从失败恢复的角度考虑。narrow dependencies的失败恢复更有效,因为它只需要重新计算丢失的parent partition即可,而且可以并行地在不同节点进行重计算。而wide dependencies牵涉到RDD各级的多个Parent Partitions。下图说明了narrow dependencies与wide dependencies之间的区别:

  • 相关阅读:
    Make something people want
    POJ 3662 Telephone Lines (二分+Dijkstra)
    POJ 2010 Moo University
    HDU 6627 2017ACM/ICPC亚洲区域赛沈阳站 Rabbits
    HDU 6625 2017ACM/ICPC亚洲区域赛沈阳站 Little Boxes(高精度整数加法)
    Codeforces 877D Olya and Energy Drinks(BFS+剪枝)
    CodeForces 876B Divisiblity of Differences (数学水题)
    POJ 2139 Six Degrees of Cowvin Bacon (Floyd最短路)
    UESTC 1057 秋实大哥与花 (线段树)
    Linux安装Oh-my-zsh
  • 原文地址:https://www.cnblogs.com/jingblogs/p/5531611.html
Copyright © 2020-2023  润新知