Hadoop 中问答题

1. HDFS

1.描述一下HDFS的数据写入流程

在这里插入图片描述

(1)客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode,首先会检测元数据的目录树;检查权限并判断待上传的文件是否已存在,如果已存在,则拒绝client的上传。如果不存在,则响应客户端可以上传。。
(2)NameNode返回是否可以上传。
(3)客户端请求上传第一个Block。客户端上传之前对文件进行切片,切片规则:按datanode的block块大小进行切片,hadoop2.x默认block大小为128m(例如:300m文件切分为3片:第一片128m,第二片128m,剩下44m单独为1片。)
(4)NameNode返回上传的DataNode信息,具体NameNode如何选择DataNode,选择哪些DataNode是hadoop机架感知特性和副本个数决定(默认个数为3)决定
(5)客户端通过FSDataOutputStream模块请求dn1上传数据(首先就近与某台datanode建立网络连接),dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成。
(6)dn1、dn2、dn3逐级应答客户端。
(7)客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位(packet默认大小为64k。),dn1收到一个Packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答。
(注)上传到DataNode1中的数据先存到byteBuffer缓存中,达到block大小,再刷到block中进行物理存储。
(8)当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务器。(重复执行3-7步)。

2. 描述一下HDFS的数据读取流程

读数据流程详解:
(1)客户端给namenode发起文件下载请求
(2)nameNode返回文件存储所在的datanode block块信息。
(3)客户端根据拿到的block信息与距离最近的切片所在datanode建立通信通道,获取文件切片。
(4)Datanode将该节点上的切片信息传输给客户端。
(5)如果没有获取到所有的切片信息,再与距离最近其他切片副本所在的datanode建立通信通道,获取该节点的切片。如此重复,直到获取到所有的切片信息。
(6)客户端拿到所有切片后,将切片组装为完整的文件。

3.简述HDFS的架构,其中每个服务的作用

HDFS主要由四个部分组成,分别为Client,nameNode、DataNode、以及Secondary NameNode组成。
1 Client(客户端)
文件切分:文件上传HDFS的时候,client根据需求将文件切分成一个一个的小数据块(block),然后进行存储。
每个小数据块(block)在其他服务器上都有副本,client会与namenode进行通信,获取文件及其副本位置,为以后做打算。
与DataNode进行通信,读取或写入数据。
client可以管理HDFS,比如启动或关闭。
2 nameNode(管理者)
nameNode在HDFS是管理者的作用,类似于现实世界中的国王地位,客户端和secondary nameNode都是与他进行通信,然后由他发号施令来操作DataNode。主要作用有:
管理HDFS的名称空间
管理数据块(block)映射信息
配置副本策略
处理客户端请求
3 DataNode(执行者)
DataNode在文档中的角色是slave,翻译过来就是奴隶的意思(所以大家知道他的地位了吧),主要就是存储数据块和读写数据块用的:
存储实际的数据块(block)
执行数据块的读写操作
4 secondary nameNode
他是nameNode的死忠,帮助nameNode完成一些工作,并且在nameNode要挂的时候给他续命,主要作用如下:
定期合并nameNode中的fsimage(映像文件)和fsedits(日志),并推送给nameNode,避免nameNode中的fsedits过大。
在紧急情况下,可辅助恢复nameNode。

4.HDFS中如何实现元数据的维护

HDFS元数据,按类型分,主要包括以下几个部分:
1、文件、目录自身的属性信息,例如文件名,目录名,修改信息等。
2、文件记录的信息的存储相关的信息,例如存储块信息,分块情况,副本个数等。
3、记录HDFS的Datanode的信息,用于DataNode的管理。
按形式分为内存元数据和元数据文件两种,分别存在内存和磁盘上。
HDFS磁盘上元数据文件分为两类,用于持久化存储:
fsimage 镜像文件:是元数据的一个持久化的检查点,包含Hadoop文件系统中的所有目录和文件元数据信息,但不包含文件块位置的信息。文件块位置信息只存储在内存中,是在 datanode加入集群的时候,namenode询问datanode得到的,并且间断的更新。
Edits 编辑日志:存放的是Hadoop文件系统的所有更改操作(文件创建,删除或修改)的日志,文件系统客户端执行的更改操作首先会被记录到edits文件中。
fsimage和edits文件都是经过序列化的,在NameNode启动的时候,它会将fsimage文件中的内容加载到内存中,之后再执行edits文件中的各项操作,使得内存中的元数据和实际的同步,存在内存中的元数据支持客户端的读操作,也是最完整的元数据。
当客户端对HDFS中的文件进行新增或者修改操作,操作记录首先被记入edits日志文件中,当客户端操作成功后,相应的元数据会更新到内存元数据中。因为fsimage文件一般都很大(GB级别的很常见),如果所有的更新操作都往fsimage文件中添加,这样会导致系统运行的十分缓慢。
HDFS这种设计实现着手于:一是内存中数据更新、查询快,极大缩短了操作响应时间;二是内存中元数据丢失风险颇高(断电等),因此辅佐元数据镜像文件(fsimage)+编辑日志文件(edits)的备份机制进行确保元数据的安全。
NameNode维护整个文件系统元数据。因此,元数据的准确管理,影响着HDFS提供文件存储服务的能力。

5.2NN如何对NN的元数据进行合并

hdfs集群启动时,NN自己把元数据镜像和编辑日志合并一次。

​ 满足一定条件时,2NN每隔一个小时对NN的编辑日志和元数据镜像合并一次。

​ 合并的时候先告诉NN一声,这时候NN就把手上的活(追加编辑日志)停下,同时NN创建一个新的编辑日志文件,保证自己的正常工作。

​ 2NN把NN本地的元数据镜像和编辑日志拉取到2NN本地,在内存里边合并成一个新的元数据镜像,2NN自己备份一份,发给NN本地一份。

​ 另外,由于2NN每隔60s检测一次NN的编辑日志操作次数,如果NN的编辑日志累计操作次数超过一百万次,这时候即使时间没够1小时,2NN也会合并。

6.描述一下NN和DN的关系,以及DN的工作流程

NN跟DN是一对多的关系,一个NN管理多个DN的数据块的元数据信息

​ hdfs集群启动时,先进入安全模式,此时的数据只能读不能写

​ 每一台DN都要找NN注册,注册成功后跟NN汇报自己的数据块信息(6小时一次),当数据块汇报满足最小副本条件的时候,安全模式退出

​ DN的心跳每3s一次,用于跟NN通信。

​ 如果NN超过10min+30s没有收到某个DN的心跳,就认为这个DN不行了,不能用

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值