大数据开发超高频面试题!大厂面试必看!包含Hadoop、zookeeper、Hive、flume、kafka、Hbase、flink、spark、数仓等

大数据开发面试题

包含Hadoop、zookeeper、Hive、flume、kafka、Hbase、flink、spark、数仓等高频面试题。
数据来自原博主爬虫获取!

Hadoop

一、HDFS文件写入和读取过程

可灵活回答

1)HDFS读写原理(流程)

2)HDFS上传下载流程

3)讲讲(介绍下)HDFS

4)HDFS存储机制

回答这个问题之前,我们先来看下机架感知 机制,也就是HDFS上副本存储结点的选择。

在这里插入图片描述

Hadoop3.x副本结点选择:

由上图可知,第一个副本在Client所处的节点上。如果客户端在集群外,随机选一个。

第二个副本在另一个机架的随机一个节点。

第三个副本在第二个副本所在机架的随机节点。

关于HDFS读写流程,这里还是给出两个版本,有助于理解

第一个版本:简洁版

HDFS写数据流程

在这里插入图片描述

1)客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在。

2)NameNode返回是否可以上传。

3)客户端请求第一个 block上传到哪几个datanode服务器上。

4)NameNode返回3个datanode节点,分别为dn1、dn2、dn3。

5)客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成。

6)dn1、dn2、dn3逐级应答客户端。

7)客户端开始往dn1上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位,dn1收到一个packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答。

8)当一个block传输完成之后,客户端再次请求NameNode上传第二个block的服务器。(重复执行3-7步)。

HDFS读数据流程

在这里插入图片描述

1)客户端通过Distributed FileSystem向NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址。

2)挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据。

3)DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以packet为单位来做校验)。

4)客户端以packet为单位接收,先在本地缓存,然后写入目标文件。

第二个版本:详细版,有助于理解

HDFS写数据流程

在这里插入图片描述

1)Client将FileA按128M分块。分成两块,block1和Block2;

2)Client向nameNode发送写数据请求,如图蓝色虚线①------>。

3)NameNode节点,记录block信息。并返回可用的DataNode,如粉色虚线②------->。

    Block1: host2,host1,host6

    Block2: host7,host3,host4

4)client向DataNode发送block1;发送过程是以流式写入。

流式写入过程:

(1)将64M的block1按64k的package划分;

(2)然后将第一个package发送给host2;

(3)host2接收完后,将第一个package发送给host1,同时client向host2发送第二个package;

(4)host1接收完第一个package后,发送给host6,同时接收host2发来的第二个package。

(5)以此类推,如图红线实线所示,直到将block1发送完毕。

(6)host2,host1,host6向NameNode,host2向Client发送通知,说“消息发送完了”。如图粉红颜色实线所示。

(7)client收到host2发来的消息后,向namenode发送消息,说我写完了。这样就完成了。如图黄色粗实线

(8)发送完block1后,再向host7,host3,host4发送block2,如图蓝色实线所示。

(9)发送完block2后,host7,host3,host4向NameNode,host7向Client发送通知,如图浅绿色实线所示。

(10)client向NameNode发送消息,说我写完了,如图黄色粗实线。。。这样就完毕了。

HDFS读数据流程

在这里插入图片描述

1)client向namenode发送读请求。

2)namenode查看Metadata信息,返回fileA的block的位置。

    block1:host2,host1,host6

    block2:host7,host3,host4

3)block的位置是有先后顺序的,先读block1,再读block2。而且block1去host2上读取;然后block2,去host7上读取。

二、MapReduce工作原理

可灵活回答:

1)MapReduce执行流程

2)对MapReduce的理解

3)MapReduce过程

4)MapReduce的详细过程

5)MapTask和ReduceTask工作机制

6)MapReduce中有没有涉及到排序

在这里插入图片描述

1)准备一个200M的文件,submit中对原始数据进行切片;

2)客户端向YARN提交信息,YARN开启一个MrAppmaster,MrAppmaster读取客户端对应的信息,主要是job.split,然后根据切片个数(这里2个)开启对应数量的MapTask(2个);

3)MapTask通过InputFormat去读取数据(默认按行读取),K是偏移量,V是一行内容,数据读取后交给Mapper,然后根据用户的业务需求对数据进行处理;

4)数据处理之后输出到环型缓冲区(默认100M),环型缓冲区一边是存数据,一边存的是索引(描述数据的元数据)。环型缓冲区存储数据到达80%后进行反向溢写,并对数据进行分区、排序;

5)再对分区且区内有序的文件进行归并排序 ,然后存储到磁盘;

在这里插入图片描述

6)当所有MapTask任务完成后,启动相应数量的ReduceTask,并告知ReduceTask处理数据范围(数据分区)。注意:不是必须等到所有MapTask结束后才开始,可以自行配置。

7)ReduceTask开启后,ReduceTask主动从MapTask对应的分区拉取数据;

8)再对ReduceTask拉取过来的数据进行一个全局合并排序;

9)顺序读取数据,按key分,key相同的数据进入同一个Reducer,一次读取一组数据;

10)Reducer处理完数据,通过OutPutFormat往外写数据,形成对应文件。

简洁版:面试可手写

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值