大数据秋招面经之hadoop系列

前言
hadoop在大数据面试中的比重已经呈下降趋势了,因为有spark的存在,hadoop存在感越来越低,但因为有分布式文件系统HDFS的存在,hadoop也不会被时代所抛弃。

面试过程中涉及hadoop的知识点主要集中与shuffle过程,切片机制,性能调优,以及datanode挂了怎么办,HA高可用等这些真实场景问题,可见除了一些基本的知识基础之外,性能调优真实场景的相关问题是面试问的比较多的。

秋招高频题
1.hadoop的各个组件

2.hadoop作业提交到yarn的流程:
(1)client将切片清单/配置/jar包上传到HDFS。
(2)RM收到请求后,选一个满足要求的NM,通知它启动一个特殊的Container,称为ApplicationMaster(AM),后续流程由AM发起。
(3)AM启动后,从HDFS下载切片清单,AM向RM申请资源(Container)。
(4)若有足够资源,RM会将Container分给NM,Container反向注册给AM。
(5)AM将任务分发给Container。
(6)Container执行具体任务,NM监控任务执行情况。
(7)各个Container向AM汇报自己的执行情况,都完成后,AM向RM注销任务,RM向NM杀死Container,任务结束.

3.hive与spark区别

4.Hadoop没被淘汰因为什么?hdfs

5.hdfs与hbase有什么关系?
hbase底层是hdfs

6.hdfs默认副本数为什么是3?
hdfs采用机架感知策略来改进数据可靠性,可用性和网络带宽的利用率。
在大多数情况下,hdfs的副本数是3,hdfs的存放策略是一个副本在本地机架节点上,另外一个副本存放在同一机架的另一个节点上,第三个副本存放在不同机架的节点上
这种策略是减少了机架间的数据传输,提高了写操作的效率。

7.hdfs读写流程

  • hdfs写流程:

(1)客户端与NameNode建立连接,创建文件元数据信息
(2)NameNode判断元数据是否有效
(3)NameNode触发副本存放策略,返回一个有序的DataNode列表
(4)client与DataNode建立管道连接,客户端将文件块切成一个个packet
(5)客户端将packet放入管道并向第一个DataNode传输
(6)第一个DataNode保存后发送给第二个DataNode,第二个DataNode保存后发送给第三个DataNode(类似流水线)
(7)几个DataNode会与NameNode建立心跳,确认传输完成后完成写流程

  • hdfs读流程:
    (1)HDFS会尽量读离它最近的副本,即如果同一个机架上有副本,就读它
    (2)客户端与NameNode交互文件元数据,获取文件块的位置,NameNode会按照距离策略排序返回DataNode列表
    (3)客户端从最近的DataNode开始读,先建立管道,然后DataNode将文件块的一个个packet传给客户端。

8.MapReduce中Shuffle过程
(1)shuffle发生在map()方法之后,reduce()方法之前
(2)在map()完成后,会先通过getPartition()方法得到记录进入哪个分区
(3)然后数据进入环形缓冲区(默认100兆,超过80%会反向溢写),溢写时对数据进行快排,对key按照字典序对索引进行排序
(4)溢写完产生多个溢写文件,进行分区归并排序,将数据放到指定分区,等待reduce拉取
(5)每个reduce拉取自己指定分区的数据,首先放入内存,内存不够再写入磁盘,进行归并排序,还可进行分组排序,最后进入reduce方法

9.map端的并行度取决于切片数

10.为什么要有shuffle过程,为什么有reduce就要有shuffle过程
shuffle的本意是洗牌,把一组有一定规律的数据尽量打散转换成一组无规律的数据,而MapReduce中的shuffle更像是洗牌的逆过程。
把一组无规律的数据尽量转换成一组具有一定规律的数据。Map是映射,负责数据的过滤分发,reduce是规约,负责数据的计算归并
reduce的数据来源于map,map的输出即为reduce的输入,reduce需要通过shuffle来获取数据。
shuffle过程必然涉及分区器,需要重新计算数据所属分区,这样相同的key才会经hash后进入同一个分区,完成数据的过滤分发过程。

11.mapreduce分桶的作用
分桶可以利于检索我们想要的数据,缩小了检索的范围

12.某个datanode挂了怎么办?

13.mapreduce的容错机制:
(1)JobTracker:无容错机制,挂掉之后需要人工介入,重启
用户可通过配置一些参数,以便JobTracker重启后,让作业恢复运行,这样JobTracker重启前,会在histrory log中记录各个作业的运行状态
这样在JobTracker重启后,重新提交这些作业,并只对未完成的task进行重新调度。
(2)TaskTracker:汇报心跳
当超过参数超过的时间间隔时未向jobTracker汇报心跳,则认为它死亡,并将其从调度池中删除;还可设置一些tasktracker host,表示这些节点不允许接入集群,也不会被分配task
(3)Job
当一个作业在某个tasktracker上失败的task个数超过设定值,则该tasktracker被加到该job的黑名单中
(4)Task
每个map Task,每个reduce task都有最大尝试次数
(5)record
跳过坏记录的条数也可设置
(6)磁盘
用户可配置多个磁盘目录,将map task中间结果分到不同的磁盘上,增强容错性。map task临时结果将被轮询写到这些目录上,以避免某个磁盘文件目录数据过多。
也可每次选择数据最少的磁盘目录写入,采样小顶堆等

14.hadoop的HA:
(1)多个节点,主NN(active 状态)与备NN(Standby 状态),主NN对外提供服务
(2)利用一个可靠的中间件集群(JN)journalonde负责同步NN的editLog,实现最终一致性。
(3)通过zookeeper集群协调NN的主从选举和切换,用到了zk的事件回调机制。
用两个进程分别监听主备有无挂掉,一个挂了,会在zk释放锁,通过回调机制让另一个NN抢锁,以便备成为主;若监听主的进程挂了,zk也会释放锁,备节点成为主节点
(4)DN同时向NN汇报block块的信息。
HA的数据最终一致性由两部分组成:
一是中间件集群JN同步主NN的editlog,备NN去订阅JN的日志,实现最终一致性,这就完成了客户端交互操作的同步。
二是通过心跳机制DN定期向所有NN发送block块的信息。
HDFS-Federation解决方案:
解决了NN的访问压力过大,内存受限的问题;通过元数据分治,复用DN存储,元数据访问隔离性;DN目录隔离block块实现。

猜你喜欢

转载自blog.csdn.net/wq17629260466/article/details/108900772
今日推荐