转载:https://blog.csdn.net/fengfengchen95/article/details/80431315
一.Driver Program
包含程序的main()方法程序入口,RDDs的定义和操作,它管理很多节点executors
二、SparkContext
Driver Program通过SparkContext对象访问Spark
SparkContext对象代表和一个集合的连接
每一个可用的JVM中只有一个SparkContext,在创建一个新的SparkContext之前必须先停止该JVM中可用的SparkContext.
实例化时需要一个SparkConf对象去描述应用的配置信息。
在Shell中SparkContext自动创建好了,就是sc
三、RDD
Resilient distributed datasets(弹性分布式数据集,简写RDD)
RDD是并行的分布到整个集群中,比如:如下的语句中wordcount.txt中数据load line这个RDD后,数据会分片自动存放到集群的每个节点上,数据计算时也是各几点并行计算。
val lines=sc.textFile("/data/shellScript/wordcount.txt")
RDD是Spark 分发数据和计算的抽象类。
RDD是一个不可改变的分布式式集合对象,Spark中所有的计算都是通过RDD的创建,转换,操作完成的,一个RDD的内部是有很多分片组成的。
四、RDD的特性
1.分区列表(a list of partitions)
RDD是被分区的,每一个分区都会被一个计算任务(Task)处理,分区数决定了并行计算的数量,RDD的默认并行数从父RDD传给子RDD.
2.每一个分区都有一个计算函数(a function for computint each split)
3.依赖于其他RDD的列表(a list of dependencies on other RDDs)
由于RDD每次转换都会生成新的RDD,所以RDD会形成类似流水线一样的前后依赖关系。RDD的依赖关系分为宽依赖和窄依赖:
窄依赖:每一个parent RDD的Partition最多被Child RDD的一个Partition使用。
宽依赖:多个child RDD的partition会依赖同一个parent RDD,典型操作:groupByKey,sortByKey
4.key-value数据类型的RDD分区器、控制分区策略和分区数
每个Key-value形式的RDD都有Partitoner属性,它决定了RDD如何分区。
5.每一个分区都有一个优先位置列表
五、RDD弹性特性的7方面
1.自动进行内存和磁盘数据存储的切换
2.基于血统的高效容错机制
3.Task如果失败会自动进行特定次数的重试。
4.Stage如果失败会自动进行特定次数的重试。
5.Checkpoint和Persist(检查点,持久化),可主动或被动触发。
6、数据调度弹性
7、数据分片的高度弹性。
六、RDD的创建方式
1.通过已经存在的scala集合创建RDD
val data=Array(1,2,3,4,5)
val disData=sc.parallelize(data)
2.通过HDFS和本地文件系统创建RDD
val file=spark.textFile("hdfs://...")
val infos=file.filter(line=>line.contains("info")
val count=infos.count()
3,其它的RDD的转换
从父RDD转换可得到新的RDD,通过Spark内核给用户提供transformation来对RDD进行各种算子的转化,形成新的RDD
4.其它的RDD的创建
基于DB创建RDD,基于S3创建RDD,或者基于数据流创建RDD都是比较常见的创建RDD的方式。
.
一.Driver Program
包含程序的main()方法程序入口,RDDs的定义和操作,它管理很多节点executors
二、SparkContext
Driver Program通过SparkContext对象访问Spark
SparkContext对象代表和一个集合的连接
每一个可用的JVM中只有一个SparkContext,在创建一个新的SparkContext之前必须先停止该JVM中可用的SparkContext.
实例化时需要一个SparkConf对象去描述应用的配置信息。
在Shell中SparkContext自动创建好了,就是sc
三、RDD
Resilient distributed datasets(弹性分布式数据集,简写RDD)
RDD是并行的分布到整个集群中,比如:如下的语句中wordcount.txt中数据load line这个RDD后,数据会分片自动存放到集群的每个节点上,数据计算时也是各几点并行计算。
val lines=sc.textFile("/data/shellScript/wordcount.txt")
RDD是Spark 分发数据和计算的抽象类。
RDD是一个不可改变的分布式式集合对象,Spark中所有的计算都是通过RDD的创建,转换,操作完成的,一个RDD的内部是有很多分片组成的。
四、RDD的特性
1.分区列表(a list of partitions)
RDD是被分区的,每一个分区都会被一个计算任务(Task)处理,分区数决定了并行计算的数量,RDD的默认并行数从父RDD传给子RDD.
2.每一个分区都有一个计算函数(a function for computint each split)
3.依赖于其他RDD的列表(a list of dependencies on other RDDs)
由于RDD每次转换都会生成新的RDD,所以RDD会形成类似流水线一样的前后依赖关系。RDD的依赖关系分为宽依赖和窄依赖:
窄依赖:每一个parent RDD的Partition最多被Child RDD的一个Partition使用。
宽依赖:多个child RDD的partition会依赖同一个parent RDD,典型操作:groupByKey,sortByKey
4.key-value数据类型的RDD分区器、控制分区策略和分区数
每个Key-value形式的RDD都有Partitoner属性,它决定了RDD如何分区。
5.每一个分区都有一个优先位置列表
五、RDD弹性特性的7方面
1.自动进行内存和磁盘数据存储的切换
2.基于血统的高效容错机制
3.Task如果失败会自动进行特定次数的重试。
4.Stage如果失败会自动进行特定次数的重试。
5.Checkpoint和Persist(检查点,持久化),可主动或被动触发。
6、数据调度弹性
7、数据分片的高度弹性。
六、RDD的创建方式
1.通过已经存在的scala集合创建RDD
val data=Array(1,2,3,4,5)
val disData=sc.parallelize(data)
2.通过HDFS和本地文件系统创建RDD
val file=spark.textFile("hdfs://...")
val infos=file.filter(line=>line.contains("info")
val count=infos.count()
3,其它的RDD的转换
从父RDD转换可得到新的RDD,通过Spark内核给用户提供transformation来对RDD进行各种算子的转化,形成新的RDD
4.其它的RDD的创建
基于DB创建RDD,基于S3创建RDD,或者基于数据流创建RDD都是比较常见的创建RDD的方式。
.