同学面试的hadoop一些题,求大牛一起解答
1 一个mr跑的比较慢,如何来优化,至少给出6个方面 答: 因为mr的运行是以HDFS为存储基础的,那么可能会影响我们性能的是block size的大小,默认是64M,在网络条件良好的情况下,可以适当的调大参数,设置为128M或者更大。在运行一个job之前,hadoop需要知道你的map个数和reduce个数,默认情况下是一个map和一个reduce。我们可以通过设置mapred.map.tasks 和mapred.reduce.tasks参数来设置map和reduce个数。可是如何来修改这两个参数呢?一般情况下,这两个参数的修改也会影响到其他的参数设置,mapred.tasktracker.map.tasks.maximun和mapred.tasktracker.reduce.tasks.maximum 这两个参数设置了一台机器上最多能同时运行的map和reduce的个数,所以要结合这些参数,使得机器上的map进程和reduce进程不要处于闲置状态。还有,就是因为map有很长一段时间是和reduce进程共存的,共存的时间取决于你设置的mapred.reduce.slowstart.completed.maps,如果你设置0.6,那么reduce将在map完成60%的时候进行。如果,map和reduce个数设置比较大的话,会出现争夺资源的,造成有些资源饥饿,出现socket。timeout,所以根据集群的性能适当的增加或者减少,那么如何在设置map和reduce之间的配比较好呢,根据网上大牛的经验,发现在reduce进行到33%时候,map任务差不多完成,即reduce在33%时候,完成了copy阶段,所以map最好在reduce到达33%之前完成,不要让reduce进行等待。
还有两个参数就是io.sort.mb和mapred.child.java.opts,因为每一个map和reduce是一个task,都会对应一个jvm,sort.mb也是分配在jvm中,用来设置一个map sort的buffer到底是多少,等于mb*io.sort.spill.percent 这关系到spill到磁盘的次数.一般JVM的最大可用内存量设置为mb的两倍。
mapred.reduce.parallel.copies设置reduce可用进行的最大并行拷贝线程数,这些线程会同时从其他不同的datanode上拷贝map的结果。
mapred.compress.map.out进行压缩,一般mapred.map.out.compression.codec=snappy,因为这个格式对于压缩和解压缩都比较快,
还有就是如果你的集群是异构的,有些机器性能好,有些差,那么建议打开mapred.reduce.tasks.speculative.execution推测性执行,有利于优化进程分配,提升集群性能。
2从客户端写一个文件到hadoop的过程
在客户端往HDFS写数据的时候,数据是以包为单位发送到hdfs的datanode上的。包会先放到一个dataqueue中,有一个datastream服务会查看这个dataqueue是否有包,看是不是一个block,如果有就想namenode申请资源,将包发给相应的datanode。当客户端发送完一个包,客户端会将这个包从dataqueue移到到ackqueue中,在这个过程中,还有另一个服务启动并监听着,是ResponseProcessor。因为block都有副本数,其他的存储副本数的datanode正常存储数据后会想客户端发送一ack,当接收到全部的ack后ResponseProcessor会将包从ackQueue中移除掉
客户端的读过程就简单多了,客户端想hdfs发送读请求,namenode将这个文件的所有信息发送过去,客户端根据发送的信息到相应的datanode上去读取相应的块。
3 什么样的计算不能用mr来提速举出5个例子
当涉及到很多连接计算时,mapreduce会很慢。
必须转换为map和reduce操作
4 你认为hadoop有哪些不合理的地方?
http://dongxicheng.org/mapreduce-nextgen/hadoop-2-0-unsolved-problems/
5 hadoop 有哪些重大故障,如何处理
6 secondnamenode 和HA namenode是如何工作的?
挺难的,需要平时多积累。而且不是一两句说清楚的 5 hadoop 有哪些重大故障,如何处理。
这应该是考察工作中遇到的各种情况。
重大故障,master挂掉了,导致整个集群不工作了。
在企业中稍微有点安全意识的,都会采用HA或则双机备份的方式。所以直接恢复就好了。
原理更多查看:
hadoop1.x是没有HA,采用的双机备份。
Hadoop 双机热备-AvatarNode部署
http://www.aboutyun.com/forum.php?mod=viewthread&tid=7764
hadoop双机热备方案
http://www.aboutyun.com/forum.php?mod=viewthread&tid=5686
hadoop2.x
更容易恢复,直接增加节点即可
hadoop HA 备份standby node损坏,该如何修复
6 secondnamenode 和HA namenode是如何工作的?
Secondary NameNode能说出下面即可
Secondary NameNode的目录结构如下:
${fs.checkpoint.dir}/current/VERSION /edits /fsimage /fstime /previous.checkpoint/VERSION /edits /fsimage /fstime
http://www.aboutyun.com/data/attachment/forum/201403/08/212842d1kgrsg1q5go66lk.jpg
如上图,Secondary NameNode主要是做Namespace image和Edit log合并的。
那么这两种文件是做什么的?当客户端执行写操作,则NameNode会在edit log记录下来,(我感觉这个文件有些像Oracle的online redo logo file)并在内存中保存一份文件系统的元数据。
Namespace image(fsimage)文件是文件系统元数据的持久化检查点,不会在写操作后马上更新,因为fsimage写非常慢(这个有比较像datafile)。
由于Edit log不断增长,在NameNode重启时,会造成长时间NameNode处于安全模式,不可用状态,是非常不符合Hadoop的设计初衷。所以要周期性合并Edit log,但是这个工作由NameNode来完成,会占用大量资源,这样就出现了Secondary NameNode,它可以进行image检查点的处理工作。步骤如下:(1) Secondary NameNode请求NameNode进行edit log的滚动(即创建一个新的edit log),将新的编辑操作记录到新生成的edit log文件;(2) 通过http get方式,读取NameNode上的fsimage和edits文件,到Secondary NameNode上;(3) 读取fsimage到内存中,即加载fsimage到内存,然后执行edits中所有操作(类似OracleDG,应用redo log),并生成一个新的fsimage文件,即这个检查点被创建;(4) 通过http post方式,将新的fsimage文件传送到NameNode;(5) NameNode使用新的fsimage替换原来的fsimage文件,让(1)创建的edits替代原来的edits文件;并且更新fsimage文件的检查点时间。整个处理过程完成。Secondary NameNode的处理,是将fsimage和edites文件周期的合并,不会造成nameNode重启时造成长时间不可访问的情况。
来自:hadoop详细了解5个进程的作用http://www.aboutyun.com/forum.php?mod=viewthread&tid=7088
这个面试题对新手来说感觉比较难。。。
尤其是1,3,4,5,对有一定的项目经验,慢慢积累才有好的感悟。
页:
[1]