spark数据倾斜问题

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)默认减少分区

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值