1、 RDD是一个抽象类,带泛型的,可以支持多种类型,String、Person、User…
2、RDD : Resilient Distributed Dataset 弹性 分布式 数据集 是spark里面最基本的一个抽象的单元,是一个不可变的数据集分区的并行计算
3、 什么是Resilient 弹性:spark 作为一个和mapreduce类似的计算框架,能做到分布式节点挂掉或者某个数据节点丢了后自动进行数据跟踪和修复,这就弹性。
4、什么是分布式 Distributed 分布式:数据可以存放在不同节点之上那么程序在运行时候必然是在不同的节点上运行。
5、什么是Dataset数据集:可以理解为就是一个数组 一个集合或者一个文件那这些数组啊文件啊集合啊转换成我们的RDD就是数据集。
Represents an
immutable:不可变
partitioned collection of elements :分区
Array(1,2,3,4,5,6,7,8,9,10) 3个分区: (1,2,3) (4,5,6) (7,8,9,10)
that can be operated on in parallel: 并行计算的问题
单机存储/计算==>分布式存储/计算
数据的存储: 切割 HDFS的Block
数据的计算: 切割(分布式并行计算) MapReduce/Spark
存储+计算 : HDFS/S3+MapReduce/Spark
RDD特性:
Internally, each RDD is characterized by five main properties:
-
A list of partitions RDD由 一系列的分区/分片 所构成
-
A function for computing each split/partition
一个函数会把计算作用到分割就是分区上,其实就是对一个RDD作用一个函数就是对这个RDD的所有分区都执行相同函数的一个操作。
y = f(x)
rdd.map(_+1) -
A list of dependencies on other RDDs
一个函数作用到RDD上,那么由于RDD是不可变的,所以就会以依赖模式作用
例如:rdd1 ==> rdd2 ==> rdd3 ==> rdd4
dependencies: *****
rdda = 5个partition
==>map
rddb = 5个partition -
Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
这是一个可选的RDD基于健值队的一个分割策略
例如:把属于139的手机号分到一个redcuing上去执行。 -
Optionally, a list of preferred locations to compute each split on (e.g. block locations for an HDFS file)
可选的计算规则:会首先计算本地化最好的路径进行计算
一个文件存放在3个节点之上 a b c 三个节点 那么 a b c 节点上有数据那么就会把作业调度到这三个节点上运行,如果这是在加一个d 那么d节点上没数据就要先把数据传输到d节点上这就涉及到io 网络等情况。
总结:数据在哪优先把作业调度到数据所在的节点进行计算:移动数据不如移动计算
五大特性源码体现:
def compute(split: Partition, context: TaskContext): Iterator[T] 特性二
def getPartitions: Array[Partition] 特性一
def getDependencies: Seq[Dependency[_]] = deps 特性三
def getPreferredLocations(split: Partition): Seq[String] = Nil 特性五
val partitioner: Option[Partitioner] = None 特性四
图解RDD
SparkContext和SparkConf详解
第一要务:创建SparkContext
连接到Spark“集群”:local、standalone、yarn、mesos
通过SparkContext来创建RDD、广播变量到集群
在创建SparkContext之前还需要创建一个SparkConf对象
RDD创建方式
Parallelized Collections
External Datasets
If using a path on the local filesystem, the file must also be accessible at the same path on worker nodes
我们上课是在单节点上的:一个节点, hello.txt只要在这台机器上有就行了
standalone: Spark集群: 3个节点 local path 都是从节点的本地读取数据 不建议
开发pyspark应用程序
IDE: IDEA pycharm
第一步:在本机上安装spark
第二步:在本季上安装JDK
第三步:配置pycharm IDE