zoukankan      html  css  js  c++  java
  • RDD源码分析

    RDD源码解析

    一、

    RDD.scala

    - Resilient Distributed Dataset (RDD) 
        弹性分布式数据集
    
        弹性: 体现在计算上面
    
    - the basic abstraction in Spark
    - Represents an immutable
        val
    
        RDDA == RDDB
    
    - partitioned collection of elements
    - that can be operated on in parallel 
    
    RDDA: (1,2,3,4,5,6,7,8,9)               operated +1。(对RDD执行加1的操作)
        hadoop000:Partition1: (1,2,3)        +1
        hadoop001:Partition2: (4,5,6)        +1
        hadoop002:Partition3: (7,8,9)        +1
    
    对RDD上的所有元素进行加1,他在hadoop000,hadoop001,hadoop002三台机器上同时进行
    对RDD进行操作,也就是对`RDD上的所有分区进行操作`
    
    abstract class RDD[T: ClassTag](
        @transient private var _sc: SparkContext,
        @transient private var deps: Seq[Dependency[_]]
      ) extends Serializable with Logging {}
    
    
    关键字: (从上面获得的信息)
    1) 抽象类: RDD必然是有之类实现的,我们使用时直接使用其之类即可
    2) Serializable(序列化)
    3) Logging(日志)
    4) T (泛型)
    5) SparkContext (入口点)
    6) @transient(注解,暂时不懂)
    

    二、JdbcRDD.scala

    class JdbcRDD[T: ClassTag](
        sc: SparkContext,
        getConnection: () => Connection,
        sql: String,
        lowerBound: Long,
        upperBound: Long,
        numPartitions: Int,
        mapRow: (ResultSet) => T = JdbcRDD.resultSetToObjectArray _)
      extends RDD[T](sc, Nil) with Logging {
    

    三、 RDD五大特性:

    Internally, each RDD is characterized by five main properties:  
            (1、2、3必选,4、5可选)  
        1) A list of partitions    (分区列表)
        2) A function for computing each split/partition   (用于计算每个 分片/分区 的函数)
        3) A list of dependencies on other RDDs   (其它的RDD依赖关系)
                RDDA => RDDB => RDDC ==> RDDD  
        4) Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)    (可选的,用于键值RDD的分区程序,(例如: 说明RDD时哈希分区))
        5) Optionally, a list of preferred locations to compute each split on (e.g. block locations foran HDFS file) (可选的,用于计算每个首选位置的分片列表(例如: 块位置为HDFS文件))
    
       preferred locations (一个RDD,对应多个partition,所有有 s )
    
       深入理解 RDD 与 关键字 之间的关系
       Resilient、Distributed、Dataste   (弹性、分布式、数据集)
    
        (木桶原理,性能由最短的那块板决定,由最慢的任务决定计算性能)
    
    

    四、RDD五大特性和RDD源码中 方法的 对应关系

      1) def compute(split: Partition, context: TaskContext): Iterator[T]
      
      2) protected def getPartitions: Array[Partition]
      
      3) protected def getDependencies: Seq[Dependency[_]] = deps
      
      4) protected def getPreferredLocations(split: Partition): Seq[String] = Nil
      
      5) @transient val partitioner: Option[Partitioner] = None
    
    
  • 相关阅读:
    BZOJ1588:[HNOI2002]营业额统计——题解
    POJ2079:Triangle——题解
    POJ3384:Feng Shui——题解
    POJ3525:Most Distant Point from the Sea——题解
    POJ1279:Art Gallery——题解
    重大改革!Python,最接近人工智能的语言~将被加入高考科目!
    滴滴招聘-各类测试人才
    DJI大疆创新招聘-自动化测试工程师
    自动化测试ROI实践
    自动化测试ROI实践
  • 原文地址:https://www.cnblogs.com/suixingc/p/rdd-yuan-ma-fen-xi.html
Copyright © 2011-2022 走看看