首页 > 其他分享 >大数据云计算——hadoop的面试问题总结

大数据云计算——hadoop的面试问题总结

时间:2023-04-04 19:39:50浏览次数:47  
标签:总结 HDFS map reduce hadoop 面试 key 数据


1.讲述HDFS上传⽂件和读⽂件的流程?

HDFS 上传流程,举例说明⼀个256M的⽂件上传过程

(1)由客户端Client向NameNode节点发出请求;

(2)NameNode向Client返回可以存数据的DataNode列表,遵循机架感应原则(把副本分别放在不同的机架,甚⾄不同的数据中⼼);

(3)客户端⾸先根据返回的信息先将⽂件分块(Hadoop2.X版本每⼀个block为 128M,⽽之前的版本为 64M);

(4)通过NameNode返回的DataNode信息,将⽂件块以流失写⼊⽅式直接发送给DataNode,同时复制到其他两台机器(默认⼀份数据,有两个副本);

(5)数据块传送完成以后, dataNode向Client通信,同时向NameNode报告;

(6)依照上⾯(4)到(5)的原理将所有的数据块都上传,结束后向 NameNode 报告 表明已经传完所有的数据块

大数据云计算——hadoop的面试问题总结_大数据

2 HDFS在上传⽂件的时候,如果其中⼀个块突然损坏了怎么办?
其中⼀个块坏了,只要有其它块存在,会⾃动检测还原。

3 NameNode的作⽤?
namenode总体来说是管理和记录恢复功能。⽐如管理datanode,保持⼼跳,如果超时则排除。对于上传⽂件都有镜像images和edits,这些可以⽤来恢复。

4 NameNode在启动的时候会做哪些操作?
NameNode启动的时候,会加载fsimage
Fsimage加载过程完成的操作主要是为了:
(1)从fsimage中读取该HDFS中保存的每⼀个⽬录和每⼀个⽂件
(2)初始化每个⽬录和⽂件的元数据信息
(3)根据⽬录和⽂件的路径,构造出整个namespace在内存中的镜像
(4)如果是⽂件,则读取出该⽂件包含的所有blockid,并插⼊到BlocksMap中。
整个加载流程如下图所⽰:

大数据云计算——hadoop的面试问题总结_数据_02

如上图所⽰, namenode在加载fsimage过程其实⾮常简单,就是从fsimage中不停的顺序读取⽂件和⽬录的元数据信息,并在内存中构建整个namespace,同时将每个⽂件对应的blockid保存⼊BlocksMap中,此时BlocksMap中每个block对应的datanodes列表暂时为空。当fsimage加载完毕后,整个HDFS的⽬录结构在内存中就已经初始化完毕,所缺的就是每个⽂件对应的block对应的datanode列表信息。这些信息需要从datanode的blockReport中获取,所以加载fsimage完毕后, namenode进程进⼊rpc等待状态,等待所有的datanodes发送blockReports。

5.NameNode的HA?
NameNode的HA⼀个备⽤,⼀个⼯作,且⼀个失败后,另⼀个被激活。他们通过journal node来实现共享数据。

6.Hadoop的作业提交流程?
Hadoop2.x Yarn作业提交(客户端)http://www.aboutyun.com/forum.php?mod=viewthread&tid=9498 Hadoop2.x Yarn作业提交(服务端)http://www.aboutyun.com/forum.php?mod=viewthread&tid=9496

7.Hadoop怎么分⽚?
1、分块:
HDFS存储系统中,引⼊了⽂件系统的分块概念(block),块是存储的最⼩单位, HDFS定义其⼤⼩为64MB。与单磁
盘⽂件系统相似,存储在 HDFS上的⽂件均存储为多个块,不同的是,如果某⽂件⼤⼩没有到达64MB,该⽂件也不会占据
整个块空间。在分布式的HDFS集群上, Hadoop系统 保证⼀个块存储在⼀个datanode上。
HDFS的namenode只存储整个⽂件系统的元数据镜像,这个镜像由配置dfs.name.dir指定, datanode则存有⽂件的
metainfo和具体的分块,存储路径由dfs.data.dir指定。
2、分⽚片:
hadoop的作业在提交过程中,需要把具体的输⼊进⾏分⽚。具体的分⽚细节由InputSplitFormat指定。分⽚的规则为
FileInputFormat.class中的getSplits()⽅法指定:

long splitSize = computeSplitSize(goalSize, minSize, blockSize);
computeSplitSize:
Math.max(minSize, Math.min(goalSize, blockSize));

8.如何减少Hadoop Map端到Reduce端的数据传输量?
减少传输量,可以让map处理完,让同台的reduce直接处理,理想情况下,没有数据传输。

9.Hadoop的Shuffle?
1、 hadoop: map端保存分⽚数据,通过⽹络收集到reduce端
2、 Shuffle产⽣的意义是什么?
完整地从map task端拉取数据到reduce 端;在跨节点拉取数据时,尽可能地减少对带宽的不必要消耗;减少磁盘IO对task执⾏的影响;每个map task都有⼀个内存缓冲区,存储着map的输出结果,当缓冲区快满的时候需要将缓冲区的数据该如何处理?
每个map task都有⼀个内存缓冲区,存储着map的输出结果,当缓冲区快满的时候需要将缓冲区的数据以⼀个临时⽂件的⽅式存放到磁盘,当整个map task结束后再对磁盘中这个map task产⽣的所有临时⽂件做合并,⽣成最终的正式输出⽂
件,然后等待reduce task来拉数据。

10.哪些场景才能使⽤Combiner呢?
1. Combiner的输出是Reducer的输⼊, Combiner绝不能改变最终的计算结果。所以从我的想法来看, Combiner只应该⽤
于那种Reduce的输⼊key/value与输出key/value类型完全⼀致,且不影响最终结果的场景。⽐如累加,最⼤值等。 Combiner的使⽤⼀定得慎重,如果⽤好,它对job执⾏效率有帮助,反之会影响reduce的最终结果。
2. combiner最基本是实现本地key的聚合,对map输出的key排序, value进⾏迭代。
3. combiner的⽬的是减少map⽹络流量。 combiner的对象是对于map。 combiner具有和reduce相似的功能。只不过combiner合并对象,是对于⼀个map。 reduce合并对象,是对于多个map。

11.HMaster的作⽤?
1. 为region server分配region.
2. 负责region server的负载均衡。
3. 发现失效的region server并重新分配其上的region.
4. Gfs上的垃圾⽂件回收。
5. 处理schema更新请求。

12.如何实现hadoop的安全机制?
(1)共享hadoop集群:
a: 管理⼈员把开发⼈员分成了若⼲个队列,每个队列有⼀定的资源,每个⽤户及⽤户组只能使⽤某个队列中指定资源。
b: HDFS上有各种数据,公⽤的,私有的,加密的。不⽤的⽤户可以访问不同的数据。
(2) HDFS安全机制
client获取namenode的初始访问认证( 使⽤kerberos )后,会获取⼀个delegation token,这个token可以作为接下来访
问HDFS或提交作业的认证。同样,读取block也是⼀样的。
(3) mapreduce安全机制
所有关于作业的提交或者作业运⾏状态的追踪均是采⽤带有Kerberos认证的RPC实现的。授权⽤户提交作业
时, JobTracker会为之⽣成⼀个delegation token,该token将被作为job的⼀部分存储到HDFS上并通过RPC分发给各
个TaskTracker,⼀旦job运⾏结束,该token失效。
(4) DistributedCache是安全的。DistribuedCache分别两种,⼀种是shared,可以被所有作业共享,⽽private的只能被该⽤户的作业共享。
(5) RPC安全机制:在Hadoop RP中添加了权限认证授权机制。当⽤户调⽤RPC时,⽤户的login name会通过RPC头部传递给RPC,之后RPC使⽤Simple Authentication and Security Layer(SASL)确定⼀个权限协议(⽀持Kerberos和DIGEST-MD5两种),完成RPC授权。

13.hadoop的调度策略的实现,你们使⽤的是哪种策略,为什么?
(1)默认情况下hadoop使⽤的FIFO, 先进先出的调度策略。按照作业的优先级来处理。
(2)计算能⼒调度器( Capacity Scheduler ) ⽀持多个队列,每个队列可配置⼀定的资源量,每个队列采⽤FIFO, 为了防⽌同
⼀个⽤户的作业独占资源,那么调度器会对同⼀个⽤户提交的作业所占资源进⾏限定,⾸先按以下策略选择⼀个合适队
列:计算每个队列中正在运⾏的任务数与其应该分得的计算资源之间的⽐值,选择⼀个该⽐值最⼩的队列;然后按以下策
略选择该队列中⼀个作业:按照作业优先级和提交时间顺序选择,同时考虑⽤户资源量限制和内存限制。
(3)公平调度器( Fair Scheduler ) ⽀持多队列多⽤户,每个队列中的资源量可以配置,同⼀队 列中的作业公平共享队列中所
有资源。
(4)异构集群的调度器LATE
(5)实时作业的调度器Deadline Scheduler和Constraint-based Schedule

14.数据倾斜怎么处理?
数据倾斜有很多解决⽅案,本例⼦简要介绍⼀种实现⽅式,假设表A 和表B连接,表A 数据倾斜,只有⼀个key倾斜,⾸先
对A进⾏采样,统计出最倾斜的key,将A表分隔为A1 只有倾斜 key, A2 不包含倾斜key, 然后分别与 表B 连接。最后将结果
合并, union

15.评述hadoop运⾏原理?
1、有hdfs 负责数据存放,是Hadoop的分布式⽂件存储系统
2、将⼤⽂件分解为多个Block,每个Block保存多个副本。提供容错机制,副本丢失或者宕机时⾃动恢复。默认每个Block
保存3个副本, 64M为1个Block。由mapreduce负责计算, Map(映射)和Reduce(归约)
16.简单说⼀下hadoop的map-reduce编程模型
(1)map task会从本地⽂件系统读取数据,转换成key-value形式的键值对集合。使⽤的是hadoop内置的数据类型,⽐如
longwritable、 text等。
(2)将键值对集合输⼊mapper进⾏业务处理过程,将其转换成需要的key-value在输出之后会进⾏⼀个partition分区操作,
默认使⽤的是hashpartitioner,可以通过重写hashpartitioner的getpartition⽅法来⾃定义分区规则。
(3)会对key进⾏进⾏sort排序, grouping分组操作将相同key的value合并分组输出,在这⾥可以使⽤⾃定义的数据类型,重
写WritableComparator的Comparator⽅法来⾃定义排序规则,重写RawComparator的compara⽅法来⾃定义分组规则
(4)进⾏⼀个combiner归约操作,其实就是⼀个本地段的reduce预处理,以减⼩后⾯shufle和reducer的⼯作量
reduce task会通过⽹络将各个数据收集进⾏reduce处理,最后将数据保存或者显⽰,结束整个job。举例说明:将⼀副牌的分成四种花⾊。

17.hadoop的TextInputFormat作⽤是什么,如何⾃定义实现?
InputFormat会在map操作之前对数据进⾏两⽅⾯的预处理
(1)是getSplits,返回的是InputSplit数组,对数据进⾏split分⽚,每⽚交给map操作⼀次
(2)是getRecordReader,返回的是RecordReader对象,对每个split分⽚进⾏转换为key-value键值对格式传递给map
常⽤的InputFormat是TextInputFormat,使⽤的是LineRecordReader对每个分⽚进⾏键值对的转换,以⾏偏移量作为键,
⾏内容作为值。⾃定义类继承InputFormat接⼜,重写createRecordReader和isSplitable⽅法 在createRecordReader中可以⾃定义分隔符

18.map-reduce程序运⾏的时候会有什么⽐较常见的问题?
⽐如说作业中⼤部分都完成了,但是总有⼏个reduce⼀直在运⾏。这是因为这⼏个reduce中的处理的数据要远远⼤于其他
的reduce,可能是因为对键值对任务划分的不均匀造成的数据倾斜。解决的⽅法可以在分区的时候重新定义分区规则对于value
数据很多的key可以进⾏拆分、均匀打散等处理,或者是在map端的combiner中进⾏数据预处理的操作。

19.Hadoop平台集群配置、环境变量设置?
1、 zookeeper:修改zoo.cfg⽂件,配置dataDir,和各个zk节点的server地址端⼜, tickTime⼼跳时间默认是2000ms,其
他超时的时间都是以这个为基础的整数倍,之后再dataDir对应⽬录下写⼊myid⽂件和zoo.cfg中的server相对应。

2、 hadoop:修改
hadoop-env.sh配置java环境变量
core-site.xml配置zk地址,临时⽬录等
hdfs-site.xml配置nn信息, rpc和http通信地址, nn⾃动切换、 zk连接超时时间等
yarn-site.xml配置resourcemanager地址
mapred-site.xml配置使⽤yarn
slaves配置节点信息
格式化nn和zk。
3、 hbase:修改
hbase-env.sh配置java环境变量和是否使⽤⾃带的zk
hbase-site.xml配置hdfs上数据存放路径, zk地址和通讯超时时间、 master节点
regionservers配置各个region节点
zoo.cfg拷贝到conf⽬录下
4、 spark:
安装Scala
修改spark-env.sh配置环境变量和master和worker节点配置信息
5、环境变量的设置:直接在/etc/profile中配置安装的路径即可,或者在当前⽤户的宿主⽬录下,配置在.bashrc⽂件中,该
⽂件不⽤source重新打开shell窗⼜即可,配置在.bash_profile的话只对当前⽤户有效。

20.Hadoop性能调优?
1、调优可以通过系统配置、程序编写和作业调度算法来进⾏。 hdfs的block.size可以调到128/256(⽹络很好的情况下,
默认为64)
2、调优的⼤头: mapred.map.tasks、 mapred.reduce.tasks设置mr任务数(默认都是1)
1 mapred.tasktracker.map.tasks.maximum //每台机器器上的最⼤大map任务数
2 mapred.tasktracker.reduce.tasks.maximum //每台机器器上的最⼤大reduce任务数
3 mapred.reduce.slowstart.completed.maps //配置reduce任务在map任务完成到百分之⼏几的时候开始进⼊入
这个⼏个参数要看实际节点的情况进⾏配置, reduce任务是在33%的时候完成copy,要在这之前完成map任务,(map可
以提前完成)
1 mapred.compress.map.output,mapred.output.compress
2 //配置压缩项,消耗cpu提升⽹网络和磁盘io 合理理利利⽤用combiner 。注意重⽤用writable对象

21.Hadoop如何实现⾼并发?
(1)分段加锁机制+内存双缓冲机制
(2)多线程并发吞吐量量的百倍优化
(3)缓冲数据批量量刷磁盘+⽹网络优化

参考: https://www.codercto.com/a/38917.html


标签:总结,HDFS,map,reduce,hadoop,面试,key,数据
From: https://blog.51cto.com/u_13643065/6169260

相关文章

  • 「刷起来」Go必看的进阶面试题详解
    勤学如春起之苗,不见其增日有所长;辍学如磨刀之石,不见其损日有所亏。本文的重点:逃逸分析、延迟语句、散列表、通道、接口。1.逃逸分析逃逸分析是Go语言中的一项重要优化技术,可以帮助程序减少内存分配和垃圾回收的开销,从而提高程序的性能。下面是一道涉及逃逸分析的面试题及其详......
  • 并发编程——JUC并发大厂面试问题
    摘要现如今,不管是应届毕业生还是工作了三五年之内的工程师,在面试招聘的时候JUC并发编程的是必须掌握的一个技能,否者你将会被面试官玩弄。本博文将整理有关于的JUC的大厂面试问题和答案。帮助大家在面试过程中能够回答面试官问题的一二。同时本人也总结相关的面试问题的在相关文档中......
  • LeetCode——贪心算法总结
    贪心算法的主要的解题目的思路是: 860.柠檬水找零这道题算是生活中很常见的一道题,对于每一个顾客如果我们都有足够的零钱给他找零,那么就返回true,只要有一个顾客没有足够的零钱找给他就返回false。顾客只能有3种纸币,5元,10元,20元。我们要统计5元和10元的数量,20元的不需要统计,因为20......
  • Kafka——kafka的面试问题和解答
    摘要主要的是的针对于的kafka的面试的问题进行分析和总结PartitionRebalance分区再均衡1)消费者组中新添加消费者读取到原本是其他消费者读取的消息,(2)消费者关闭或崩溃之后离开群组,原本由他读取的partition将由群组里其他消费者读取,(3)当向一个Topic添加新的partition,会发生partitio......
  • #yyds干货盘点# LeetCode程序员面试金典:最接近的三数之和
    题目:给你一个长度为n的整数数组 nums 和一个目标值 target。请你从nums中选出三个整数,使它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在恰好一个解。 示例1:输入:nums=[-1,2,1,-4],target=1输出:2解释:与target最接近的和是2(-1+2+1=2)......
  • #yyds干货盘点# LeetCode面试题:二进制求和
    1.简述:给你两个二进制字符串a和b,以二进制字符串的形式返回它们的和。 示例 1:输入:a="11",b="1"输出:"100"示例 2:输入:a="1010",b="1011"输出:"10101"2.代码实现:classSolution{publicStringaddBinary(Stringa,Stringb){......
  • 总结
    1.递归应用实例/***递归一维数组变二维*/letoriginalList=[1,2,3,5,7,2,4]//分行数据列表letdataList=[]//展示几行letrowNum=3//每行个数constnum=Math.ceil(originalList.length/rowNum)//处理数据分成固定等分constgetItem=(l......
  • 4.4学习总结(虚拟试衣算法初步框架构思)
    昨天上台演示了项目框架并且讲述了未来对项目规划的构思,我们组是最后一组,整体等待过程还是很煎熬的比我们队优秀的作品有很多,所以还是很有压力的不过我们会尽力在接下来的时间内,争取完成所介绍的所有功能......
  • beacon帧字段结构最全总结(二)——HT字段总结
    https://www.cnblogs.com/fengf233/p/10919436.htmlbeacon帧字段结构最全总结(二)——HT字段总结一.HTCapabilitiesHTCapabilities:802.11n的mac层给802.11的mac层加入了高吞吐量单元。所有新加的802.11n功能都是通过管理帧中的HT单元才得以实现,总体如下 抓包中......
  • 反爬虫常见策略总结
    有爬虫就有反爬虫,这都是相辅相成的,对于长时期从事在爬虫行业的技术员来说,时刻要了解对应网站的反爬机制,才能稳定获取数据。下面就是我这几年接触过的反爬的一些案例,供大家参考下。反爬虫反爬虫,即应对爬虫进行反制的统称,主要区分“正常用户”与“机器人”的一种策略统称。认识反......