您现在的位置是:首页 > 数据处理

Hadoop面试题及参考答案

2022-09-23数据处理

简介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:平均分配

郑重声明:

本站所有活动均为互联网所得,如有侵权请联系本站删除处理

随便看看

文章排行

本栏推荐

栏目更新