大数据面试系列之——Hadoop

本文详述了Hadoop的三大核心组件——HDFS、MapReduce和YARN,包括集群搭建的不同模式、HDFS的心跳机制、机架感知策略、上传下载流程。此外,还探讨了Hadoop调度器的工作方式,如FIFO、Capacity Scheduler和Fair Scheduler,以及MapReduce中的Combiner和Partitioner的角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hadoop的三个核心:
HDFS(分布式存储系统)
MapReduce(分布式计算系统)
YARN (分布式资源调度)

1.Hadoop集群的几种搭建模式

  • 1.单机模式:直接解压安装,不存在分布式存储系统
  • 2.伪分布式:NameNode和DataNode安装于同一个节点,无法体现分布式处理的优势。
  • 3.完全分布式:一个主节点,多个从节点,存在如果主节点宕机,集群就无法使用的缺点。
  • 4.高可用模式:多个主节点,多个从节点,同一时间只有一个主节点对外服务,当提供服务的主节点出现故障时,其他任意一个主节点可以代替它,必须保持所有主节点实时数据一致,缺点主节点压力大容易出现宕机。
  • 5.联邦模式:多个主节点,多个从节点,同一时间多个主节点分别负责部分从节点对外提供服务。
    实际生产中超大集群一般采用高可用和联邦模式结合的方式部署。

2.HDFS的心跳机制
当NameNode和DataNode启动后,他们会保持通讯,DataNode会定时发送心跳报告到NameNode(默认时间间隔是3秒),以便让NameNode随时了解DataNode 的健康状态,当NameNode连续10次(默认值)未收到某一个DataNode的心跳报告时,NameNode会主动向DataNode发送检查,容许发送2次检查,每次检查默认时间是300秒,当2次检查都没有结果时断定这个DataNode节点宕机。
默认断定一个DataNode节点宕机的时间为103s+25min=630s

3.HDFS的机架感知策略
默认副本为3个,第一个副本放在本地节点存储,第二个副本放在和第一个副本不同机架任意节点,第三个副本放在和第二同机架的其他任意节点,这样既可以保证本地访问数据的速率,还可以尽可能保证数据的副本的安全。

4.HDFS的上传(写)下载(读)机制
上传机制

  • 1.客户端(client)向NameNode发送文件上传请求;
  • 2.NameNode会进行一系列检查,如用户权限、父目录是否存在、文件是否重名,成功则会为文件创建一个记录,否则向客户端抛出异常
  • 3.NameNode检查通过,客户端(client)开始切分文件(以128M一个block,将文件切分成若干个block),客户端(client)向NameNode发送上传block1的请求,NameNode收到上传文件信息后,查看DataNode信息,将确定的DataNode存储节点信息反馈到客户端(client)。
  • 4.客户端(client)拿到DataNode信息后,与最近的DataNode建立pipeline(通道),pipeline建立成功后开始以每64kb一个数据包的形式到缓存,再从缓存到DataNode的本地文件系统,然后数据包从这个DataNode备份到另一个DataNode,依次直到所有备份完成。
  • 5.当整个block1上传完毕后,DataNode会通知客户端(client)block1上传成功。
  • 6.剩余blocks重复3.4.5步骤直至整个文件上传完毕。
  • 7.当文件上传完毕后客户端(client)会 通知NameNode,NameNode更新元数据。

下载机制

  • 1.客户端(client)向NameNode发送文件下载请求。
  • 2.NameNode进行权限、文件是否存在等一系列检查,检查未通过则客户端直接抛出错误,检查通过后NameNode向客户端发送文件的存储的位置、大小、副本数等信息。
  • 3.在接收到NameNode发送的信息后,客户端会根据最近原则选择DataNode,下载第一个block,下载完成后会做CRC校验,若下载失败则客户端会向NameNode汇报,从另一个DataNode下载这个block,并且NameNode会记录这个DataNode,以后的下载和上传避免在这DataNode上执行。
  • 4.依次成功下载完其他block后,客户端(client)会向NameNode反馈下载完成。

5.简单说下MapReduce的编程模型
首先map task会从本地文件系统读取数据,转换成key-value形式的键值对集合,使用的是hadoop内置的数据类型,如Text,Longwritable等。
将键值对集合输入mapper进行业务处理过程,将其转化成需要的key-value再输出。
之后会进行一个partition分区操作,默认使用的是hashpartitioner,可以通过重写hashpartitioner的getPartition方法来自定义分区规则。
之后会对key进行sort排序,grouping分组操作将相同key的value合并分组输出,在这里可以使用自定义的数据类型,重写WritableComparator的Comparator方法来自定义排序规则,重写RawComparator的compara方法来自定义分组规则。
之后进行一个combiner归约操作,就是一个本地的reduce预处理,以减小shuffle,reducer的工作量。
Reduce task会用过网络将各个数据收集进行reduce处理,最后将数据保存或者显示,结束整个job。

6.MapReduce和yarn的详细工作过程

这篇文章写的很详细,供参考。
https://segmentfault.com/a/1190000020617543?utm_source=tag-newest

7.运行Hadoop集群时Hadoop启动时的需要启动的进程有哪些及其作用

  • 1.NameNode它是hadoop中的主服务器,管理文件系统名称空间和对集群中存储的文件的访问,保存有metadata。
  • 2.SecondaryNameNode它不是namenode的冗余守护进程,而是提供周期检查点和清理任务。帮助NN合并editslog,减少NN启动时间。
  • 3.DataNode它负责管理连接到节点的存储(一个集群中可以有多个节点)。每个存储数据的节点运行一个datanode守护进程。
  • 4.ResourceManager(JobTracker)JobTracker负责调度DataNode上的工作。每个DataNode有一个TaskTracker,它们执行实际工作。
  • 5.NodeManager(TaskTracker)执行任务

8.YARN的组成部分及各部分的作用
YARN是Hadoop2.0版本新引入的资源管理系统,目前YARN支持多种计算框架如MapReduce Storm Spark Flink等

  • 1.ResourceManager
    负责整个集群的资源的管理和分配
    具体作用:

    • 1)处理客户端请求
    • 2)启动或监控ApplicationMaster
    • 3)监控NodeManager
    • 4)资源的监控和调度
  • 2.ApplicationMaster(AM)
    ApplicationMaster 管理在YARN内运行的每个应用程序实例。ApplicationMaster 负责协调来自 ResourceManager 的资源,并通过 NodeManager 监视容器的执行和资源使用(CPU、内存等的资源分配)
    具体作用:

    • 1)负责数据的切分
    • 2)为应用程序申请资源并分配给内部的任务
    • 3)任务的监控与容错
  • 3.NodeManager(NM)
    NodeManager管理YARN集群中的每个节点。NodeManager 提供针对集群中每个节点的服务,从监督对一个容器的终生管理到监视资源和跟踪节点健康
    具体作用:

    • 1)管理单个节点上的资源
    • 2)处理来自ResourceManager的命令
    • 3)处理来自ApplicationMaster的命令
  • 4.Container
    Container 是 YARN 中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当AM向RM申请资源时,RM为AM返回的资源便是用Container表示的。YARN会为每个任务分配一个Container,且该任务只能使用该Container中描述的资源
    具体作用:

    • 1)对任务运行环境进行抽象,封装CPU、内存等多维度的资源以及环境变量、启动命令等任务运行相关的信息

9.列出你所知道的Hadoop的调度器,简要说明其工作方法

  • 1.先进先出调度器(FIFO)
    Hadoop 中默认的调度器,也是一种批处理调度器。它先按照作业的优先级高低,再按照到达时间的先后选择被执行的作业

  • 2.容量调度器(Capacity Scheduler)
    支持多个队列,每个队列可配置一定的资源量,每个队列采用FIFO调度策略,为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定。调度时,首先按以下策略选择一个合适队列:计算每个队列中正在运行的任务数与其应该分得的计算资源之间的比值,选择一个该比值最小的队列;然后按以下策略选择该队列中一个作业:按照作业优先级和提交时间顺序选择,同时考虑用户资源量限制和内存限制

  • 3.公平调度器(Fair Scheduler)
    公平调度是一种赋予作业(job)资源的方法,它的目的是让所有的作业随着时间的推移,都能平均的获取等同的共享资源。所有的 job 具有相同的资源,当单独一个作业在运行时,它将使用整个集群。当有其它作业被提交上来时,系统会将任务(task)空闲资源(container)赋给这些新的作业,以使得每一个作业都大概获取到等量的CPU时间。与Hadoop默认调度器维护一个作业队列不同,这个特性让小作业在合理的时间内完成的同时又不"饿"到消耗较长时间的大作业。公平调度可以和作业优先权搭配使用——优先权像权重一样用作为决定每个作业所能获取的整体计算时间的比例。同计算能力调度器类似,支持多队列多用户,每个队列中的资源量可以配置, 同一队列中的作业公平共享队列中所有资源。

10.请简述mapreduce中,combiner,partition作用?

在MapReduce整个过程中,combiner是可有可无的,需要是自己的情况而定,如果只是单纯的对map输出的key-value进行一个统计,则不需要进行combiner,combiner相当于提前做了一个reduce的工作,减轻了reduce端的压力。

  • Combiner只应该适用于那种Reduce的输入(key:value与输出(key:value)类型完全一致,且不影响最终结果的场景。比如累加,最大值等,也可以用于过滤数据,在 map端将无效的数据过滤掉。
    在这些需求场景下,输出的数据是可以根据key值来作合并的,合并的目的是减少输出的数据量,减少IO的读写,减少网络传输,以提高MR的作业效率。

    • 1.combiner的作用就是在map端对输出先做一次合并,以减少传输到reducer的数据量.
    • 2.combiner最基本是实现本地key的归并,具有类似本地reduce,那么所有的结果都是reduce完成,效率会相对降低。
    • 3.使用combiner,先完成的map会在本地聚合,提升速度.
  • partition意思为分开,分区。它分割map每个节点的结果,按照key分别映射给不同的reduce,也是可以自定义的。其实可以理解归类。也可以理解为根据key或value及reduce的数量来决定当前的这对输出数据最终应该交由哪个reduce task处理
    partition的作用就是把这些数据归类。每个map任务会针对输出进行分区,及对每一个reduce任务建立一个分区。划分分区由用户定义的partition函数控制,默认使用哈希函数来划分分区。
    HashPartitioner是mapreduce的默认partitioner。计算方法是
    which reducer=(key.hashCode() & Integer.MAX_VALUE) % numReduceTasks,得到当前的目的reducer。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值