1. Spark介绍
1.1. 什么是Spark
Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。 Spark 是加州大学伯克利分校的 AMP实验室所开源的类 Hadoop MapReduce 的通用并行计算框架, Spark 拥有 Hadoop MapReduce 所具 有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以缓存在内存中,从而不再需要读写 HDFS , 减少磁盘数据交互,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的算法。 Spark 是 Scala 编写,方便快速编程。
1.2. Spark 与MR 的区别
都是分布式计算框架, Spark 计算中间结果基于内存缓存, MapReduce 基于 HDFS 存储。也正因此, Spark 处理数据的能力一般是 MR 的三到五倍以上, Spark 中除了基于内存计算这一个计算快的原因, 还有 DAG(DAGShecdule) 有向无环图来切分任务的执行先后顺序
2. SparkCore
2.1. Partition
2.1.1. 概念
- Spark RDD 是一种分布式的数据集,由于数据量很大,因此要它被切分并存储在各个结点的分区当 中
- Spark中,RDD(Resilient Distributed Dataset)是其最基本的抽象数据集,其中每个RDD是由若 干个Partition组成
2.1.2. 分区方式
- Spark包含两种数据分区方式:HashPartitioner(哈希分区)和RangePartitioner(范围分区)。
- HashPartitioner(哈希分区)
- 分区规则为:partitionId = Key.hashCode % numPartitions
- 有可能产生数据倾斜
- RangePartitioner(范围分区)
- 解决数据倾斜问题
- 基于抽样的思想来对数据进