• 【hadoop】Hadoop 面试题总结


    1 hadoop的优势

    高可靠性:底层维护多个数据副本,即使某个计算元素或存储出现故障,也不会造成数据丢失。
    高扩展性:在集群间分配任务数据,方便扩展数以千计的节点
    高效性:在mapreduce的思想下,Hadoop是并行工作的,以加快任务处理速度
    高容错性:能够自动将失败的任务重新分配

    2 Hadoop组成

    Hadoop1X:mapreduce、HDFS、common(辅助工具)
    Hadoop2X:mapreduce、yarn、HDFS、common(辅助工具)
    ①1与2版本的区别:在Hadoop1版本,Hadoop中的mapreduce同时处理业务逻辑运算和资源调度,耦合性较大,在Hadoop2版本增加了yarn,yarn只负责资源的调度,mapreduce只负责运算
    ②2与3版本的区别:Hadoop3版本的最低运行时版本为JDK8。Hadoop2版本仅支持2个namenode,并不能提供最大级别的容错能力,而Hadoop3提供了多个namenode。Hadoop2版本靠存储多个副本保证数据的可靠性,降低了磁盘利用率。Hadoop3引入了纠删码技术,它可以提高了50%以上的磁盘利用率。以更小的数据冗余度获得更高的数据可靠性。

    3 纠删码技术

    纠删码技术(Erasure coding)简称EC,是一种编码容错技术。最早用于通信行业,数据传输中的数据恢复。它通过对数据进行分块,然后计算出校验数据,使得各个部分的数据产生关联性。当一部分数据块丢失时,可以通过剩余的数据块和校验块计算出丢失的数据块。
    点这里—>:纠删码原理介绍

    4 HDFS架构概述

    namenode:存储文件的元数据,如文件名、文件目录结构、文件属性(生成时间、副本数、文件权限等),以及每个文件的块列表和块所在的datanode等
    datanode:在本地文件系统存储文件块数据,以及块数据的校验和
    secondaryNamenode:用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照

    5 yarn架构概述

    resourcemanager:用于处理客户端请求,监控nodemanager,启动和监控applicationMaster,资源的分配与调度
    nodemanager:主要作用有管理单个节点的资源,处理来自resourcemanager和applicationMaster的命令
    applicationMaster:主要作用有负责数据切分,为应用程序申请资源并分配给内部的任务,并对任务进行监控和容错性的保证
    container:是yarn中的资源抽象,它封装了某个节点上的多维度资源,内存、CPU、磁盘、网络等

    6 mapreduce架构概述

    client:用于提交job
    jobTracker:负责资源监控和作业调度,监控所有TaskTracker和job的健康状态
    TaskTracker:周期性的将本节点的资源使用情况和任务运行情况上传到jobTracker
    task:分为mapTask和reduceTask,都由TaskTracker启动

    7 HDSF文件块大小

    HDFS中的文件在物理上是分块存储,块的大小通过dfs.blocksize参数设置,Hadoop1版本块默认64M,Hadoop2和3版本默认128M。块的大小根据磁盘是传输速率设置。一般寻址之间为传输时间的1%为最佳状态,根据寻址时间和磁盘传输速率计算出最佳块大小为100M左右
    HDFS块的大小不能设置的太小也不能设置的太大。块设置的太小,会增加寻址时间,程序一直在寻找块开始的位置。如果设置的太大,从磁盘传输数据的时间会明显大于定位这个块位置所需的时间。导致程序在处理这块数据是会非常的慢

    8 HDFS写数据流程

    ①客户端通过Distributed FileSystem模块向namenode请求上传文件,namenode检查目标文件是否存在,和父目录是否存在
    ②namenode应答客户端是否可以上传
    ③客户端请求第一个block可以上传到那几个datanode
    ④namenode向客户端返回可用的datanode列表,分别是A,B,C
    ⑤客户端通过FSDataOutputStream模块请求A上传数据,A收到请求后会继续调用B,B再调用C,将这个通信管道建立完成。
    ⑥A、B、C逐级应答客户端
    ⑦客户端开始往A上传第一个block(先从磁盘读取数据放到一个本地内存缓存)以packet为单位,A收到一个Packet后就会传输给B,B在传给C,A没传一个packet会放入一个应答队列等待应答
    ⑧当一个block传输完成之后,客户端再次请求namenode上传下一个block的服务器

    9 HDFS读数据流程

    ①客户端通过Distributed FileSystem向namenode请求下载文件,namenode通过查询元数据,找到文件块所在的Datanode地址
    ②挑选一台datanode(就近原则,然后随机)服务器,请求读取数据
    ③datanode开始传输数据给客户端,从磁盘里面读取数据输入流,以packet为单位来做校验
    ④客户端以packet为单位接收,现在本地缓存,然后写入目标文件

    10 fsimage与edits元数据备份

    FSimage:namenode内存中元数据序列化后形成的文件。HDFS文件系统元数据的永久性检查点,其中包含了HDFS文件系统的所有目录和文件inode的序列化信息。
    edits:记录客户端更新元数据的每一步操作,可以通过edits运算出元数据。存放HDFS文件系统的所有更新操作的路径,文件系统客户端执行的所有写操作首先会被记录到edits文件中。
    namenode的元数据存储在内存中,为了保证元数据的可靠性,元数据会定期备份到fsimage文件中。当内存中的元数据更新时,会先将元数据的更新或修改日志写入到edits文件中,edits文件只进行追加操作,效率很高。secondarynamenode主要负责edits与fsimage文件的合并工作,以保证元数据的安全性

    11 namenode与secondarynamenode元数据备份流程

    –namenode工作
    ①第一次启动namenode格式化,创建fsimage和edits文件。如果不是第一次启动,则直接加载fsimage和edits文件到内存
    ②客户端发起对元数据进行增删改操作的请求
    ③namenode将元数据更新或修改的操作记录到edits文件中,更新滚动edits
    ④namenode在内存中对数据进行更新或修改操作
    –secondarynamenode工作
    ⑤secondarynamenode询问namenode是否需要checkpoint(备份元数据),并且直接带回namenode是否checkpoint的结果
    ⑥secondarynamenode请求执行checkpoint
    ⑦namenode滚动正在写的edits
    ⑧namenode将滚动前的edits和fsimage文件拷贝到secondarynamenode
    ⑨secondarynamenode将edits和fsimage加载到内存中,进行合并生成新的镜像文件fsimage.chkpoint
    ⑩拷贝fsimage.chkpoint拷贝到namenode上,重命名并替换之前的fsimage文件

    12 DataNode工作机制

    ①一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件:一个是数据本身,一个是元数据(包括数据块长度,块数据的校验和,以及时间戳)
    ②datanode启动后向namenode注册,通过后周期性(1小时)的向namenode上报所有块信息
    ③心跳是每3秒一次,心跳返回结果带有namenode给该datanode的命令(如复制块数据到另一台机器,或删除某个数据块)。如果超过10分钟没有收到某个Datanode的心跳,则认为该节点不可用
    ④集群运行中可以安全加入和退出一些机器

    13 Hadoop HA概述

    HA:high available高可用,实现高可用的最关键的策略是消除单点故障,HA分为HDFS HA 和 yarn HA。在Hadoop2版本之间namenode存在单点故障。namenode主要在两个方面影响集群,namenode发生意外,如宕机、集群将无法使用,直到管理员重启,NameNode机器需要升级,包括软件、硬件升级,此时集群也将无法使用。HDFS HA功能通过配置Active/Standby两个NameNodes实现在集群中对NameNode的热备来解决上述问题

    14 HDFS-HA元数据与状态管理

    ①元数据管理方式需要改变,两个namenode中各自保存一份元数据,edits日志只有active状态的namenode才可以做写操作,两个namenode都可以读取edits文件,共享的edits放在一个共享存储中管理(qjouornal和NFS两个主流实现)
    ②需要一个状态管理功能模块。实现了一个zkfailover,常驻在每一个namenode节点上,负责监控自己所在的namenode节点,利用zk进行状态标识,当需要进行状态切换时,由zkfailover实现。切换时要防止出现brain split发生

  • 相关阅读:
    vue项目中的 env文件从何而来?什么是 process.env
    docker清理缓存
    sql注入(其他)
    移动web开发02
    Linux常规操作笔记(CentOS7)
    GBase 8c 分布式核心技术—CDC数据同步
    hive的分组和组内排序
    无需重启应用,动态采集任意点位日志
    【RocketMq系列-01】RocketMq安装和基本概念
    java-php-python-springboot校园新闻趣事计算机毕业设计
  • 原文地址:https://blog.csdn.net/xiexianyou666/article/details/127965917