Spark学习笔记二:Spark Core

2019-12-21  本文已影响0人  开发者连小超

一、RDD

RDD概念

RDD(Resilient Distributed Dateset)弹性分布式数据集

RDD的五大特性
  1. RDD是由一系列的partition组成的。
  2. 算子(函数)是作用在每一个partition上的。
  3. RDD之间有一系列的依赖关系。
  4. 分区器是作用在K,V格式的RDD上。
  5. RDD提供一系列最佳的计算位置。
RDD理解图
RDD图.png
窄依赖和宽依赖

RDD之间有一系列的依赖关系,依赖关系又分为窄依赖和宽依赖。

RDD的宽窄依赖.jpg

二、Spark任务执行原理

Spark任务执行原理.png

以上图中有四个机器节点,Driver和Worker是启动在节点上的进程,运行在JVM中的进程。

三、Spark代码流程

  1. 创建SparkConf对象
    可以设置Application name。
    可以设置运行模式及资源需求。
  2. 创建SparkContext对象
  3. 基于Spark的上下文创建一个RDD,对RDD进行处理。
  4. 应用程序中要有Action类算子来触发Transformation类算子执行。
  5. 关闭Spark上下文对象SparkContext。

四、Spark算子

1.Transformations转换算子

Transformations类算子是一类算子(函数)叫做转换算子,如map,flatMap,reduceByKey等。Transformations算子是延迟执行,也叫懒加载执行。

Transformation类算子:

2.Action行动算子

Action类算子也是一类算子(函数)叫做行动算子,如foreach,collect,count等。Transformations类算子是延迟执行,Action类算子是触发执行。一个application应用程序中有几个Action类算子执行,就有几个job运行。

Action类算子:

3.控制算子

控制算子有三种,cache,persist,checkpoint,以上算子都可以将RDD持久化,持久化的单位是partition。cache和persist都是懒执行的。必须有一个action类算子触发执行。checkpoint算子不仅能将RDD持久化到磁盘,还能切断RDD之间的依赖关系。

cache和persist的注意事项:
 1.cache和persist都是懒执行,必须有一个action类算子触发执行。
 2.cache和persist算子的返回值可以赋值给一个变量,在其他job中直接使用这个变量就是使用持久化的数据了。持久化的单位是partition。
 3.cache和persist算子后不能立即紧跟action算子。
 4.cache和persist算子持久化的数据当applilcation执行完成之后会被清除。
 错误:rdd.cache().count() 返回的不是持久化的RDD,而是一个数值了。

checkpoint的执行原理:
 当RDD的job执行完毕后,会从finalRDD从后往前回溯。
 当回溯到某一个RDD调用了checkpoint方法,会对当前的RDD做一个标记。
 Spark框架会自动启动一个新的job,重新计算这个RDD的数据,将数据持久化到HDFS上。
 优化:对RDD执行checkpoint之前,最好对这个RDD先执行cache,这样新启动的job只需要将内存中的数据拷贝到HDFS上就可以,省去了重新计算这一步。

checkpoint代码示例:

SparkConf conf = new SparkConf();
conf.setMaster("local").setAppName("checkpoint");
JavaSparkContext sc = new JavaSparkContext(conf);
sc.setCheckpointDir("./checkpoint");
JavaRDD<Integer> parallelize = sc.parallelize(Arrays.asList(1,2,3));
parallelize.checkpoint();
parallelize.count();
sc.stop();
上一篇下一篇

猜你喜欢

热点阅读