面试集锦(七)20210227_大数据面试题

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

今日内容

  1. 前言
  2. sql题目训练
  3. spark部分面试题(一)

前言

今天是面试集锦第七篇,希望可以一直坚持下去,将最好的知识和总结分享给大家。等面试系列完结之后,会进行汇总,分大数据 不同节点进行汇总分类。

sql题目训练

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

T1、求出所有“年销售总额>12000”的店铺及其年度销售总额

select 
sid,
sum(dz,fz,sp) as  year_sum
from 
shop_sale
group by sid
having sum(dz,fz,sp)>12000;

T2、求出每家店铺“月总额最高的三个月”的销售数据

select 
sid,
dt,
dz,
fz,
sp
from 
(
select 
sid,
dt,
dz,
fz,
sp,
row_number()  over(partition by sid order by (dz+fz+sp) desc) as rn
from 
shop_sale) t where rn<=3

T3、求出每家店铺“月总额最低的三个月”的销售数据

select 
sid,
dt,
dz,
fz,
sp
from 
(
select 
sid,
dt,
dz,
fz,
sp,
row_number()  over(partition by sid order by (dz+fz+sp) asc) as rn
from 
shop_sale) t where rn<=3

T4、写出近一周内每天排名前三的栏目及点击量

id,lanmu,dt

1,a,2021-2-21
2,a,2021-2-21
3,a,2021-2-22
4,a,2021-2-23
5,a,2021-2-24
6,a,2021-2-25
7,b,2021-2-22
8,b,2021-2-23
9,b,2021-2-23
10,b,2021-2-24
11,b,2021-2-25
12,b,2021-2-25
13,c,2021-2-23
14,b,2021-2-23

一次点击为一条记录

每天内 排名前三    分组topN

  1. 限定数据为7天内,datediff(current_date())<=7
  2. 求每天内 排名前三; 一条记录为1个点击 需要先汇总 每个栏目 在每天的点击量为多少;进而再求出每天里点击量排名前三的栏目
  3. 首先  根据栏目、时间分组 count 求出每个栏目、每天的点击量
  4. 之后 使用编号函数 按照时间(每天)分区 点击量倒序排序
  5. 过滤 编号小于等于3的数据 即为结果

with tmp as 
(select
lanmu,
dt,
count(1)  as cnt 
from 
tb
where datediff(current_date(),dt)<=7
group by lanmu,dt)


======》

a,2021-02-21,2
a,2021-02-22,3
b,2021-02-21,6
b,2021-02-22,3

select 
dt,
lanmu,
cnt
from 
(
select 
lanmu,
dt,
cnt
row_number() over(partition by dt order by cnt desc) rn 
from 
tmp ) t1 where rn<=3

spark部分面试题

1、Spark 和mr程序有什么区别

1)mr只能做离线计算,如果实现复杂计算逻辑,一个MR搞不定,就需要将多个MR按照先后顺序连成一串,一个MR计算完成后会将计算结果写入到HDFS中,下一个MR将上一个MR的输出作为输入,这样就要频繁读写HDFS,网络IO和磁盘IO会成为性能瓶颈。从而导致效率低下。比如夜间执行mr任务,第二天查看结果,mr程序 稳定,安全。

2).spark既可以做离线计算,又可以做实时计算,提供了抽象的数据集(RDD、Dataset、DataFrame、DStream),有高度封装的API,算子丰富,并且使用了更先进的DAG有向无环图调度思想。可以对执行计划优化后在执行,并且可以数据可以cache到内存中进行复用。

但mr和spark的shuffle时数据均落本地磁盘。

2、Mr程序和spark谁运算快?

没有绝对的谁快、谁慢,但在生产环境中大部分情况下还是spark运算比较快。对于比较复杂的数据运算,mr的话需要一个个的糖葫芦一样串起来,下一个mr需要读取上一个mr的reduce输出到hdfs的结果数据,这样频繁的跟hdfs进行IO、网络 交互,所以运算很慢;而spark 不用,下游直接去上游的磁盘里对应的分区拉取数据就ok,不用跟hdfs进行交互。并且的话,mr程序是分区 且区内进行排序的,而spark可以排序也可以不排序。但二者中间结果都落地本地磁盘。

3、请你说一下spark的执行流程

spark on yarn   cluster 模式

 

  1. client向ResourceManager申请资源,返回一个applicationId
  2. Client上传 spark jars下的jar包、自己写的程序jar包和配置文件
  3. ResourceManager找一个资源充足的nodemanager
  4. 让它从hdfs上下载jar包和配置,并启动ApplicationMaster(Driver)
  5. Applicationmaster向ResourceManger申请资源
  6. ResouceManager上的ResourceSchedule 自行调度寻找合适的nodemanager,并把nodemanager的信息返回给applicationmaster
  7. Applicationmaster跟相应的nodemanager进行通信
  8. Nodemanager从hdfs上下载资源
  9. Nodemanager启动executor
  10. Executor启动之后反向向Driver(Applicationmaster)进行注册

4、广播变量是什么?有什么作用?

  1. 广播变量是Driver端将数据广播到属于该application的executor,多个executor可以相互传递数据,可以提高效率
  2. 作用:一般为了实现mapside join。在drive端将数据广播出去,driver端获取到一个引用,在函数内部可以使用到这个引用。这个引用会伴随着每一个task发送到executor上,可以通过这个引用获取到事先广播好的数据。
  3. 如何广播:在driver端,使用sc.brodcast(阻塞的同步方法),返回一个引用
  4. 广播变量一旦广播出去,就不可以再改变,除非重新广播。
  5. 注意要广播的对象必须事先序列化接口

5、什么是闭包

在一个函数的内部,引用到了函数外部的一个变量,这种现象就叫做闭包。

函数 是在Driver端定义,但是却是在executor端执行的。

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值