Hadoop面试问题和回答1

Hadoop面试问题和回答

[toc]

1:什么是Hadoop?

答:是google的核心算法MapReduce的一个开源实现。用于海量数据的并行处理。hadoop的核心主要包含:HDFS和MapReduce:
HDFS:是分布式文件系统,用于分布式存储海量数据。
MapReduce:是分布式数据处理模型,本质是并行处理。

2:用Hadoop来做什么的?

答:分布式的海量存储、大规模的日志分析、离线的数据处理,结合云计算,可以进行数据挖掘等

3:什么是MapReduce?

答:是一种分布式的处理数据的计算模型,采用分而治之的思想,把处理过程高度抽象为两个函数:map()函数和reduce函数,map函数将任务分解成多个任务,reduce负责把分解后的多个任务结果汇总起来。

详情
MapReduce借用了函数式编程的概念,是一种用分布式来处理数据的计算模型。
MapReduce采用"分而治之"的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然后通过整合各个节点的中间结果,得到最终结果。简单地说,MapReduce就是"任务的分解与结果的汇总"。
在分布式计算中,MapReduce框架负责处理了并行编程中分布式存储、工作调度、负载均衡、容错均衡、容错处理以及网络通信等复杂问题,把处理过程高度抽象为两个函数:map和reduce,map负责把任务分解成多个任务,reduce负责把分解后多任务处理的结果汇总起来。

4 Hadoop中,用于执行MapReduce任务的机器角色有两个?

一共有两个,分别是JobTracker和TaskTracker:
JobTracker:用于作业调度的,一个Hadoop集群中只有一个JobTracker,位于master
TaskTracker:用于作业执行,位于各slave上。

5 MapReduce提交作业的流程?

备注:要会画图


MapReduce提交作业流程

1 客户端编写好MapReduce程序,提交作业给JobTracker;

2 JobTracker构建job,分配作业ID;

3 检查作业的输出和输入目录,没有问题则对作业输入分片的进行计算;

4 配置资源,初始化作业,放入内部作业队列中;

5 初始化完毕后,作业调度器获取输入分片信息,创建对应map任务;

6 通过心跳机制获得可用的tasktracker,对其分配任务;

7 执行任务,同时jobtracker通过心跳机制进行监控,任务完成,则返回给jobtracker;

8 client去查询jobtracker,如果任务执行成功,则任务执行结束,否则再次提交作业。

详细提交作业流程看:
MapReduce工作机制
hadoop 学习笔记:mapreduce框架详解

6 MapReduce的计算过程?

分三部分:map shuffer reduce
要回画图

MapReduce的计算过程

map

1)分片(split):FileInputFormat会将输入文件分割成多个split(等于block,*考点);

2)执行map:对分片的键值对进行map()运算,输出键值对到环形缓冲区中(考点);此处要进行partition

3)溢写spill:环形缓冲区达到阈值,启动溢写线程,将缓冲区的数据写入磁盘;

4)合并merge:溢写会产生多个文件,再写入磁盘前会进行排序(sort)和合并(combiner:对相同的key进行合并操作,提高带宽,考点)

备注:再进行合并时,会有partition操作,用来生成reduce的输入分片,对应于具体的reduce,类似于map阶段的输入分片,

shuffer

1)copy过程:Reduce端启动copy线程,通过Http方式,将map端输出的有序文件、属于自己的部分拉取到本地;
2)merge过程:copy数据先放在内存缓冲区,达到阈值时,溢写入磁盘,产生的多个小文件会合并成一个有序的最终文件,这个过程不断执行sort和combine。

reduce

1)将shuffer阶段最终生成的有序文件作为reduce的输入,对每个键值调用reduce()方法,并将结果写入HDFS中。

7 Hadoop分块和分片?

分块:

为了便于文件的管理和备份,HDFS使用块作为存储系统当中的最小单位,默认一个块的大小为64MB;
当有文件上传到HDFS上时,若文件大小大于设置的块太大,则该文件会被切分存储为多个块,多个块可以存放在不同的DataNode上,整个过程中 HDFS系统会保证一个块存储在一个datanode上 。

分片:

Hadoop会将MapReduce的输入数据划分为等长的小数据块,称为分片;
默认情况下,以HDFS的一个块的大小做为一个分片,即分片大小等于分块大小;

8 为什么默认分片大小与分块大小要相同呢?

太大,会导致map读取的数据可能跨越不同的节点,没有了数据本地化的优势
太小,会导致map数量过多,任务启动和切换开销太大,并行度过高

9 什么是map任务的数据本地化呢?

数据本地优化是指map任务中处理的数据存储在各个运行map本身的节点上,不需要跨界点消耗网络带宽进行数据传输,这能够使得作业以最好的状态运行。

10 环形缓冲区的机制?

Map过程中环形缓冲区是指:数据被map处理之后会先放入内存,内存中的这片区域就是环形缓冲区。
使用环形数据结构是为了有效使用内存空间,其数据结构是一个字节数组(KVBuffer:数据区域 索引数据区域)

具体的执行机制:
MapReduce源码解析--环形缓冲区
正确理解hadoop 2.x 的环形缓冲区: (一) MR环形缓冲区的结构

11 combine、partition和shuffer的区别?

combine:

把同一个key的键值对合并在一起,combine函数把一个map函数产生的<key,value>对(多个key,value)合并成一个新的<key2,value2>,将新的<key2,value2>作为输入到reduce函数中,这个value2亦可称之为values,因为有多个。这个合并的目的是为了减少网络传输。

partition:

partition是分割map每个节点的结果,按照key分别映射给不同的reduce,也是可以自定义的。这里其实可以理解归类。

partition的作用就是把这些数据归类,主要在Shuffle过程中按照Key值将中间结果分成R份,其中每份都有一个Reduce去负责,可以通过job.setPartitionerClass()方法进行设置,默认的使用hashPartitioner类。

Partitioner:对map()的输出进行partition,即根据key或value及reduce的数量来决定当前的这对键值对最终应该交由哪个reduce处理。默认是对key哈希后再以reduce task数量取模,默认的取模方式只是为了避免数据倾斜。然后该key/value对以及partitionIdx的结果都会被写入环形缓冲区。

shuffle:

shuffle就是map和reduce之间的过程,包含了两端的combine和partition。它比较难以理解,因为我们摸不着,看不到它,它只是理论存在的,而且确实存在,它属于mapreduce的框架。将map端的输入作为reduce的输出。

12 如何优化网络传输?

1)在分片时,调整分片大小和block块大小相同,不让分片跨界点存放,防止map时跨节点读取数据
2)在溢写时,对小文件进行合并,减少冗余文件,提高传输效率;其次使用combiner,将key相同的键值合并。
3)在shuffle的copy拉去数据时,需要网络传输,默认reduce端会并行从5个map端下载数据,可以调整这个并行默认参数。与此同时,加大下载等待时间,防止网络延迟过大或太慢,导致下载线程误判为失败。
4)使用压缩对数据进行传输。

13 Hadoop中为什么要使用数据压缩?

优点:
1,减少存储磁盘空间,降低单节点的磁盘IO。
2,加快网络传输的效率。
缺点:
需要花费额外的时间/CPU做压缩和解压缩计算
应用场景:
1,数据更多的是被存储,而不是被处理。例如使用HDFS作为数据存储,且上层搭建了Hive数据仓库。
2,数据本身有不错的压缩率。
参考:Hadoop数据压缩

14 Hadoop中的数据压缩有哪几种呢?

输入文件压缩:减少了I/O操作,但加大了cpu的处理时间;
压缩map程序中间输出:压缩这类输出可减少文件从map程序中写入到本地磁盘的文件I/O,也可以减少分区从Mapper节点传输到Reducer节点的网络I/O。;
压缩MapReduce程序的输出:对map和reduce的输出进行压缩;

压缩方式:
根据:压缩大小 压缩速度 是否可分割 冷热数据

压缩方式

Snappy压缩方式比GZIP方式快几个数量级,然而输出文件更大,大出20%-100%
Hadoop压缩方式


                               Boy-20180330-10:30 第一部分结束
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容

  • 思考问题 MapReduce总结 MapReduce MapReduce的定义MapReduce是一种编程模型, ...
    Sakura_P阅读 931评论 0 1
  • Map Reduce & YARN 简介 Apache Hadoop 是一个开源软件框架,可安装在一个商用机器集群...
    HarperKoo阅读 18,558评论 6 147
  • MapReduce框架结构## MapReduce是一个用于大规模数据处理的分布式计算模型MapReduce模型主...
    Bloo_m阅读 3,724评论 0 4
  • 目的这篇教程从用户的角度出发,全面地介绍了Hadoop Map/Reduce框架的各个方面。先决条件请先确认Had...
    SeanC52111阅读 1,706评论 0 1
  • 各位新同学,大家晚上好。 今天能在这里,我真的感到非常的荣幸。谢谢永澄、采懿邀请我。我先自我介绍一下,我叫李秀燕,...
    秀燕阅读 288评论 2 4