现在的位置: 首页 > 综合 > 正文

hadoop面试可能遇到的问题

2018年01月20日 ⁄ 综合 ⁄ 共 2602字 ⁄ 字号 评论关闭

英文转自:http://blog.163.com/redhumor@126/blog/static/1955478420112642253529/

由于本人英文水平和对hadoop的理解有限,翻译的不到位的地方欢迎大牛们指正,不甚感激。

对于hadoop中的专业名词,我就以英文直接呈现,方便理解。

问题1 :说出hadoop中最长见得输入格式

            --文本输入格式    TextInputFormat

            --key value对输入格式    KeyValueInputFormat

            --序列化文件输入格式     SequenceFileInputFormat


问题2:TextInputFormat和KeyValueInputFormat之间的区别

      --TextInputFormat:通过读入文件当中的每行文本,文本的偏移量作为mapper的key,文本内容作为mapper的value。

      --KeyValueInputFormat:读入文本,把每行解析成key value对,每一行的标志字符作为mapper的key,余下的作为mapper的value。


问题3:hadoop中的输入块(InputSplit

      --当hadoop中运行一个任务时,会把输入文件分很多合适的小块,把每一个分块交给一个mapper处理,这就称为输入块。


问题4:在hadoop的框架中是怎样进行文件分块的

      --hadoop框架中通过运行用户定义的输入格式类中的getInputSplit()方法继续拧分块的。


问题5:在map/reduece系统中考虑如下情况:

  *HDFS块大小是64MB  

  *输入格式是文本  

  *我们有三个不同大小的文件,它们分别是:64K,65MB,127MB。

  问:会有多少个输入的分块?

      --会有5个分块,64K的文件一个块,65MB的文件2个,127MB的文件2个。


问题6:谈谈hadoop中的RecordReader的作用

      -- InputSplithas定义了一块工作,但是没有描述怎么样做。RecordReader
class从源中装载数据,将其转化成适合mapper读入的key/value对。RecordReader的实例在InputFormat中有定义。


问题7:当map阶段完成,hadoop框架接着完成Partitioning,Shuffle和Sort,解释一下这个阶段发生了什么。

      --Partitioning

           这个阶段是决定那个reducer实例接收哪个中间key/value对,每一个mapper必须决定所有输出的key/value对相应的reducer。重要的一点是,对于任何一个key,不管是哪个mapper产生的,它的目标块是一样的。

      --Shuffle

           完成了第一个map任务之后,节点可能仍然在运行更多的map任务,同时也有将mapper的中间输出交给reducer。这个把map的输出移交给已知的reducer就是Shuffling。

      --Sort

           每一个的reduce任务响应reduce很多key/value对,在移交给reducer之前,hadoop会对一个节点上的中间key集合会排序。


问题9:如果没有自定义的分割器,那么在移交给reducer之前,hadoop会怎么样处理数据分割?

      --缺省的分割器会为key计算一个hash值,基于计算结果进行分割。


问题10:什么是Combiner?

      --Combiner是一个mini-reduce的过程,它只处理mapper产生的数据。Combiner只接收在给定的节点上由mapper实例产生的数据作为输入,reducer接收的是combiner之后的输出,而不是mapp之后的输出。


问题11:举一个相应的应用场景的例子,说明哪些地方用到combiner,哪些地方没有用到combiner?

      --用到combiner的场景:获取一个文件中不同单词列表的时候

      --用不到combiner的场景:计算一系列数字的平均值的时候


问题12:什么是Job
Tracker

      --Job Tracker是一种服务,能够运行map/reduce任务的一个簇。


问题13:Job
Tracker的典型功能有哪些?

 
    --从客户端接收作业

 
    --告诉NameNode去决定数据的存放位置

 
    --将Task Tracker节点可用的卡槽放置于数据的附近 

 
    --将作业提交给选定的Task Tracker节点,而且负责监听来自task tracker的心跳信号


问题14:什么是task
tracker?

 
   --它是簇中的一个节点,负责接收来自map、reduce和shuffle的任务


问题15:在hadoop中,job和task的关系?

 
   --一个作业分割成一个或者多个任务


问题16:假设hadoop中一个作业催生出100个任务,而且其中一个任务失败了,hadoop将会怎么处理?

 
   --在另外的其他task tracker中重新启动这个任务,只有当这个任务失败次数超过4次(这个次数默认为4次,可以设置),就杀死掉这个作业。


问题17:hadoop中任务分配给多个节点并行操作,很可能是有些慢的节点会拖慢程序的进度,请问hadoop怎么解决?

 
   --Speculative Execution 投机执行


问题18:Speculative
Execution的运行机制

 
       --job tracker允许不同的task trakcer处理相同的输入。当任务完成时,它会将这个事实通知给job tracekr。哪个最先完成就选哪个。如果其他的备份执行不合理,hadoop会告诉task trakcer放弃这个任务,忽视它们的输出。然后reducer接收最先成功完成的任务作为输入。


问题19:linux命令

 
    --查看hadoop集群运行的所有作业  hadoop job -list

 
    --杀死一个作业 hadoop job -kill jobid


问题20:hadoop的streaming? 

 
   --streaming是一个通用API,它允许程序一以虚拟方式写可以被用来作为mapper和reducer实现的任一语言。


-------------未完待续!!!!!

抱歉!评论已关闭.