大数据Spark中重要知识点掌握(2)

1.RDD,DataFrame,DataSet的区别?

RDD:分布式数据集

DataFrame:一个不可变的分布式数据集,是一种数据结构,为数据提供了Schema视图,可以把他当做是数据库的一张表,底层是RDD

DataSet:DataSet是DataFrame的扩展,具有RDD的有点以及SparkSql优化执行引擎的优点

2.Spark的控制算子有哪些,分别有什么作用?

控制算子:cache persist checkpoint

cache:将RDD持久化到内存中,后续可以直接访问内存中的RDD,避免了重复计算

persist:将RDD持久化到内存或者磁盘中,持久化方式可以通过参数指定

checkpoint:将RDD持久化到外部存储系统中,这样即使Spark集群发生故障,也可以从外部存储系统中恢复RDD

3.Yarn的Client提交和Cluster提交?

Client提交:

1.应用程序的代码和依赖都存储在客户端中

2.适用于小规模数据,简单易用,调试方便

3.客户端将应用程序提交到RescourseManager,RescourseManager根据客户端提交的信息启动ApplicationMaster

Cluster提交:

1.应用程序的代码和依赖都存储在分布式文件系统中

2.适用于大规模数据,数据都存储在分布式文件系统上的共享资源中,减少了与RescourseManager的通信

3.客户端将应用程序提交到RescourseManager,只需要指定应用程序的存储位置和其他配置信息,然后启动ApplicationMaster

4.Spark 单表 SQL 分组聚合查询数据倾斜如何解决

为了减少 Shuffle 数据量以及 Reduce 端的压力,通常 Spark SQL 会在 Map 端做一个预聚合,就是在 Shuffle 前将同一分区内相同 Key 的记录先进行一个预计算,再将结果进行 Shuffle,发送到 Reduce 端做汇总,类似 MR MapTask 的提前 Combiner,所以执行计划中 HashAggregate 通常成对出现。适用场景:聚合类的 Shuffle 操作,部分 Key 数据量较大,且大 Key 的数据分布在很多不同的切片。


解决逻辑:

两阶段聚合(加盐局部聚合 + 去盐全局聚合)+ Map-Side 聚合(将 groupByKey 算子转换为 reduceByKey算子,reduceByKey 可以在 Map 端预聚合,类似于 MapReduce 中的 Combiner)。首先,通过 map 算子给每个数据的 Key 添加随机数前缀,对 Key 进行打散,将原先一样的 Key 变成不一样的 Key,然后进行第一次聚合,这样就可以让原本被一个 Task 处理的数据分散到多个 Task 上去做局部聚合;随后,去除掉每个 Key的前缀,再次进行聚合。


此方法对于由 groupByKey、reduceByKey 这类算子造成的数据倾斜有比较好的效果,仅仅适用于聚合类的 Shuffle 操作,适用范围相对较窄。如果是 JOIN 类的 Shuffle 操作,还得用其他的解决方案。

5.查看 SQL 执行计划的关键字是什么,有什么用?

xplain 可以看到SQL的物理执行计划和逻辑执行计划,以及计划进行了什么优化,划分了哪些Stage等等。

  1. 并行度调优:根据执行计划中的Stage信息,合理配置每个Stage的并行任务数,以达到资源利用率最大化。
  2. 减少Shuffle:根据执行计划中Shuffle产生的数据量,考虑通过Join Reorder、Repartition等方式来减少Shuffle数据。
  3. 数据倾斜优化:从执行计划的数据大小统计发现数据倾斜情况,使用Salting、Histogram等技术进行优化。
  4. 广播大表:发现执行计划中有大表Join小表的情况,考虑使用Broadcast Join来避免全表Shuffle。
  5. 合理使用内存:根据执行计划中的数据量统计结果,调整存储内存和执行内存的比例。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据界一个小小的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值