Hadoop常见八股

Hadoop是什么?

分布式的基础架构、海量数据的分布式存储、分布式计算

分布式的本质:分而治之

架构:包含三个模块

     HDFS   MR  YARN

HDFS是什么?

高可靠性的分布式文件存储系统。整体架构采用主从+主备设计模式。

主从+主备

     NN和DN,NN是负责管理HDFS集群的元数据管理,同时处理客户端的请求;DN负责实际的数据存储,负责数据的读写

     NN的备份机制,由于NN负责管理整个集群的元数据,一旦发生故障,会造成集群的不可用,实际生成HDFS至少两个NN,一个活跃另一个备份,一旦活跃的NN挂了,备份的NN切换保证集群的高可用。

HDFS的优缺点?

     优点

           高容错性:多副本

           适合批处理/大规模处理:移动计算而不是移动存储

           构建在廉价的机器

     缺点

           高延时访问

           无法高效对小文件进行存储

           不支持文件随机修改

HDFS的架构?

NameNode

      管理元数据与命名空间、响应客户端的读写请求

     存储:文件目录树,所有文件目录,文件的属性,每个块所在的DN的地址,都会由NN进行存储。

DataNode

存储block块

负责文件读取写入

与NN的交互:

心跳机制和块报告机制

心跳机制:每3秒与NN进行一次交互,使NN能够实时的掌握DN的是否在线,以及DN的资源使用情况。若10分钟没有进行心跳则认为该DN异常。

块报告机制:每6个小时与NN进行一次元数据的同步,保证NN存储最新的元数据。

Secondary NameNode

     合并fsimage与editLog:为什么合并?避免重启时元数据恢复时间过长

     辅助NN

Client

     用户操作hdfs集群的入口

HDFS元数据包含什么?

     命名空间:文件的目录树

     元数据

           文件或目录的名称,文件大小

           块id与块地址:文件与块ID的映射、块ID与DN的映射

     存放形式

           fsimage:元数据镜像文件,存储某一时刻 HDFS 的完整目录结构

           editlog:编辑日志,是元数据的 “操作日志”,记录fsimage生成后所有对 HDFS 的修改操作

为什么要分块?为什么分块为128MB?

为什么分块?

1.一个文件可能大于集群中的任意磁盘,引入块机制,能很好解决

2.适合数据备份,提高可靠性, Datanode 节点故障时,只需重新复制该节点上的块到其他节点。

3.提升并行处理效率

为什么分为128MB?

寻址时间与传输时间的平衡

HDFS 的设计目标是让寻址时间占传输时间的比例不超过 1%

当寻址时间为10ms的话,传输时间就是10ms✖️100 也就是1s

传统磁盘的传输效率就是100mb/s 所以我们设定块的大小是128mb

说一下HDFS的写流程?

1.客户端通过分布式文件系统向NN发送写文件请求

2.NN查看文件的路径是否已经存在,通过校验后可以上传

3.客户端请求第一个块的上传地址,哪几个DN

4.NN返回客户端三个DN节点路径,分别为DN1、DN2、DN3

5.客户端通过文件分布式系统建立数据传输管道,先与DN1建立TCP连接,DN1收到请求后与DN2建立TCP连接,再调用DN3,将通信管道建立成功

6.客户端向DN1上传第一个块,DN1收到包就会传给DN2,DN2传给DN3.每传一个包就会放入一个ack队列等待应答,应答方向是反着DN3到DN2到DN1

7.一个块上传完会进行下一个块的上传等所有块上传完成,DN会通知NN上传完毕,NN会元数据文件映射关系

8.最后关闭通道,上传完毕

说一下HDFS的读流程?

1.客户端通过分布式文件系统向NN发送读文件请求

2.NN返回DN的地址,客户端就近选择每一个块的DN节点读取数据

3.DN传输文件给客户端

4.客户端以包为单位进行接收,先放入缓冲区,最后写入目标文件

说一下HDFS写文件的容错机制?

     client异常

           Client写文件需要向NN申请租约,Client挂掉后租约会超时,HDFS会释放该租约和关闭文件、然后将这个块文件在不同DN上的存储变成一致状态

     D2,D3异常

           写入过程不会立即终止,而是将这个挂掉的节点摘除,只有两个块进行同步,然后块传输完毕后,NN会检测到这个块副本只有两个,会找个DN复制一份,保证三个副本。

           如果挂掉的集群恢复怎么办?

                当挂掉后会给块文件生成 一个新的时间戳,挂掉的文件恢复后,时间戳不统一就会被清除

                所以说有时候副本数量会出现4个,然后再变为一个

     D1异常

           节点异常,写入失败,重置整个链路

     NN异常

           1.客户端与NN,通信过程中发生异常、立即终止通信,任务失败

           2.客户端与DN,传输时NN异常,传输不影响继续执行,当传输完毕后,DN需要向NN通知传输完毕,但NN挂掉,这时候会出现异常,一般需要人工介入

什么是MR?

分而治之的思想、大任务分成小任务并行执行、map和reduce阶段

说一下MR的流程,说一下Shuffle流程?

1.数据分片:输入文件过大,MapReduce会对其进行切分,大文件会被切分成一个个的块,每一个块对应一个task

2.map函数:

     从输入的数据解析出一个个 key / value 。

     将这些key-value交给 Map ()函数处理,并产生一系列新的 key / value

3.Shuffle

     map端Shuffle:map端的处理结果会暂存在一个内存环形缓冲区(默认100MB)达到80%进行溢写,把缓冲区的数据写入本地溢写文件

     写入磁盘前,会对数据进行分区,将key的哈希值对reduce个数进行取余,余多少放在哪个分区

     然后会对数据进行排序(快速排序),如果设置了combiner,会对排序后结果进行combine

     最后map端输出完最后一个文件,会将溢写文件合并为一个文件,合并时进行排序(归并排序)和combine

     reduce端Shuffle

           reduce端拉取不同的map数据,首先保存在内存中,达到一定阈值,写入磁盘中

           后台线程会将从不同map拉取过来的数据,采用归并排序合并成 一个大的有序文件,然后输出给reduce()

4.reduce

     排序完的键值对调用reduce()方法,键相等的键值对调用一次reduce()方法,最后将输出的键值对写入到hdfs中

为什么要用缓冲区?环形?

等缓冲区写满进行一次写入磁盘,减少I/O

     单向缓冲区不能并发读写,而双向缓冲区因为读写的效率不一致也不能做到很好的并发;而环形缓冲区,当达到百分之80阈值,并行读写

     在缓冲区内进行一次按分区的排序,使用快排,那么之后对溢写文件的归并排序有很大的提升。

说一下Shuffle阶段的排序手段?为什么要排序?

排序好处:

           减少reduce端排序压力、reduce拉取其分区的数据时减少扫描量、方便进行预聚合

快排和归并的比较

快排O(nlogn) 不稳定的排序 适合内存中排序

归并排序O(nlogn) 稳定的排序(合并时保留顺序 适合对有序文件的合并

说一下MR中map、reduce个数决定因素?

map个数

     输入文件的个数

     输入文件的总大小

     集群设置的文件块大小

reduce个数

     1.参数1 我们指定reduce个数

     2.参数2: 每个reduce处理的数据量

     3.参数3 最多启动的reduce个数

说一下Yarn的架构?

ResourceManager:全局的资源管理器,负责整个集群的资源管理分配

NodeManager:NM就是每个节点上的资源和任务管理器

ApplicationMaster:用户提交的每个任务都包含一个AM

监控任务运行、与RM协调获得资源、进一步的分配任务

Container节点上对于资源的抽象,封装了节点上多维资源,内存,磁盘,网络

说一下Yarn的执行流程?

1.客户端向yarn的RM提交AM应用程序

2.AM通过校验后,向其分配一个container,并在其中启动AM

3.AM向RM注册,然后向RM申请运行程序所需要的资源,随后监控整个任务的执行

4.AM在监控运行的实例时,不端与RM保持心跳,并通过RPC通信向RM申请资源

5.AM领取到资源会与NM通信,要求NM启动对应的container,并执行任务

6.NM会为AM要启动的任务设置好环境,下载好所需资源

7.拉起的任务通过心跳向AM汇报进度,NM监控container的运行状态向RM汇报

8.任务完成后,AM通知RM完成,RM通知NM聚集日志,清理临时文件等

说一下Yarn的任务调度器?

先进先出调度器:排成一个队列,先进先出队列,将资源优先给最头上的使用

容量调度器:会有专门的队列处理小任务,预先占用一定的集群资源,导致大任务的执行时间不如先进先出

公平调度器:相对公平的分配资源

说一下HDFS常用的命令?

hdfs dfs-ls、-get、-put、-rm、-find、-tail、-du -h

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值