目录

1.描述一下hdfs的写流程 读流程?

2.详细讲解一下hdfs的体系结构

3.如果一个datanode出现宕机,恢复流程是什么样的?

4.通常你是如何解决Haddop的NameNode宕机的,流程是什么?

5.描述一下NameNode的元数据的管理

6.Hadoop集群中有哪些进程?他们各自有什么作用?

7.讲解一下Hadoop中combiner和partition的作用

8.你在MapReduce过程中遇到过数据倾斜问题吗?你是如何处理的?

9.Hadoop的Shuffle分为哪几个阶段?

10.Mapreduce的map数量和reduce数量是由什么决定的?

11.block size、切片大小?

12.讲解一下MapReduce的流程?

13.HDFS的系统架构是如何保证数据可靠性的?

14.写出MapReduce求TopN的思路

15.详细描述Yarn的三大调度策略

16.谈谈Hadoop序列化和反序列化及自定义bean对象实现序列化?


1.描述一下hdfs的写流程 读流程?

写流程:

(1)客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在,检查客户端是否有权限,如果以上条件均满足,执行(2)
(2)NameNode响应客户端的请求,允许其上传文件。
(3)客户端请求第一个 Block上传到哪几个DataNode服务器上。
(注意:NameNode在返回3个DataNode节点之前,会存储相关信息到元数据,用于对其的管理)
(4)NameNode返回3个DataNode节点,分别为dn1、dn2、dn3。
(注意:这里是根据网络拓扑计算节点的距离,按照最近距离进行分配。一般而言,再本机机架节点负载允许的范围内,会优先选择本机机架节点当作dn1,然后选择最近的机架。用改机架的两个服务端当作其余两个节点dn1,dn2)
(5)客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成。
(注意:这里的通信信道建立属于类似“串联”的方式进行连接。是由客户端根据NameNode的返回信息,找到dn1,然后,dn1找dn2,dn2找dn3)
(6)dn1、dn2、dn3逐级应答客户端。
(7)客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位,dn1收到一个Packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答。
(注意:此处再传送packet时,会再建立一个队列,用于暂存还未存储的packet,当packet请求存储成功后,会从队列中删除,这样做的目的是,防止传输时,packet因为请求延迟等原因,导致信息丢失)
(8)当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务器。(重复执行3-7步)。

读流程:

(1)客户端通过DistributedFileSystem向NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址。
(2)挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据。
(3)DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验)。
(4)客户端以Packet为单位接收,先在本地缓存,然后写入目标文件。

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篇(2)_后季暖的博客-CSDN博客如果没有自定义的partitioning,则默认的partition算法,即根据每一条数据的key的hashcode值模运算(%)reduce的数量,得到的数字就是分区号。https://blog.csdn.net/weixin_51981189/article/details/127839484?spm=1001.2014.3001.5501

大数据常见面试题 Hadoop篇(1)相关推荐

  1. 大数据常见面试题 Hadoop篇(2)

    大数据常见面试题 Hadoop篇(1)_后季暖的博客-CSDN博客1)序列化和反序列化序列化就是把内存中的对象,转换成字节序列(或其他数据传输协议)以便于存储(持久化)和网络传输.反序列化就是将收到字 ...

  2. 大数据常见面试题----冲!!!

    大数据常见面试题 一.Hadoop生态 1.1 HDFS 1.1.1 hdfs读写流程 1.1.2 NameNode.DataNode的作用 1.3 hive 1.3.1 hive中内部表.外部表的区 ...

  3. 大数据常见面试题及答案

    1.rdd的5大特性: Spark之RDD的定义及五大特性 - |旧市拾荒| - 博客园 2.Hive分桶和分区的区别: https://blog.csdn.net/u010003835/articl ...

  4. 大数据常见面试题之数据仓库

    文章目录 一.数仓中是如何划分主题的 二.数仓分层 1.源数据层ODS 2.数据仓库层DW 3.数据应用层APP:面向业务定制的应用数据 补充:维表层 Dimension 三.数仓和普通数据库区别 四 ...

  5. 【千里之行,始于足下】大数据高频面试题——Hadoop篇(一)

  6. laravel mysql sum查询并排行_必看!PHP常见面试题——MySQL篇(二)

    接上期:<必看!PHP常见面试题--MySQL篇(一)> 11.MySQL的默认事务隔离级别是? 读未提交(RU): 一个事务还没提交时, 它做的变更就能被别的事务看到. 读提交(RC): ...

  7. 前端常见面试题 - JS篇

    以下会是JS常见面试题: 面试题将会以系列不定时更新,编写不宜,如有用到,请动动小手关注一下. 1. 简述ES6 1. let: 块级作用域. 2. const: 常量; 块级作用域; 一旦声明, 则 ...

  8. 大数据基础知识问答----hadoop篇

    handoop相关知识点 1.Hadoop是什么? Hadoop是一个由Apache基金会所开发的分布式系统基础架构.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速 ...

  9. “约见”面试官系列之常见面试题第九篇vue实现双向绑定原理(建议收藏)

    目录 1.原理 2.实现 在目前的前端面试中,vue的双向数据绑定已经成为了一个非常容易考到的点,即使不能当场写出来,至少也要能说出原理.本篇文章中我将会仿照vue写一个双向数据绑定的实例,名字就叫m ...

最新文章

  1. [分享]五种提高 SQL 性能的方法
  2. 【OpenCV3】几何图形(直线、矩形、圆、椭圆、多边形等)绘制
  3. wxWidgets:wxTaskBarIcon类用法
  4. hihoCoder #1104 Suzhou Adventure
  5. Android清除本地数据缓存代码
  6. haproxy基于cookie实现会话绑定
  7. ecshop实现弹出登录框
  8. Event Loop - JavaScript和node运行机制
  9. cdn网络加速原理剖析
  10. cat3 utp是不是网线_网线UTP-CAT5、UTP-CAT5e、UTP-cat6产品简介讲解
  11. 基于医院信息管理系统案例的软件构造分析
  12. 【Pandas】Pandas求某列字符串的长度,总结经验教训
  13. SEO 基础知识遇上圣诞节
  14. 学python吧-Python为什么这么厉害? 不想成为专业码农? 来学习Python吧!
  15. 硬盘坏了可以修复吗?如何恢复里面的数据?
  16. 怎么把两个PDF文件合并一起
  17. Swift基础(六)解包
  18. 笔记类app之Leanote同步机制 韩俊强的博客
  19. Linux学习笔记(包含虚拟机及Linux系统安装)
  20. php有几个单词,PHP-如何选择一个句子的前10个单词?

热门文章

  1. 浮点类型的比较,精度控制(float.h的利用 ,DBL_EPSILON)
  2. IntelliJ IDEA远程debug调试
  3. pycharm注册码,之前的已经过期
  4. Scaling Vision Transformers
  5. 荣品-i.MX6Q开发板 飞思卡尔iMX6Q开发板 工业级开发板
  6. Vert.x(vertx) 连接MySQL、Oracle数据库
  7. NLP(三十四)使用keras-bert实现序列标注任务
  8. YYKit系列之——YYModel使用(摘自GitHub)
  9. 滤波器,滤波器的种类,作用,原理
  10. java课设小迷宫含代码_Java小项目之迷宫游戏的实现方法