大数据面试题

8. 大数据

1. 介绍一下Hadoop

Hadoop是一套大数据解决方案,提供了一套分布式的系统基础架构,包括HDFS,MapReduce和YARN。

  • HDFS提供分布式的数据存储
  • MapReduce负责进行数据运算
  • YARN负责任务调度

HDFS是主从架构的,包括namenode,secondary namenode和datanode。datanode负责存储数据,namenode负责管理HDFS的目录树和文件元信息。

MapReduce包括jobtracker,tasktracker和client。Jobtracker负责进行资源调度和作业监控。tasktracker会周期性的通过心跳向jobtracker汇报资源使用情况。

2. 说一下MapReduce的运行机制

MapReduce包括输入分片、map阶段、combine阶段、shuffle阶段和reduce阶段。分布式计算框架包括client,jobtracker和tasktracker和调度器。

  • 输入分片阶段,mapreduce会根据输入文件计算分片,每个分片对应一个map任务
  • map阶段会根据mapper方法的业务逻辑进行计算,映射成键值对
  • combine阶段是在节点本机进行一个reduce,减少传输结果对带宽的占用
  • shuffle阶段是对map阶段的结果进行分区,排序,溢出然后写入磁盘。将map端输出的无规则的数据整理成为有一定规则的数据,方便reduce端进行处理,有点像洗牌的逆过程。 https://blog.csdn.net/ASN_forever/article/details/81233547
  • reduce阶段是根据reducer方法的业务逻辑进行计算,最终结果会存在hdfs上。
3. 介绍一下kafka

https://blog.csdn.net/qq_29186199/article/details/80827085

https://blog.csdn.net/student__software/article/details/81486431

kafka是一个分布式消息队列,包括producer、broker和consumer。kafka会对每个消息根据topic进行归类,每个topic又会分成多个partition,消息会根据先进先出的方式存储。消费者通过offset进行消费。

kafka的特点是吞吐量高,可以进行持久化,高可用。

4. 为什么kafka吞吐量高?/介绍一下零拷贝

kafka吞吐量高是因为一个利用了磁盘顺序读写的特性,速度比随机读写要快很多,另一个是使用了零拷贝,数据直接在内核进行输入和输出,减少了用户空间和内核空间的切换。

零拷贝:传统文件读取并发送至网络的步骤是:先将文件从磁盘拷贝到内核空间,然后内核空间拷贝到用户空间的缓冲区,再从用户空间拷贝到内核空间的socket缓冲区,最后拷贝到网卡并发送。而零拷贝技术是先将文件从磁盘空间拷贝到内核缓冲区,然后直接拷贝至网卡进行发送,减少了重复拷贝操作。

5. 介绍一下spark

https://blog.csdn.net/u011204847/article/details/51010205

spark是一个通用内存并行计算框架。它可以在内存中对数据进行计算,效率很高,spark的数据被抽象成RDD(弹性分布式数据集)并且拥有DAG执行引擎,兼容性和通用性很好。可以和Hadoop协同工作。

6. 介绍一下spark-streaming

https://blog.csdn.net/yu0_zhang0/article/details/80569946

spark-streaming是spark的核心组件之一。主要提供高效的流计算能力。spark-streaming的原理是将输入数据流以时间片进行拆分,然后经过spark引擎以类似批处理的方式处理每个时间片数据。

spark-streaming将输入根据时间片划分成一段一段的Dstream(也就是离散数据流),然后将每一段数据转换成RDD进行操作。

7. spark的transformation和action有什么区别

spark的算子分成transformation和action两类

  • transformation是变换算子,这类算子不会触发提交,是延迟执行的。也就是说执行到transformation算子的时候数据并没有马上进行计算,只是记住了对RDD的逻辑操作
  • action算子是执行算子,会出发spark提交作业,并将数据输出到spark
8. spark常用的算子说几个

spark的算子分为两类:transformation和action

常用的transformation算子:

// union 求并集
val rdd8 = rdd6.union(rdd7)

// intersection 求交集 
val rdd9 = rdd6.intersection(rdd7)

// join 将rdd进行聚合连接,类似数据库的join 
val rdd3 = rdd1.join(rdd2)

// map flatMap mapPartition 传入一个函数对数据集中的每一个数据进行操作 
val arr1 = Array(1,2,3,4,5)
val arr2 = rdd1.map(_+1)

// countByKey reduceByKey partitionByKey 统计每个key有多少个键值对 

常用的action算子

// reduce 按照一定的方法将元素进行合并 
val rdd2 = rdd1.reduce(_+_)

// collect 将RDD转换为数组
rdd1.collect

// top 返回最大的k个元素
rdd1.top(2)
9. 如何保证kafka的消息不丢失

https://blog.csdn.net/liudashuang2017/article/details/88576274

我们可以从三个方面保证kafka不丢失消息

  • 首先从producer生产者方面,为send()方法注册一个回调函数,可以得知消息发送有没有成功;将重试次数retrie设置为3;设置acks参数为all,当消息被写入所有同步副本之后才算发送成功。
  • 在consumer消费者方面,关闭自动提交;
  • 在broker集群方面,设置复制系数replica.factor为大于等于3
10. kafka如何选举leader

首先启动的broker在zookeeper中创建一个临时节点并让自己称为leader,其他的节点会创建watch对象进行监听并成为follower,当broker宕机的时候,其他follower会尝试创建这个临时节点,但是只有一个能够创建成功,创建成功的broker就会成为leader。

11. 说下spark中的宽依赖和窄依赖

https://blog.csdn.net/a1043498776/article/details/54889922

  • 宽依赖:指子RDD的分区依赖于父RDD的所有分区,举例:groupbykey,join
  • 窄依赖:指父RDD的每个分区被最多一个子RDD的分区所依赖,举例:map,filter
12. 说下spark中stage是依照什么划分的

https://zhuanlan.zhihu.com/p/57124273

spark中的stage其实是一组并行的任务,spark会将多个RDD根据依赖关系划分成有向无环图DAG,DAG会被划分成多个stage,划分的依据是RDD之间的宽窄依赖。遇到宽依赖就划分stage。因为宽依赖与窄依赖的区别之一就是宽依赖会发生shuffle操作,所以也可以说stage的划分依据是是否发生shuffle操作。

13. spark的内存管理是怎样的

https://www.jianshu.com/p/4f1e551553ae

https://www.cnblogs.com/wzj4858/p/8204282.html

spark的内存包括静态内存管理和统一内存管理两种机制。静态内存管理中存储和执行两块内存区域是分开的,统一内存管理中两块内存之间可以相互借用

  • 静态内存管理:静态内存管理机制下堆内内存包括安全内存,存储内存,shuffle内存和unroll内存

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gxjWVjoj-1616740884172)(fig/spark内存一.png)]

  • 统一内存管理:统一内存管理机制下内存分为spark内存,用户内存和保留内存三部分。用户内存存放用户代码逻辑和自定义数据结构等,保留内存存放的是spark的内部对象和逻辑。
14. spark的容错机制是什么样的

https://blog.csdn.net/dengxing1234/article/details/73613484

spark的容错机制是通过血统(lineage)和checkpoint来实现的 。

  • RDD的lineage可以看作是一个重做日志(redo log)记录的是它粗粒度上的transformation操作。当rdd的分区数据丢失时,它可以根据lineage重新计算来恢复数据。 在窄依赖上可以直接计算父RDD的节点数据进行恢复,在宽依赖上则要等到父RDD所有数据计算完后并将结果shuffle到子RDD上才能完成恢复。
  • 如果DAG中的lineage过长,或者在宽依赖上进行checkpoint的收益更大,就会使用checkpoint进行容错,将RDD写入磁盘进行持久化存储,如果节点数据丢失,就从磁盘读取数据进行恢复。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值