Hadoop之HDFS常见⾯试题
⼤数据⾯试题+
⼀:HDFS⾯试题
1. 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步)。
2.HDFS读数据流程
1)客户端通过Distributed FileSystem向NameNode请求下载⽂件,NameNode通过查询元数据,到⽂件块所在的DataNode地址。2)挑选⼀台DataNode(就近原则,然后随机)服务器,请求读取数据。
3)DataNode开始传输数据给客户端(从磁盘⾥⾯读取数据输⼊流,以Packet为单位来做校验)。
4)客户端以Packet为单位接收,先在本地缓存,然后写⼊⽬标⽂件。
3.datenode什么情况下不会备份
设置备份数为1时, 就不会备份了.
延申—Hadoop中在哪⾥设置备份数, 是哪个字段?
在l中的plication变量.
4.HDFS中⼤量⼩⽂件带来的问题以及解决的⽅案
问题:
hadoop中⽬录,⽂件和块都会以对象的形式保存在namenode的内存中, ⼤概每个对象会占⽤150bytes. ⼩⽂件数量多会⼤量占⽤namenode的内存; 使namenode读取元数据速度变慢, 启动时间延长; 还因为占⽤内存过⼤, 导致gc时间增加等.
解决办法:
两个⾓度, ⼀是从根源解决⼩⽂件的产⽣, ⼆是解决不了就选择合并.
从数据来源⼊⼿, 如每⼩时抽取⼀次改为每天抽取⼀次等⽅法来积累数据量.
如果⼩⽂件⽆可避免, ⼀般就采⽤合并的⽅式解决. 可以写⼀个MR任务读取某个⽬录下的所有⼩⽂件, 并重写为⼀个⼤⽂件.
5.HDFS三个核⼼组件时什么,分别有什么作⽤
1 NameNode. 集的核⼼, 是整个⽂件系统的管理节点. 维护着
a) ⽂件系统的⽂件⽬录结构和元数据信息
b) ⽂件与数据块列表的对应关系
2 DataNode. 存放具体数据块的节点, 主要负责数据的读写, 定期向NameNode发送⼼跳
3 SecondaryNameNode. 辅助节点, 同步NameNode中的元数据信息, 辅助NameNode对fsimage和editsLog进⾏合并.
6. fsimage和editlogs是做什么⽤的?
fsimage⽂件存储的是Hadoop的元数据⽂件, 如果namenode发⽣故障, 最近的fsimage⽂件会被载⼊到内存中, ⽤来重构元数据的最近状态, 再从相关点开始向前执⾏edit logs⽂件中记录的每个事务.
⽂件系统客户端执⾏写操作时, 这些事务会⾸先记录到⽇志⽂件中.
10. NameNode与SecondaryNameNode 的区别与联系?
1. 不⽀持⽂件的并发写⼊和对⽂件内容的随机修改。
2. 不⽀持低延迟、⾼吞吐的数据访问。
3. 存取⼤量⼩⽂件,会占⽤namenode⼤量内存,⼩⽂件的寻址时间超过读取时间。
4. hadoop环境搭建⽐较复杂。
5. 数据⽆法实时处理。
14. Hadoop中需要哪些配置⽂件,其作⽤是什么?
1、l
fs.defaultFS:hdfs://cluster1(域名),这⾥的值指的是默认的HDFS路径 。
2、hadoop-env.sh
只需设置jdk的安装路径,如:export JAVA_HOME=/usr/local/jdk。
3、l
dfs.data.dir:datanode节点存储在⽂件系统的⽬录 。
dfs.name.dir:是namenode节点存储hadoop⽂件系统信息的本地系统路径 。
4、l
mapreduce.framework.name: yarn指定mr运⾏在yarn上。
5、l
配置demanager.aux-services以及⽇志聚集等功能
6、slaves、master
配置从节点列表、主节点
15.Hadoop特性优点
(1)扩容能⼒
(2)成本低
(3)⾼效率
(4)可靠性
16. Yarn资源调度系统集的主要⾓⾊是哪些?
ResourceManager、NodeManager
17. Hadoop部署的⽅式分别是哪⼏种?
1 独⽴模式
2 伪分布式模式
3 集模式
18. 请列出正常⼯作的hadoop集中hadoop都需要启动哪些进程,他们的作⽤分别是什么?
–namenode =>HDFS的守护进程,负责维护整个⽂件系统,存储着整个⽂件系统的元数据信息,有image+edit log namenode不会持久化存储这些数据,⽽是在启动时重建这些数据。
–datanode =>是具体⽂件系统的⼯作节点,当我们需要某个数据,namenode告诉我们去哪⾥,就直接和那个DataNode对应的服务器的后台进程进⾏通信,由DataNode进⾏数据的检索,然后进⾏具体的读/写操作
–secondarynamenode =>⼀个冗余的守护进程,相当于⼀个namenode的元数据的备份机制,定期的更新,和namenode进⾏通信,将namenode上的image和edits进⾏合并,可以作为namenode的备份使⽤
–resourcemanager =>是yarn平台的守护进程,负责所有资源的分配与调度,client的请求由此负责,监控nodemanager
–nodemanager => 是单个节点的资源管理,执⾏来⾃resourcemanager的具体任务和命令
19. 请列出你所知道的hadoop调度器,并简要说明其⼯作⽅法
Fifo schedular :默认,先进先出的原则
Capacity schedular :计算能⼒调度器,选择占⽤最⼩、优先级⾼的先执⾏,依此类推。
Fair schedular:公平调度,所有的 job 具有相同的资源。
20. 请简述hadoop怎样实现⼆级排序(就是对key和value双排序)
第⼀种⽅法是,Reducer将给定key的所有值都缓存起来,然后对它们再做⼀个Reducer内排序。但是,由于Reducer需要保存给定key的所有值,可能会导致出现内存耗尽的错误。
第⼆种⽅法是,将值的⼀部分或整个值加⼊原始key,⽣成⼀个组合key。这两种⽅法各有优势,第⼀种⽅法编写简单,但并发度⼩,数据量⼤的情况下速度慢(有内存耗尽的危险),
第⼆种⽅法则是将排序的任务交给MapReduce框架shuffle,更符合Hadoop/Reduce的设计思想。这篇⽂章⾥选择的是第⼆种。我们将编写⼀个Partitioner,确保拥有相同key(原始key,不包括添加的部分)的所有数据被发往同⼀个Reducer,还将编写⼀个Comparator,以便数据到达Reducer后即按原始key分组。
21. 请简述mapreduce中的combine和partition的作⽤
combiner是发⽣在map的最后⼀个阶段,其原理也是⼀个⼩型的reducer,主要作⽤是减少输出到reduce的数据量,缓解⽹络传输瓶颈,提⾼reducer的执⾏效率。
partition的主要作⽤将map阶段产⽣的所有kv对分配给不同的reducer task处理,可以将reduce阶段的处理负载进⾏分摊
22. mapreduce的调度模式(题意模糊,可以理解为yarn的调度模式,也可以理解为mr的内部⼯作流程)
appmaster作为调度主管,管理maptask和reducetask
Appmaster负责启动、监控maptask和reducetask
Maptask处理完成之后,appmaster会监控到,然后将其输出结果通知给reducetask,然后reducetask从map端拉取⽂件,然后处理;
当reduce阶段全部完成之后,appmaster还要向resourcemanager注销⾃⼰
23.MapReduce⼯作流程
上⾯的流程是整个MapReduce最全⼯作流程,但是Shuffle过程只是从第7步开始到第16步结束,具体Shuffle过程详解,如下:
1)MapTask收集我们的map()⽅法输出的kv对,放到内存缓冲区中
2)从内存缓冲区不断溢出本地磁盘⽂件,可能会溢出多个⽂件
3)多个溢出⽂件会被合并成⼤的溢出⽂件
4)在溢出过程及合并的过程中,都要调⽤Partitioner进⾏分区和针对key进⾏排序
5)ReduceTask根据⾃⼰的分区号,去各个MapTask机器上取相应的结果分区数据
6)ReduceTask会取到同⼀个分区的来⾃不同MapTask的结果⽂件,ReduceTask会将这些⽂件再进⾏合并(归并排序)
7)合并成⼤⽂件后,Shuffle的过程也就结束了,后⾯进⼊ReduceTask的逻辑运算过程(从⽂件中取出⼀个⼀个的键值对Group,调⽤⽤户⾃定义的reduce()⽅法)
3.注意
Shuffle中的缓冲区⼤⼩会影响到MapReduce程序的执⾏效率,原则上说,缓冲区越⼤,磁盘io的次数越少,执⾏速度就越快。
缓冲区的⼤⼩可以通过参数调整,参数:io.sort.mb默认100M。
24.Yarn⼯作机制
2.⼯作机制详解
(1)MR程序提交到客户端所在的节点。
(2)YarnRunner向ResourceManager申请⼀个Application。
(3)RM将该应⽤程序的资源路径返回给YarnRunner。
(4)该程序将运⾏所需资源提交到HDFS上。
(5)程序资源提交完毕后,申请运⾏mrAppMaster。
(6)RM将⽤户的请求初始化成⼀个Task。
(7)其中⼀个NodeManager领取到Task任务。
(8)该NodeManager创建容器Container,并产⽣MRAppmaster。
(9)Container从HDFS上拷贝资源到本地。
(10)MRAppmaster向RM 申请运⾏MapTask资源。
(11)RM将运⾏MapTask任务分配给另外两个NodeManager,另两个NodeManager分别领取任务并创建容器。
(12)MR向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动MapTask,MapTask对数据分区排序。
(13)MrAppMaster等待所有MapTask运⾏完毕后,向RM申请容器,运⾏ReduceTask。
(14)ReduceTask向MapTask获取相应分区的数据。
(15)程序运⾏完毕后,MR会向RM申请注销⾃⼰。
25.Mapreduce跑慢的原因
1 计算机性能:CPU,内存,磁盘是否健康,⽹络
2 I/O操作优化
1) 数据倾斜
hadoop分布式集搭建2) Map和Reduce数设置不合理
3) Map运⾏时间太长,导致Reduce等待过久
4) ⼩⽂件太多
5) ⼤量的不可分块的超⼤⽂件
6) Spill次数过多
7) Merge次数过多等
26.MapReduce优化⽅法
MapReduce优化⽅法主要从六个⽅⾯考虑:数据输⼊、Map阶段、Reduce阶段、IO传输、数据倾斜问题和常⽤的调优参数
6.2.1数据输⼊
(1)合并⼩⽂件:在执⾏ mr 任务前将⼩⽂件进⾏合并,⼤量的⼩⽂件会产⽣⼤量的
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论