面试集锦(六)20210225_大数据面试题

8 篇文章 1 订阅
3 篇文章 0 订阅

今日内容

  1. 一道sql题目训练
  2. 两道spark面试题

sql题目训练

延续上一篇数据

店铺id,时间,电子类,服装类,食品类
sid,dt,dz,fz,sp
a,2020-01,3000,4000,5000
a,2020-02,4000,9800,5000
a,2020-03,3000,3333,6555
a,2020-04,3000,4444,5000
a,2020-05,4444,4000,4546
a,2020-06,3000,4000,2888
a,2020-07,2333,1879,5000
a,2020-08,4366,4000,5000
b,2020-01,1222,2322,2322
b,2020-02,3232,322,122
b,2020-03,2322,2232,6555
b,2020-04,3000,322,232
b,2020-05,2232,2232,232
b,2020-06,3000,3232,2888
b,2020-07,2333,3232,2121
b,2020-08,121,3232,5000
c,2020-01,1222,2322,2322
c,2020-02,222,322,122
c,2020-03,1211,2232,6555
c,2020-04,2122,322,232
c,2020-05,343,2232,232
c,2020-06,3434,3232,2888
c,2020-07,4564,8888,2121
c,2020-08,8888,9999,12000


求哪些店铺电子类产品的销售有过连续3月增长

由题意,此题是一道连续性增长问题,思路:先过滤求出所有的增长的月份记录,

再使用编号函数,进行编号,进而求差,分组,条件 count =3 过滤出结果 并去重 求出店铺id即可

with tmp as 
(
select 
sid,
count(1) as cnts
from 
(
select 
sid,
(cast(substr(dt,6) as int)-rn) as dif
from 
(
select 
sid,
dt,
row_number() over(partition by sid order by dt asc) as rn
from 
(
select 
sid,
dt
from 
(
select 
sid,
dz,
dt,
lag(dz,1,null) over(partition by sid order by dt asc) as next_dz ) t1
where next_dz>dz ) t2 ) t3 ) t4 group by sid,dif )
select sid from tmp where cnts>=3 group by sid

两道spark面试题

1、什么是rdd

Rdd是一个分布式的可容错的抽象的大数据集合,它本身不存储数据,里面放的是对数据的描述信息,比如数据要从哪里读,数据怎么运算等。

它有以下特点:

  1. 分区。每个RDD都有自己的分区,分区的多少决定着task的并行度,但并不是分区越多,效率越高,这还和运算资源有关。
  2. Compute 计算函数。对RDD进行操作,实际上是对它里面的分区进行操作,这个函数作用在它的每个分区上。
  3. RDD与RDD彼此之间存在着依赖关系,可以根据依赖关系划分stage、恢复失败的任务。父RDD与子RDD的依赖关系:宽依赖和窄依赖。宽依赖会有shuffle的产生,会划分stage,而窄依赖没有shuffle产生。RDD的容错机制就是依靠 父RDD与子RDD之间的依赖关系。
  4. 最优位置。即将executor上的task调度到数据所在的机器上,要求worker和datanode部署在同一个节点上,通过和namenode的交互获取数据块的位置信息
  5. 分区器。如果要发生shuffle,要使用分区器,默认使用HashPartitioner,分区器决定着数据到下游的哪个分区中。

 2、spark streaming 是 Exactly-Once 吗?

流计算引擎对状态一致性的保证:
常用的几种语义:
exactly once 准确一次
at least once 至少一次  数据不会有丢失  但可能重复
at most once  至多一次   数据可能有丢失  但不会重复

spark-streaming 实现了exactly-once 吗
spark-streaming 可以保证exactly-once 
主要有两种 
一种是聚合性操作  
先局部进行聚合操作  然后将结果收集到Driver端进行聚合 之后再将结果存入到有事务特性的数据库中,比如mysql

具体描述:数据经过聚合之后 ,数据量已经变得很少了,可以将计算好的结果收集到Driver端。
在Driver端获取偏移量,然后将计算好的结果和偏移量,使用支持事务的数据库,比如mysql,在同一个事务中将偏移量和
计算好的数据一起写入到数据库,保证同时成功;而如果失败的话,事务会回滚,让任务重启,接着上一次成功的偏移量
继续读取

还有一种是非聚合性操作(幂等性)
在Driver端获取偏移量,在Executor中使用(函数内部使用到外部的对象,闭包)
将计算好的结果和偏移量同时写入到Hbase或者elasticsearch  同一行中(hbase不支持事务,但支持行级事务)
如果数据写入成功,但是偏移量未更新成功,则沿着这个分区内偏移量最大的那个开始重新读取、处理数据
并写入hbase  覆盖掉原来的数据  实现幂等性

 更多学习、面试资料尽在微信公众号:Hadoop大数据开发 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值