英文转自: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实现的任一语言。
-------------未完待续!!!!!