Review(9)

1.Spark 数据倾斜的解决方案

         发生现象:绝大多数task非常快,个别task执行慢。

         发生原理:进行shuffle时,必须将各个节点上相同的key拉取到某个节点上的一个task进行处理,按照key进行聚合或者join操作,若某个key的数据量特别大,就会发生数据倾斜

         解决思路:拆---合

         总体发生倾斜概括: join  group by  count(distinct)

              MapReduce  hash(key)%numReduce

             Spark Task 默认重试三次===》然后发生数据倾斜

         定位数据倾斜:

             通过spark web  Ui 查看报错的那个stage 的各个task 的运行时间以及分配的数据量,才能确定是否是由于数据倾斜导致的内存溢出。  

         查看导致数据倾斜的key的数据分布情况

              rdd.CountByKey() 统计出各个Key出现的次数Collect/take到客户端 打印一下。

  a)少数几个key导致数据倾斜,且字段不参与业务统计,可以直接过滤掉 1%

              select domain ,count(distinct domain)  from tb where domain !=null  group by domain

   b)提高shuffle操作的并行度  2%

          没有改变数据分布情况,只是减少每个task处理的数据量

        思路:可以将原本分配给一个task的多个key分配给多个 task,从而让每个task处理比原来更少的数据,举例来说,如果原本5个key,每个key对应10条数据,这5个key都是分配给一个task的,那么这个task就要处理50条数据,而增加了shuffle read task 以后,每个task就分配到一个key,即每个task处理10条数据。

  c)两阶段聚合(局部聚合 全局聚合) group by  50% 

       实现思路:第一次局部聚合,先给每个key打一个随机数,比如10以内的随机数,此时原先一样的key就变得不一样了,比如

    (hello,1)(hello,1),(hello,1)就会变成(1_hello,1),(2_hello,2),接着对打上随机数后的数据进行reduceByKey等聚合操作进行局部聚合,变成(1_hello,1),(2_hello,2),然后将各个key的前缀丢掉,就会变成(hello,2),(hello,3),再进行全局聚合,得到结果。

 

2.Spark源代码阅读过没

 3 spark reducebykey  groupbykey

4 repartition coalesce区别

5  spark streaming+kafka 2.4.0之下 bug

    版本多少?官网的1:1看过没有  什么意思?offset如何管理?

     消费语义选择哪种?多少秒一个批次?一个批次处理多少条数据

    一个批次处理时间多少?

    怎样监控job的是否有堆积消息  batch未处理?

    假如mysql-->kafka--有序数据 请问如何保证spark streaming消费全局有序?

6 Spark Sql 外部数据源哪几种?源代码看过没?如何自定义外部数据源?

7 Structured streaming 的流join流 

8  Structured streaming的水印  watermark了解吗

9   flink 如何保证Exactly-once state 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值