大数据面试-20210317

目录

基础题

1、RDD、DataFrame、DataSet三者的区别与联系?

联系:

区别:

思考题

2、对比 Hadoop MapReduce 和 Spark 的Shuffle 过程

Mapreduce shuffle:

map端的shuffle:

reduce端的shuffle:

Spark shuffle:

MapReduce shuffle和 Spark Shuffle的异同:

智力题

3、小美是一所中学的信息科技老师,她有一张 seat 座位表,平时用来储存学生名字和与他们相对应的座位 id。


基础题

1、RDD、DataFrame、DataSet三者的区别与联系?

联系:

 a. RDD、DataFrame、Dataset全都是spark平台下的分布式弹性数据集,为处理超大型数据提供便利。如果同样的数据都给到这三个数据结构,他们分别计算之后,都会给出相同的结果。不同是的他们的执行效率和执行方式。

 b.三者都有惰性机制,在进行创建、转换,如map方法时,不会立即执行,只有在遇到Action如foreach时,三者才会开始遍历运算,极端情况下,如果代码里面有创建、转换,但是后面没有在Action中使用对应的结果,在执行时会被直接跳过。

 c.三者都会根据spark的内存情况自动缓存运算,这样即使数据量很大,也不用担心会内存溢出。

 d.三者都有partition的概念,也有许多共同的函数,如filter、排序等。

区别:

 a. 首先从版本的产生上来看:RDD (Spark1.0) —> Dataframe(Spark1.3) —> Dataset(Spark1.6),在后期的Spark版本中,DataSet会逐步取代RDD和DataFrame成为唯一的API接口。

 b.rdd不支持sparksql操作,dataframe和dataset都支持。

 c.与dataset和rdd不同,dataframe每一行的类型固定为row,只能通过解析才能获取各个字段的值,没法直接访问。

 d.Dataset和DataFrame拥有完全相同的成员函数,区别只是每一行的数据类型不同。DataFrame也可以叫Dataset[Row],每一行的类型是Row,不解析的话每一行究竟有哪些字段,各个字段又是什么类型都无从得知,只能用上面提到的getAS方法或者共性中的模式匹配拿出特定字段。而Dataset中,每一行是什么类型是不一定的,在自定义了case class之后可以很自由的获得每一行的信息。可以看出,Dataset在需要访问列中的某个字段时是非常方便的。

思考题

2、对比 Hadoop MapReduce 和 Spark 的Shuffle 过程

Mapreduce shuffle:

mapreduce的shuffle过程主要是从map结束到reduce开始之间的过程。shuffle阶段又分为map端的shuffle和reduce端的shuffle。

map端的shuffle

mapreduce任务在Shuffle之前,也就是在map阶段,MapReduce会对要处理的数据进行分片(split)操作,为每一个分片分配一个MapTask任务。接下来map会对每一个分片中的每一行数据进行处理得到键值对(key,value),此时得到的键值对又叫做“中间结果”。因为频繁的磁盘I/O操作会严重影响效率,“中间结果”不会立刻写入磁盘,而是优先存储到map节点的“环形内存缓冲区”,写入过程中同时做partition操作,为每个键值对都增加一个分区属性值。当写入的数据量达到预先设置的阙值后,便溢写spill到磁盘,写入前根据key进行排序。至此map端的工作已经全部结束。

reduce端的shuffle

reduce task通过rpc获取到map task完成的信息,shuffle的后半段开始启动。reduce task从每个map task的结果文件中拉取对应分区的数据,再次合并、排序,最终将结果鞋到hdfs上。

Spark shuffle:

Spark的Shuffle是在MapReduce Shuffle基础上进行的调优。其实就是对排序、合并逻辑做了一些优化。在Spark中Shuffle write相当于MapReduce 的map,Shuffle read相当于MapReduce 的reduce。Shuffle 过程本质上都是将 Map 端获得的数据使用分区器进行划分,并将数据发送给对应的 Reducer 的过程。在Spark中,负责shuffle过程的执行、计算和处理的组件主要就是ShuffleManager,也即shuffle管理器。ShuffleManager随着Spark的发展有两种实现的方式,分别为HashShuffleManager和SortShuffleManager,因此spark的Shuffle有Hash Shuffle和Sort Shuffle两种。SortShuffleManager相较于HashShuffleManager来说,有了一定的改进。

MapReduce shuffle和 Spark Shuffle的异同:

1.从整体上看,两者没有太大的区别。都是将mapper(spark里是shuffleMapTask)的输出进行分区,不同分区送到不同的reducer(spark里是下一个stage的shuffleMapTask或者ResultTask)。

2.从流程上看,前者在进入combine和reduce的records必须先sort,后者在spark1.2之后才采用sort-based做默认的shuffle实现。

3.从流程实现角度看来看,前者将处理流程划分为明显的几个阶段,如map、spill、merge等,各司其职。而后者没有明确的阶段,只有不同的stage和一系列的转换。

4.二者完全不同的是,前者map task必须将所有的数据都写入本地磁盘文件以后,才能启动reduce操作,来拉取数据。但是Spark不需要,spark默认情况下,是不会对数据进行排序的。因此ShuffleMapTask每写入一点数据,ResultTask就可以拉取一点数据,然后在本地执行我们定义的聚合函数和算子,进行计算。这也是spark速度快于mapreduce的原因。

智力题

3、小美是一所中学的信息科技老师,她有一张 seat 座位表,平时用来储存学生名字和与他们相对应的座位 id。

其中纵列的 id 是连续递增的

小美想改变相邻俩学生的座位。

你能不能帮她写一个 SQL query 来输出小美想要的结果呢?

示例:

假如数据输入的是上表,则输出结果如下:

注意:

如果学生人数是奇数,则不需要改变最后一个同学的座位。

请写出对应的SQL:

SELECT id,if(id%2=1,LEAD(student,1,student) OVER(ORDER BY id),lag(student,1)  OVER(ORDER BY id)) from seat

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据架构师Pony

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值