1) RDD
1) 概念
RDD(Resilient Distributed Dateset),弹性分布式数据集。
2) RDD的五大特性:
1. RDD是由一系列的partition组成的。
2. 函数是作用在每一个partition(split)上的。
3. RDD之间有一些列的依赖关系。
4. 分区器是作用在K,V格式的RDD上。
5. RDD提供一系列最佳的计算位置。
2) RDD理解图:
*注意:
textFile方法底层封装的是读取MR读取文件的方式,读取文件之前先split,默认split大小是一个block大小。
RDD实际上不存储数据,这里方便理解,暂时理解为存储数据。
*什么是K,V格式的RDD?
如果RDD里面存储的数据都是二元组对象,那么这个RDD我们就叫做K,V格式的RDD。
*哪里体现RDD的弹性(容错)?
partition数量,大小没有限制,体现了RDD的弹性。
RDD之间依赖关系,可以基于上一个RDD重新计算出RDD。
*哪里体现RDD的分布式?
RDD是由Partition组成,partition是分布在不同节点上的。
RDD提供计算最佳位置,体现了数据本地化。体现了大数据中“计算移动数据不移动”的理念。
3)Spark任务执行原理
以上图中有四个机器节点,Driver和Worker是启动在节点上的进程,运行在JVM中的进程。
Ø Driver与集群节点之间有频繁的通信。
Ø Driver负责任务(tasks)的分发和结果的回收。任务的调度。如果task的计算结果非常大就不要回收了。会造成oom。
Ø Worker是Standalone资源调度框架里面资源管理的从节点。也是JVM进程。
Ø Master是Standalone资源调度框架里面资源管理的主节点。也是JVM进程。
4)Spark代码流程
1 . 创建SparkConf对象
Ø 可以设置Applicationname。
Ø 可以设置运行模式及资源需求。
2. 创建SparkContext对象
3. 基于Spark的上下文创建一个RDD,对RDD进行处理。
4. 应用程序中要有Action类算子来触发Transformation类算子执行。
关闭Spark上下文对象SparkContext。5 ) Transformations转换算子
1.概念:
Transformations类算子是一类算子(函数)叫做转换算子,如map,flatMap,reduceByKey等。Transformations算子是延迟执行,也叫懒加载执行。
Transformation类算子:
|
Ø filter 过滤符合条件的记录数,true保留,false过滤掉。
Ø map 将一个RDD中的每个数据项,通过map中的函数映射变为一个新的元素。 特点:输入一条,输出一条数据。
Ø flatMap 先map后flat。与map类似,每个输入项可以映射为0到多个输出项。
Ø sample 随机抽样算子,根据传进去的小数按比例进行又放回或者无放回的抽样。
Ø reduceByKey 将相同的Key根据相应的逻辑进行处理。 Ø sortByKey/sortBy 作用在K,V格式的RDD上,对key进行升序或者降序排序。 |
6 ) Action行动算子
|
Ø count 返回数据集中的元素数。会在结果计算完成后回收到Driver端。
Ø take(n) 返回一个包含数据集前n个元素的集合。
Ø first first=take(1),返回数据集中的第一个元素。
Ø foreach 循环遍历数据集中的每个元素,运行相应的逻辑。
Ø collect 将计算结果回收到Driver端。
|
ü 思考:一千万条数据量的文件,过滤掉出现次数多的记录,并且其余记录按照出现次数降序排序。
............................未完待续........................