Hadoop面试题及参考答案

1、什么是Hadoop及其组件

Hadoop是一个开源分布式计算平台架构,基于apache协议发布,由java语言开发。主要包括

  • HDFS(分布式文件管理系统)
  • MapReduce(分布式计算框架)
  • Hive(基于Hadoop的数据仓库)
  • Pig(基于Hadoop的数据流系统)
  • HBase(一个分布式面向列的数据库)
  • Spark(快速和通用计算的Hadoop数据引擎)
  • ZooKeeper(分布式协作服务)

2、Hadoop的守护进程

  • NameNode(元数据服务器)
    主节点,存储文件的元数据(文件名,文件目录结构,文件属性——生成时间,副本数,文件权限),以及每个文件的块列表和块所在的DataNode等
  • SecondaryNameNode(辅助元数据服务器)
    用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据快照
  • DataNodes(块存储)
    在本地文件系统存储文件块数据,以及块数据校验
  • JobTracker(任务调度)
    负责接收用户提交的作业,负责启动、跟踪任务执行,每个 DataNode有一个TaskTracker,它们执行实际工作。
  • TaskTrackers(任务执行)
    负责执行由JobTracker分配的任务,管理各个任务在每个节点的执行情况。

3、Hadoop的YARN/HDFS/MapReduce分别包含哪些组件,每个组件的职能是什么?

3.1 YARN:Yet Another Resource Negotiator,是一种新的Hadoop资源管理器

  • ReasourManager
    负责资源管理的,整个系统有且只有一个 RM ,来负责资源的调度。它也包含了两个主要的组件:定时调用器(Scheduler)以及应用管理器(ApplicationManager)。
  • ApplicationMaster
    每当 Client 提交一个 Application 时候,就会新建一个 ApplicationMaster 。由这个 ApplicationMaster 去与 ResourceManager 申请容器资源,获得资源后会将要运行的程序发送到容器上启动,然后进行分布式计算。
  • NodeManager
    NodeManager 是 ResourceManager 在每台机器的上代理,负责容器的管理,并监控他们的资源使用情况(cpu,内存,磁盘及网络等),以及向ResourceManager/Scheduler 提供这些资源使用报告。
  • Container
    Container是YARN集群中资源的抽象,将NM上的资源进行量化,根据需要组装成一个个Container,然后服务于已授权资源的计算任务。计算任务在完成计算后,系统会回收资源,以供后续计算任务申请使用。Container包含两种资源:内存和CPU,后续Hadoop版本可能会增加硬盘、网络等资源。

3.2 HDFS:分布式文件管理系统

  • NameNode
  • SecondaryNameNode
  • DataNode

3.3 MapReduce:分布式计算框架,采用Master/Slave架构,1个JobTracker带多个TaskTracker

  • JobTracker
  • TaskTracker
  • MapTask
  • ReduceTask

4、一个MapReduce任务在提交阶段是如何对输入数据进行分片划分的?

通过InputSplit()函数来处理,设置分片数量为Math.max(minSize,Math.min(goalSize, blockSize)),一个数据片分配一个map任务。

5、MapReduce里的Combiner是做什么用的?什么情况下需要,和Reduce的区别是什么?

Combiner主要是在map完成后,reducer之前对数据做一次聚合,以减少数据传输的IO开销。
数据格式转换

  • map: (K1, V1) → list(K2, V2)
  • combine: (K2, list(V2)) → list(K2, V2)
  • reduce: (K2, list(V2)) → list(K3, V3)
    注意:combine的输入和reduce的完全一致,输出和map的完全一致

Combiner和Reducer的区别在于运行的位置
Combiner是在每一个MapTask所在的节点运行;
Reducer是接收全局所有Mapper的输出结果;

6、MapReduce的Shuffle过程包含了哪几个阶段,分别做了什么工作?Shuffle的数据量是由什么决定的?

  • map端shuffle
    1、split,将文件切片
    2、partition,得到key,value形式的结果
    3、写入环形内存缓冲区
    4、spill,执行溢出写
    5、归并

  • reduce端shuffle
    1、复制copy
    2、归并merge
    3、reduce

7、什么是推测机制,它是如何解决计算慢节点问题的?

当一个task被认定很慢后,JobTracker会起一个新的task attempt来双跑,取最先完成的task的结果,本文记录下Hadoop中是如何判断一个task需要起speculative task的。

8、HDFS是如何实现容错机制的?如果NameNode挂了会怎么样,DataNode挂了会怎么样?

  • HDFS 通过复制进程来保证容错机制。在文件写入 HDFS 时,HDFS 会首先把文件分割成块,并把这些数据块存储在集群不同机器上,然后在其他机器创建各个块的副本,默认情况下,HDFS 会在其他机器创建3个文件的副本。
  • NameNode挂了
    使用文件系统元数据副本(FsImage)启动一个新的 NameNode。
    然后,配置 DataNode 和客户端,以便它们可以确认这个新的 NameNode,即启动。
    现在,新的 NameNode 将在完成加载最后一个检查点 FsImage(用于元数据信息)并从 DataNode 接收到足够的块报告后开始为客户端提供服务。
  • DataNode挂了
    NameNode 定期从集群中的每个 DataNode 接收心跳(信号),这意味着 DataNode 运行正常。
    块报告包含 DataNode 上所有块的列表。如果一个 DataNode 发送心跳消息失败,则在特定时间段后将其标记为死亡。
    NameNode 使用之前创建的副本将死节点的块复制到另一个 DataNode

9、HDFS的一次读数据请求经历了怎样的过程?一次写请求经历了怎样的过程?

  • 写数据请求
    1、客户端通过Distributed FileSystem模块向NameNode请求上传文件;
    2、NameNode检查是否已存在文件和检查权限。若通过检查,直接先将操作写入EditLog,并返回输出流对象;
    3、客户端按照配置参数(dfs.blocksize,比如128MB)的大小将文件切分为块(Block),并向NameNode请求上传第一个Block;
    4、NameNode返回分配的可写的DataNode列表,比如dn1、dn2、dn3;
    5、客户端通过FSDataOutputStream模块向dn1请求上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道pipeline建 立完成;
    6、dn1、dn2、dn3逐级应答客户端;
    7、客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位,dn1收到一个Packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答;(注:并不是每写完一个packet后就返回确认信息,因为packet中的每个chunk都携带校验信息,没必要每写一个就汇报一下,这样效率太慢。正确的做法是写完一个block块后对校验信息进行汇总分析,进而得出是否有块写错的情况发生)
    8、当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务器。(重复执行3-7步);
    9、写完数据,关闭输出流。

  • 读数据请求
    1、客户端通过Distributed FileSystem向NameNode请求下载文件,NameNode通过查询元数据获得这个文件的数据块位置列表,返回输入流对象;
    2、挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据;
    3、DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验);
    4、客户端以Packet为单位接收,先在本地缓存,然后写入目标文件;
    5、写完数据,关闭输入流。

10、YARN的产生解决了什么样的调度问题?

Hadoop 由MapReduce和HDFS组成,1.x版本设计缺陷是单点故障,即MR的JobTracker和HDFS的NameNode两个核心服务均存在单点问题,这使得Hadoop在相当长时间内仅适合离线存储和离线计算。

Hadoop 2.0由三个分支组成,分别是HDFS、MapReduce和YARN,YARN是Hadoop 2.x中的资源管理系统,它是一个通用的资源管理模块,可为各类应用程序进行资源管理和调度。YARN不仅限于MapReduce一种框架使用,也可以供其他框架使用,Spark、Storm等。
Yarn的作用:解耦资源与计算

11、YARN是如何做计算资源的调度的,有哪些策略?

  • FIFO:先到先得
  • Capacity:给小任务单独一份计算资源
  • Fair:平均分配
  • 13
    点赞
  • 142
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值