1.Spark出现数据倾斜场景:
1.在join的时候,有很多数据的join的值为空值.那么这个时候所有空值的数据都会分配到一个task中从而出现数据倾斜
解决方案:过滤空值
2,当分区数设置过小,导致很多key聚集到一个分区从而导致数据倾斜
解决方案:增大分区数
3.某个key特别多的groupBy的时候出现倾斜
解决方案:局部聚合+全局聚合
4.大表join小表,因为大表中某一个key的数据特别的时候,也会出现数据倾斜
解决方案:将小表广播出去,避免shuffle操作
5,大表join大表的时候,由于某个或者某几个key特比多的时候,也会出现数据倾斜
解决方案:将产生数据倾斜的key过滤出来,进行单独处理,其余没有出现数据倾斜的key照常处理
6.大表join大表的时候,有很多的key数据量都比较大,那这些key都会导致数据倾斜
解决方案:将表进行扩容

2.SQL题目
表结构:id,name,account,一条语句查询出大于平均金额的账号。不能用子查询
SELECT a.* FROM account a , account b GROUP BY a.id HAVING a.account>=AVG(b.account)

3.数仓Hive数据模型
星型模型
核心是一个事实表及多个非正规化描述的维度表组成。
雪花模型
它是星型模型的扩展,不同的是维度表被规范化,进一步分解到附加表中。
星座模型
由多个事实表组合,维表是公共的,可以被多个事实表共享。星座模型是数据仓库最常使用的模型。

4.运行一个 Spark 程序运行流程
①启动 Driver, 创建 SparkContext
②Client 提交程序给 Drive, Drive 向 Cluster Manager 申请集群资源
③资源申请完毕, 在 Worker 中启动 Executor
④Driver 将程序转化为 Tasks, 分发给 Executor 执行

5.添加新列
select null as year
withcolumn

6.Kafka数据只有在一个分区内是有序的

7.分桶与分区
分区 是指按照数据表的某列或某些列分为多个区,区从形式上可以理解为文件夹,比如我们要收集某个大型网站的日志数据,一个网站每天的日志数据存在同一张表上,由于每天会生成大量的日志,导致数据表的内容巨大,在查询时进行全表扫描耗费的资源非常多。 那其实这个情况下,我们可以按照日期对数据表进行分区,不同日期的数据存放在不同的分区,在查询时只要指定分区字段的值就可以直接从该分区查找。 分桶 分桶是相对分区进行更细粒度的划分。 分桶将整个数据内容按照某列属性值得hash值进行区分,如要安装name属性分为3个桶,就是对name属性值的hash值对3取摸,按照取模结果对数据分桶。 如取模结果为0的数据记录存放到一个文件,取模为1的数据存放到一个文件,取模为2的数据存放到一个文件。

8.RDD五大属性
分区列表
计算函数
依赖关系(分区的依赖关系)
分区函数
数据本地优先

9.弹性分布式数据集
容错
可分区(动态调整分区)
内存不足使用磁盘

10.Spark运行模式较多,包含但是不止以下
local 就是单机,jobs都在这台机器上运行。
standalone 就是说多台机器组成一个集群,然后jobs可以分在多台机器上运行 yarn 就是说spark程序运行在yarn上(别的应用共享服务器建议用yarn)
client 就是jobs在不同机器运行,然后结果返回到这台机器上。
cluster 就是jobs在不同机器运行,结果返回到集群中的某一台机器上。

11.spark参数
1.foreachpartitions() 一批数据处理.每个分区
2.分区数=本次任务CPU的核数的2-3倍
3.Try(arr(6).toInt).getOrElse(0)
4.//spark.default.parallelism 设置shuffle的分区数

12.实时与离线区别
实时:
web接口(写kafka代码,数据写入kafka)+sparkstreaming/flink/structuredStreaming+hbase/es/mysql

离线:
flume + kafka + hdfs + hive + spark + mysql => 前端展示

13.repartitioin与coalesce区别
repartitioin(numPartitions)默认可大可小
coalesce(numPartitions, shuffle)默认减少分区