`

spark内核揭秘-10-RDD源码分析

阅读更多

RDD的核心方法:

首先看一下getPartitions方法的源码:

getPartitions返回的是一系列partitions的集合,即一个Partition类型的数组

我们就想进入HadoopRDD实现:

1、getJobConf():用来获取job Configuration,获取配置方式有clone和非clone方式,但是clone方式 是not thread-safe,默认是禁止的,非clone方式可以从cache中获取,如cache中没有那就创建一个新的,然后再放到cache中

2、进入 getInputFormcat(jobConf)方法:

3、进入inputFormat.getSplits(jobConf, minPartitions)方法:

进入FileInputFormcat类的getSplits方法:

5、进入HadoopPartition:

 

而getDependencies表达式RDD之间的依赖关系,如下所示:

getDependencies返回的是依赖关系的一个Seq集合,里面的Dependency数组中的下划线是类型的PlaceHolder

我们进入ShuffledRDD类中的getDependencies方法:

我们进入ShuffleDependency类:

每个RDD都会具有计算的函数,如下所示:

我们进入HadoopMapPartitionsWithSplitRDD的 compute方法:

Compute方法是针对RDD的每个Partition进行计算的,其TaskContext参数的源码如下:

getPreferredLocations是寻找Partition的首选位置:

我们进入NewHadoopRDD的getPreferredLocations:

 

其实RDD还有一个可选的分区策略:

Partitioner的源码如下:

可以看出默认使用的是HashPartitioner,要注意key为Array的情况;

spark.default.parallelism必须要设置,否则会根据partitions数据来传输RDD,这样也会很容易出现OOM

1
3
分享到:
评论

相关推荐

    spark-3.1.3-bin-without-hadoop.tgz

    Spark Streaming则构建在RDD之上,通过微批处理实现对实时数据流的处理,支持复杂的窗口操作和状态管理。这对于实时监控、在线分析等应用场景非常有用。 MLlib是Spark的机器学习库,包含了多种算法如分类、回归、...

    spark-3.1.2.tgz & spark-3.1.2-bin-hadoop2.7.tgz.rar

    - RDD(弹性分布式数据集):Spark的基础数据结构,是不可变、分区的数据集合,可以在集群中并行操作。 - DataFrame:Spark SQL引入的数据模型,它是基于表和列的抽象,提供了更高级别的抽象和优化。 - Dataset:...

    spark-assembly-1.5.2-hadoop2.6.0.jar

    Spark-assembly-1.5.2-hadoop2.6.0.jar中的优化包括RDD(弹性分布式数据集)的缓存策略、Task调度优化、内存管理优化等,以确保在大数据处理中实现高效的性能。 7. 开发和调试: 开发者在本地开发时,可以直接...

    spark-2.4.7-bin-hadoop2.6.tgz

    1. **弹性分布式数据集(RDD)**:RDD是Spark的基本数据抽象,它是不可变、分区的记录集合,可以在集群中并行操作。RDD提供了高效的转换(transformations)和动作(actions)操作。 2. **内存计算**:Spark通过将...

    spark-3.1.3-bin-hadoop3.2.tgz

    这个版本的Spark不仅提供了源码,还包含了预编译的二进制文件,使得在Linux环境下快速部署和使用Spark成为可能。 Spark 的核心特性在于它的弹性分布式数据集(Resilient Distributed Datasets,简称RDD),这是一种...

    spark-rdd-APi

    描述:“内容根据Spark RDD.scala和ParRDDFunctions.scala源码中RDD顺序整理,包含RDD功能解释。对熟悉Spark RDD很有用。”表明本文档涉及的是从Spark源码中对RDD API的深入整理和功能解析。这将会帮助已经熟悉Spark...

    spark-1.6.0-bin-hadoop2.6.tgz

    Spark是Apache软件基金会下的一个开源大数据处理框架,它以其高效、灵活和易用性而闻名。 Spark-1.6.0-bin-hadoop2.6.tgz 是针对Linux系统的Spark安装包,包含了Spark 1.6.0版本以及与Hadoop 2.6版本兼容的构建。这...

    spark-2.2.2-bin-hadoop2.7.tgz

    在Spark 2.2.2中,除了基本的RDD接口,还引入了DataFrame和Dataset,它们提供了一种更高级的、类型安全的数据处理方式,使得开发人员能够更方便地进行SQL查询和复杂的数据分析。 Spark 2.2.2支持多种数据源,包括...

    spark-3.2.4-bin-hadoop3.2-scala2.13 安装包

    1. **Spark**: Spark的核心在于它的弹性分布式数据集(RDD),这是一个容错的内存计算模型。它提供了一组高级APIs,支持批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)和机器学习(MLlib)等多种...

    spark-3.1.2-bin-hadoop3.2.tgz

    2. **Resilient Distributed Datasets (RDD)**:RDD是Spark的基本数据结构,它是不可变、分区的元素集合,能够在集群中的节点上分布式存储。 3. **弹性**:Spark提供了容错机制,当工作节点失败时,可以自动恢复丢失...

    spark-assembly-1.5.2-hadoop2.6.0jar包

    在实际应用中,开发人员可以利用Spark的API编写Scala代码,创建DataFrame或RDD(弹性分布式数据集),并利用Spark的并行计算能力对数据进行处理。例如,可以使用Spark SQL执行复杂查询,或者使用Spark Streaming实现...

    spark-2.1.1-bin-hadoop2.7.tgz.7z

    Spark是Apache软件基金会下的一个开源大数据处理框架,它以其高效、灵活和易用性而闻名。Spark 2.1.1是该框架的一个稳定版本,它在2.1.0的基础上进行了一些改进和修复,提供了更好的性能和稳定性。这个特定的压缩包...

    spark-1.6.0-bin-hadoop2.4.tgz

    此外,Spark的弹性分布式数据集(Resilient Distributed Datasets, RDD)是其核心概念,它提供了一种在内存中处理数据的方式,大大提升了计算效率。Spark 1.6.0还引入了DataFrame,进一步优化了数据处理性能,简化了...

    spark-2.3.0-bin-hadoop2.7版本.zip

    1. **弹性分布式数据集(Resilient Distributed Datasets, RDD)**:RDD是Spark的基本数据结构,它是不可变的、分区的、容错的。用户可以通过并行操作对RDD进行计算,且RDD之间的转换都是延迟执行的,直到需要结果时...

    spark-2.4.0-bin-hadoop2.6.tgz

    10. **图处理GraphX**:Spark的GraphX提供了一种编程模型来处理图形数据,支持图的创建、查询和转换,适用于社交网络分析、推荐系统等领域。 通过理解以上知识点,你可以更好地理解和使用Spark 2.4.0在Hadoop 2.6...

    spark-2.4.0-bin-without-hadoop.tgz

    Spark 2.4.0 是一个重要的版本,它包含了许多改进和新特性,尤其是对于数据分析和机器学习社区。这个版本的Spark不包含Hadoop的依赖,名为"spark-2.4.0-bin-without-hadoop.tgz",这意味着它不内置Hadoop的客户端,...

    spark-2.0.0-bin-hadoop2.7.tgz.zip

    Spark的核心在于它的弹性分布式数据集(Resilient Distributed Datasets,简称RDD),这是一种可以在集群中并行操作的数据结构。RDD具有容错性,一旦创建,就能在节点故障时自动恢复。Spark 2.0.0在此基础上引入了...

    spark-2.2.0-bin-hadoop2.6.tgz

    Spark是Apache软件基金会下的一个大数据处理框架,以其高效、易用和可扩展性著称。在给定的压缩包"spark-2.2.0-bin-hadoop2.6.tgz"中,包含了运行Spark在Hadoop YARN(Yet Another Resource Negotiator)模式下所需...

    spark-3.3.3-bin-hadoop3.tgz

    Spark的RDD(弹性分布式数据集)是其基础抽象,它提供了一种高效的、容错的数据存储和计算模型。在Spark 3.3.3中,对RDD的优化和性能提升使得大规模数据处理更加高效。 其次,Spark SQL是Spark处理结构化数据的重要...

Global site tag (gtag.js) - Google Analytics