Spark

Spark原理图

2021-04-12  本文已影响0人  八爪鱼下水

回顾Hive中自定义函数有三种类型:

l ** 第一种:UDF(User-Defined-Function) 函数**

n 一对一的关系,输入一个值经过函数以后输出一个值;

n 在Hive中继承UDF类,方法名称为evaluate,返回值不能为void,其实就是实现一个方法;

l ** 第二种:UDAF(User-Defined Aggregation Function) 聚合函数**

n 多对一的关系,输入多个值输出一个值,通常与groupBy联合使用;

l 第三种:UDTF(User-Defined Table-Generating Functions) 函数

n 一对多的关系,输入一个值输出多个值(一行变为多行);

n 用户自定义生成函数,有点像flatMap;

目前来说Spark 框架各个版本及各种语言对自定义函数的支持:

在SparkSQL中,目前仅仅支持UDF函数和UDAF函数:

l UDF函数:一对一关系;

l UDAF函数:聚合函数,通常与group by 分组函数连用,多对一关系;

由于SparkSQL数据分析有两种方式:DSL编程和SQL编程,所以定义UDF函数也有两种方式,不同方式可以在不同分析中使用。

Spark中driver的主要工作是什么?

Driver
1 - 是一个进程, 我们编写的一个Spark应用程序就运行在Driver上,由Driver进程执行;
2 - 接收executor启动后的反向注册
3 - Driver开始执行main函数,之后执行到Action算子时,开始划分stage,每个stage生成对应的taskSet,之后将task分发到各个Executor上执行。

client 模式

图片2.png

cluster 模式

图片3.png

standalone集群有四个重要组成部分.

  1. Driver
  1. Master
  1. Worker
  1. Executor

Standalone Client 模式:

Standalone Cluser 模式:


请详述Repartition和Coalesce关系与区别

Repartition: 重新分区消耗比较昂贵的算子.

spark出了一个优化版本Coalesce,可以尽量避免数据迁移,

Coalesce使用已有的partition去尽量减少数据shuffer

Repartition创建新的partition并且使用full shuffer


数据分布上:

Coalesce会使每个partition数量不同, Repartition会使数据分布均匀相等(数据量的情况下)

Coalesce不会启用shuffer 不能提高分区只能降低,而且指定多了只会有一个分区在跑数据.

分别简述Spark中的缓存机制(cache和persist)与checkpoint机制,并指出两者的区别与联系,以及Spark如何实现容错机制?

都是缓存级别

cache()调用的persist()

def persist(): this.type = persist(StorageLevel.MEMORY_ONLY)

//cache只有一个默认的缓存级别MEMORY_ONLY
def cache(): this.type = persist() 

persist内存

内存
磁盘
副本
序列化
堆外内存

上一篇下一篇

猜你喜欢

热点阅读