spark数据倾斜问题

mac2024-10-17  56

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)