面试了N多家总结的Hadoop15个高频面试

24 篇文章 6 订阅
13 篇文章 3 订阅

前言:

         很多小伙伴让我分享一其关于Hadoop的面试题,今天他来了,首先我在这里说明一下,以下分享的面试题全部都是我自己经历过,经过在海量的面试题中总结了15到非常高频的题目分享给大家。大数据老哥在这里祝你们找到自己心仪的工作,废话不多说我们就开始吧,制作不易:【一键三连】。
在这里插入图片描述

一、 你说你深刻理解MR的工作流程,你给我讲一下吧

首先当面试问你这个问题的时候就到了你展示自己的时候了,不要再说一两句话了,如通过1.inputFrom读取数据,2.使用split切分数据。通过rr进行切分等等。以下是我回答的。

  1. 在客户端执行submit()方法之前,会先去获取一下待读取文件的信息
  2. 将job提交给yarn,这时候会带着三个信息过去(job.split(文件的切片信息),jar.job.xml)
  3. yarn会根据文件的切片信息去计算将要启动的maptask的数量,然后去启动maptask
  4. maptask会调用InPutFormat()方法区HDFS上面读取文件,InPutFormat()方法会再去 调用RecordRead()方法,将数据以行首字母的偏移量为key,一行数据为value传给 mapper()方法
  5. mapper方法做一些逻辑处理后,将数据传到分区方法中,对数据进行一个分区标注后,发 送到环形缓冲区中
  6. 环形缓冲区默认的大小是100M,达到80%的阈值将会溢写 7.在溢写之前会做一个排序的动作,排序的规则是按照key进行字典序排序,排序的手段是 快排
  7. 溢写会产生出大量的溢写文件,会再次调用merge()方法,使用归并排序,默认10个溢写 文件合并成一个大文件,
  8. 也可以对溢写文件做一次localReduce也就是combiner的操作,但前提是combiner的 结果不能对最终的结果有影响
  9. 等待所有的maptask结束之后,会启动一定数量的reducetask
  10. reducetask会发取拉取线程到map端拉取数据,拉取到的数据会先加载到内存中,内存 不够会写到磁盘里,等待所有的数据拉取完毕,会将这些输出在进行一次归并排序
  11. 归并后的文件会再次进行一次分组的操作,然后将数据以组为单位发送到reduce()方 法reduce方法做一些逻辑判断后,最终调用OutputFormat()方法,Outputformat()会再 去调用RecordWrite()方法将数据以KV的形式写出到HDFS上

二、HDFS分布式存储工作机制

HDFS是一个文件存存储系统,他的meta信息以及目录结构是存储在NameNode中的,文 件是以block的形式存储在DataNode中,通过与NameNode交互,可以实现读写的操作

写入请求

  1. 客户端会带着文件路径向NameNode发送写入请求通过 RPC 与 NameNode 建立通讯, NameNode 检查目标文件,返回是否可以上传;
  2. Client 请求第一个 block 该传输到哪些 DataNode 服务器上
  3. NameNode 根据副本数量和副本放置策略进行节点分配,返回 DataNode节点,如:A,B,C
  4. Client 请求A节点建立pipeline管道,A收到请求会继续调用B,然后B 调用C,将整个pipeline管道建立完成后,逐级返回消息到Client;
  5. Client收到A返回的消息之后开始往A上传第一个block块,block块被 切分成64K的packet包不断的在pepiline管道里传递,从A到B,B到C进行 复制存储
  6. 当一个 block块 传输完成之后,Client 再次请求 NameNode 上传第二 个block块的存储节点,不断往复存储
  7. 当所有block块传输完成之后,Client调用FSDataOutputSteam的 close方法关闭输出流,最后调用FileSystem的complete方法告知 NameNode数据写入成功
    在这里插入图片描述

读取请求

  1. 客户端会先带着读取路径向NameNode发送读取请求,通过 RPC 与 NameNode 建立通讯,NameNode检查目标文件,来确定请求文件 block 块的位置信息
  2. 客户端会先带着读取路径向NameNode发送读取请求,通过 RPC 与 NameNode 建立通讯,NameNode检查目标文件,来确定请求文件 block 块的位置信息
  3. 这些返回的 DataNode 地址,会按照集群拓扑结构得出 DataNode 与 客户端的距离,然后进行排序,排序两个规则:网络拓扑结构中距离 Client 近的排靠前;心跳机制中超时汇报的 DN 状态为 STALE,这样的排靠后;
  4. Client 选取排序靠前的 DataNode 调用FSDataInputSteam的read方 法来读取 block块数据,如果客户端本身就是DataNode,那么将从本地直 接获取block块数据
  5. 当读完一批的 block块后,若文件读取还没有结束,客户端会继续向 NameNode 获取下一批的 block 列表,继续读取
  6. 所有block块读取完成后,Client调用FSDataInputStream.close()方 法,关闭输入流,并将读取来所有的 block块合并成一个完整的最终文件

在这里插入图片描述

三、YARN的资源调度工作机制

  1. 客户端向ResourceManager提交应用程序,其中包括启动该应用的 ApplicationMaster的必须信息,例如ApplicationMaster程序、启动 ApplicationMaster的命令、用户程序等。
  2. ResourceManager启动一个container用于运行ApplicationMaster
  3. 启动中的ApplicationMaster向ResourceManager注册自己,启动成功后与 ResourceManager保持心跳。
  4. ApplicationMaster向ResourceManager发送请求,申请相应数目的 container。
  5. 申请成功的container,由ApplicationMaster进行初始化。container 的启动信息初始化后,ApplicationMaster与对应的NodeManager通信, 要求NodeManager启动container。
  6. NodeManager启动container。
  7. container运行期间,ApplicationMaster对container进行监控。 container通过RPC协议向对应的ApplicationMaster汇报自己的进度和状态 等信息。
  8. 应用运行结束后。
    yarn资源调度流程图
    在这里插入图片描述

四、yarn默认的调度器分是什么,及他们区别

yarn调度器分为一下三种:

  1. FIFO :先进先出,同一个队列中现先提交的先执行,后面等待
  2. Capacity Scheduler(容量调度器): 允许创建多个任务队列,每个队列使用所有资源的一部分。多个任务队列可 以同时执行。但是一个队列内部还是先进先出。
  3. Fair Scheduler(公平调度): 第一个程序在启动时可以占用其他队列资源(100%占用),当其他队列有 任务提交是,占用资源的队列需要将资源还给该任务。还资源的时候,效率 比较慢。

五、 HadoopHA的架构原理

首先我们在回答这个问题的时候从HA的设计和当宕机了怎么操作的这两方面进行回答,一下是我的回答,仅供参考

  1. HadoopHa中包括了两分NameNodeHA和resourceMangerHA
  2. HadoopHa解决了早期版本的NameNode单点问题。yarnHa解决了 resourceManagr的单点问题
  3. NameNodeHa方案中包含两个NameNode一个action状态,一个是 standby状态。每个NameNode分配在两个完全独立的服务器中,每个 NamNode所在节点需配置要给ZKFC
  4. 两个NameNode之前的元数据信息是通过jn传递的

宕机转移

  1. 当actionNameNode节点发生故障ActionZKF通过zookeeper删除临时的 zNode
  2. StandBy状态下的ZKF订阅了这个临时的zNode的变换,若zNode消失, StandBy状态的ZKFC立刻通过standby NameNode
  3. StandByNameNode远程登录actionNameNode执行kill-9 actionNameNode
  4. StandByNameNode通知StandByZkfc去zookeeper上注册zNode,注册成功转换 为action转态。

六、Hadoop解决数据倾斜方法

在面试的时候很多面试管斗都喜欢问 数据倾斜了怎么办,什么原因造成的数据倾斜等,一下是我回答的,仅供参考。

  1. 提前在map进行combine,减少传输的数据量

    • 在Mapper加上combine相当于提前reduce,既吧一个mapper中的相同key进行 了聚合,减少shuffle过程中传输的数据量,以及Reducer端的计算量
    • 如果导致数据倾斜的key 大量分布在不同的mapper的时候,这种方法就不 是很有效了。
  2. 导致数据倾斜的key 大量分布在不同的mapper

    1)局部聚合加全局聚合。

    • 第一次在map阶段对那些导致了数据倾斜的key 加上1到n的随机前缀,这 样本来相同的key 也会被分到多个Reducer中进行局部聚合,数量就会大大 降低。
    • 第二次mapreduce,去掉key的随机前缀,进行全局聚合。

    2)增加Reducer,提升并行度

    • JobConf.setNumReduceTasks(int)
    • 实现自定义分区

    3)根据数据分布情况,自定义散列函数,将key均匀分配到不同Reducer

七、HDFS小文件怎么处理的

  1. 小文件的危害
    • 每个文件在NameNode中存储大约占150个字节
    • 小文件过多会影响namenode的寿命
    • 影响MR的执行任务的数量,因为MR会对一个小文件开启一个Maptask,maptask任务过多则会导致频繁的开启关闭,降低了执行效率
  2. 在Flume阶段配置参数解决这个问题
    • 通过参数来控制
    • 先生成临时文件,达到128M或者是1个小时滚成一个新的文件
  3. 使用Hadoop自带的HAR
    • 将多个小文件打包成一个正式文件,NameNode中的元数据也就存储一份
  4. CombineFileInputFormat
    • MR读取数据时将对个小文件当做一个文件,只起一个MapTask,提高了任务的执行效率

八、Hadoo配置文件以及简单的Hadoop集群搭建

这个道题目基本上会出现在笔试题上。博主亲自经历过,虽然很简单但是往往大多数人因为简单而丢分。

  1. 安装Jdk
  2. 配置ssh免密登录
  3. 配置Hadoop的核心文件
    • core-site.xml
    • hdfs-site.xml
    • mapred-site.xml
    • yarn-site.xml
    • yarn-env.sh
    • hadoop-env.sh
    • mapred-env.sh
    • slave
  4. 格式化NameNode
  5. 启动

九、Hadoop中combiner和partition作用

  1. combiner是发生在map的最后一个阶段,父类就是reduce,意识就是对一个maptask的输出进行局部汇总,以减少网络传输量,缓解网络传输瓶颈,提高reduce的执行效率。
  2. partition的主要作用将map的最后一个阶段所有kv对分配给不同的reduce task处理,可以将reduce阶段的处负载进行分摊。

10、Hadoop优化

在这里插入图片描述

十一、Fsimage和edit的区别,集作用是什么?

  1. 客户端修改文件时候,先更新内存中的 metadata信息,只有当对文件操作成功的
    时候,才会写到 editor
  2. fsimage是文件meta信息的持久化的检查点。 secondary namenode会定期的将
    fsimage和 editlog合并dump成新的 fsimage

作用:
fsimage存储的是系统最近一次关机前的集群镜像,
edits是客户端对HDFS文件系统的所有操作日志 恢复集群到上次关机前的状态

十二、MapReduce为什么分两部分,为什么不直接map或直接reduce

  1. 是为了实现分布式计算,提高计算效率。
  2. 很多情况下都是需要对整个数据集进行计算操作,单单的分成每个单独的小部分虽然能提高计算效率,但是导致无法完成实际需求,是没有任何意义的,
  3. 所以添加一个reduce阶段,负责将分成多个部分计算的结果汇总进行处理,使得更加能满足一般需求。

十三、Hadoop会有哪些重大故障,如何应对?至少给出 5个。

  1. namenode 单点故障:通过 zookeeper 搭建 HA 高可用,可自动切换 namenode。
  2. ResourceManager单点故障:可通过配置YARN的HA,并在配置的namenode上手动启动ResourceManager作为Slave,在 Master 故障后,Slave 会自动切换为Master。
  3. Rduce阶段内存溢出:是由于单个reduce任务处理的数据量过多,通过增大reducetasks数目、优化partition 规则使数据分布均匀进行解决。
  4. Datanode内存溢出:是由于创建的线程过多,通过调整linux的maxuserprocesses参数,增大可用线程数进行解决。
  5. 集群间时间不同步导致运行异常:通过配置内网时间同步服务器进行解决。

十四、你认为 hadoop 有哪些设计不合理的地方。

  1. 不支持文件的并发写入和对文件内容的随机修改。
  2. 不支持低延迟、高吞吐的数据访问。
  3. 存取大量小文件,会占用 namenode 大量内存,小文件的寻道时间超过读取时间。
  4. Hadoop 环境搭建比较复杂。
  5. 数据无法实时处理。
  6. MapReduce 的 shuffle 阶段 IO 太多。
  7. 编写 MapReduce难度较高,实现复杂逻辑时,代码量太大。

十五、yarn的三个核心组件

  1. ResourceManage 负责整个集群资源的分配
  2. NodeManage 每个节点上的资源管理器
  3. ApplicationMaster 单个应用程序的管理者

总结:

         以上就是本期分享的内容了,虽然内容多,你也坚持看到这里了,Hadoop那么多的内容就这15个题目就可以了吗? 往往不是的,只有准备的充分了才有底气跟面试官聊,我还为大家准备了一个超级详细的脑图,微信搜索公众号【大数据老哥】回复:Hadoop面试题即可获取。 我们下期见~~~~
在这里插入图片描述
在这里插入图片描述

评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大数据老哥

欢迎支持

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

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

打赏作者

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

抵扣说明:

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

余额充值