大数据常见面试题 Hadoop篇
Posted 后季暖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据常见面试题 Hadoop篇相关的知识,希望对你有一定的参考价值。
目录
4.通常你是如何解决Haddop的NameNode宕机的,流程是什么?
7.讲解一下Hadoop中combiner和partition的作用
8.你在MapReduce过程中遇到过数据倾斜问题吗?你是如何处理的?
10.Mapreduce的map数量和reduce数量是由什么决定的?
16.谈谈Hadoop序列化和反序列化及自定义bean对象实现序列化?
1.描述一下hdfs的写流程 读流程?
2.详细讲解一下hdfs的体系结构
HDFS 采用的是master/slaves主从结构模型来管理数据,这种结构模型主要由四个部分组成:Client(客户端)、Namenode(名称节点)、Datanode(数据节点)和SecondaryNamenode(第二名称节点,辅助Namenode)。一个真正的HDFS集群包括一个Namenode和若干数目的Datanode。Namenode是一个中心服务器,负责管理文件系统的命名空间 (Namespace )及客户端对文件的访问。集群中的Datanode一般是一个节点运行一个Datanode进程,负责管理客户端的读写请求,在Namenode的统一调度下进行数据块的创建、删除和复制等操作。数据块实际上都是保存在Datanode本地文件系统中的。每个Datanode会定期的向Namenode发送数据信息,报告自己的状态(心跳机制)。没有按时发送心跳信息的Datanode会被Namenode标记为“宕机”,“宕机”的Datanode不会被分配I/O任务。
3.如果一个datanode出现宕机,恢复流程是什么样的?
4.通常你是如何解决Haddop的NameNode宕机的,流程是什么?
先分析宕机后的损失,宕机后直接导致client无法访问,内存中的元数据丢失,但是硬盘中的元数据应该还存在,如果只是节点挂了, 重启即可,如果是机器挂了,重启机器后看节点是否能重启,不能重启就要找到原因修复了。 但是最终的解决方案应该是在设计集群的初期就考虑到这个问题,做namenode的HA。
5.描述一下NameNode的元数据的管理
6.Hadoop集群中有哪些进程?他们各自有什么作用?
1.NameNode用于管理文件系统名称空间和对集群中存储的文件的访问,保存了元数据。
2.SecondaryNameNode作用是提供周期检查点和清理任务。帮助NN合并editslog,减少NN启动时间。
3.DataNode它负责管理连接到节点的存储(一个集群中可以有多个节点)。每个存储数据的节点运行一个datanode守护进程。
4.ResourceManager(JobTracker)负责调度DataNode上的工作。每个DataNode有一个TaskTracker,它们执行实际工作。
5.NodeManager(TaskTracker)执行任务
6.DFSZKFailoverController高可用时它负责监控NN的状态,并及时的把状态信息写入ZK。它通过一个独立线程周期性的调用NN上的一个特定接口来获取NN的健康状态。FC也有选择谁作为Active NN的权利,因为最多只有两个节点,目前选择策略还比较简单(先到先得,轮换)。
7.JournalNode 高可用情况下存放namenode的editlog文件。
7.讲解一下Hadoop中combiner和partition的作用
8.你在MapReduce过程中遇到过数据倾斜问题吗?你是如何处理的?
如何解决 MapReduce 数据倾斜的问题?_Shockang的博客-CSDN博客_mapreduce数据倾斜
9.Hadoop的Shuffle分为哪几个阶段?
map的collect到reducetask从磁盘上拉取数据中间这些过程都是shuffle,详细展开就好。
10.Mapreduce的map数量和reduce数量是由什么决定的?
map:(1)文件的个数 (2)文件大小 (3)blocksize
reduce:最优的reduce任务个数取决于集群中可用的reduce任务槽(slot)的数目。
几个reduce对应几个分区。自己设置的话 job.setNumReduceTasks(x);x 为reduce的数量。不设置的话默认为 1。
11.block size、切片大小?
2.x和3.x默认是128M,之前是64M
在HDFS上,map默认运算切片大小是128M,但如果是本地运行的话,map默认切片大小是32M。
切片主要由这几个值来运算决定:
mapreduce.input.fileinputformat.split.minsize=1 默认值为 1
mapreduce.input.fileinputformat.split.maxsize= Long.MAXValue默认值Long.MAXValue
因此,默认情况下,切片大小=blocksize。
maxsize(切片最大值):参数如果调得比blocksize小,则会让切片变小,而且就等于配置的这个参数的值。
minsize(切片最小值):参数调的比blockSize大,则可以让切片变得比blocksize还大。
12.讲解一下MapReduce的流程?
13.HDFS的系统架构是如何保证数据可靠性的?
(1)安全模式
① HDFS刚启动时,NameNode进入安全模式,处于安全模式的NameNode不能做任何的文件操作,甚至内部的副本创建也是不允许的,NameNode这时需要和各个DataNode进行通信,获得DataNode存储的数据块信息,并对数据块信息进行检查,只有通过了NameNode的检查,一个数据块才被认为是安全的。当认为安全的数据块所占比例达到了某个阈值,NameNode才会开始启动;
(2)SecondaryNamenode备份机制
① 在Hadoop中使用SecondaryNameNode来备份NameNode的元数据,以防止在NameNode宕机的时候,能从SecondaryNameNode中恢复出NameNode上的元数据;
② NameNode中保存了整个文件系统的元数据,而SecondaryNameNode的作用就是周期性保存NameNode的元数据。元数据中包括FSImage镜像文件数据和EditLog编辑日志。FSImage相当于HDFS的检查点,NameNode启动时候会读取FSImage的内容到内存,并将其与EditLog日志中的所有修改信息合并生成新的FSImage。在NameNode运行过程中,所有关于HDFS的修改都将写入EditLog日志文件中。这样,如果NameNode宕机,可以通过SecondaryNameNode中保存的FSImage和EditLog数据恢复出NameNode最近的状态,尽量减少数据的损失;
(3)心跳机制和副本重新创建
① 为了保证NameNode和各个DataNode的联系,HDFS采用了心跳机制。NameNode周期性的向各个DataNode发送心跳包,而收到心跳包的DataNode要进行回复。因为心跳包是定时发送的,所以NameNode就把要执行的命令也通过心跳包发送给DataNode,而DataNode收到心跳包,一方面要回复NameNode,另一方面就要开始应用数据的传输;
② 如果检测到DataNode失效,NameNode之前保存在这个DataNode上的数据就变成不可用数据。如果有的副本存储在失效的DataNode上,那么需要重新创建这个副本,放到另外可用的地方去;
(4)数据一致性
① 一般来讲,DataNode与应用交互的大部分情况都是通过网络进行的,而网络数据传输带来的一大问题就是数据是否原样到达。为了保证数据的一致性,HDFS采用了数据校验和(checkSum)机制。创建文件时,HDFS会为这个文件生成一个校验和,校验和文件和文件本身保存在同一空间中。传输数据时会将数据与校验和数据一起传输,应用收到数据后可以进行校验,如果两个校验的结果不同,则文件出错了,这个数据块就变成无效的。如果判定为无效,则需要从其他DataNode上读取副本数据;
14.写出MapReduce求TopN的思路
我一般用java的api来实现,先用自定义类型Bean作为map输出的KEYBean,必须实现WritableComparable接口,必须自定义一个分组比较器根据需求自己来写比较的逻辑。
15.详细描述Yarn的三大调度策略
FIFO调度策略 这个策略没啥好讲的,提交一个任务进入队列,调度器根据优先级和到达先后进行排序,一次给每一个应用分配资源,知道没有资源为止。没有人会在生产环境用这个策略,性能太差了。
Capacity调度策略 属于共享调度策略,将集群资源,给队列分配部分资源,每个队列互不干涉
公平调度策略 队列间可以互相共享资源,如果权重高的任务来了,权重低的任务会分给权重高的任务部分资源,必要时,可kill掉权重低的任务
16.谈谈Hadoop序列化和反序列化及自定义bean对象实现序列化?
1)序列化和反序列化
序列化就是把内存中的对象,转换成字节序列(或其他数据传输协议)以便于存储(持久化)和网络传输。
反序列化就是将收到字节序列(或其他数据传输协议)或者是硬盘的持久化数据,转换成内存中的对象。Java的序列化是一个重量级序列化框架(Serializable),一个对象被序列化后,会附带很多额外的信息(各种校验信息,header,继承体系等),不便于在网络中高效传输。所以,hadoop自己开发了一套序列化机制(Writable),精简、高效。
2)自定义bean对象要想序列化传输步骤及注意事项:
(1)必须实现Writable接口
(2)反序列化时,需要反射调用空参构造函数,所以必须有空参构造
(3)重写序列化方法
(4)重写反序列化方法
(5)注意反序列化的顺序和序列化的顺序完全一致
(6)要想把结果显示在文件中,需要重写toString(),且用”\\t”分开,方便后续用
(7)如果需要将自定义的bean放在key中传输,则还需要实现comparable接口,因为mapreduce框中的shuffle过程一定会对key进行排序
以上是关于大数据常见面试题 Hadoop篇的主要内容,如果未能解决你的问题,请参考以下文章