hadoop面试题整理(海哥每日默写)

2018.11.26
1、HDFS读写流程
(1)写数据流程
1).客户端发出请求 hdfs dfs -put /etc/profile /qf/data
2).namenode查看维护的目录结构,检查/qf/data是否存在,如不存在直接报错”no such file or directory“,
如存在返回给客户端同意上传文件请求,将操作写入日志文件
3).客户端请求上传第一个块,询问namenode块的存储位置
4).namenode查看自己的datanode池,返回给客户端一个datanode列表
5).客户端发出请求建立pipeline
6).客户端先把文件写入缓存,达到一个块的大小时,会在客户端和第一个datanode建立连接开始流式的传输数据,
这个datanode会一小部分一小部分(4K)的接收数据然后写入本地仓库,同时会把这些数据传输到第二个datanode,
第二个datanode也同样一小部分一小部分的接收数据并写入本地仓库,同时传输给第三个datanode
(在流式复制时,逐级传输和响应采用响应队列来等待传输结果。队列响应完成后返回给客户端)
7).第一个数据块传输完成后会使用同样的方式传输下面的数据块直到整个文件上传完成。
8).整个文件完成,namenode更新内存元数据
(2)读数据流程
1)客户端向namenode发起RPC调用,请求读取文件数据。
2)namenode检查文件是否存在,如果存在则获取文件的元信息(blockid以及对应的datanode列表)。
3)客户端收到元信息后选取一个网络距离最近的datanode,依次请求读取每个数据块。客户端首先要校检文件是否损坏,如果损坏,客户端会选取另外的datanode请求。
4)datanode与客户端建立socket连接,传输对应的数据块,客户端收到数据缓存到本地,之后写入文件。
5)依次传输剩下的数据块,直到整个文件合并完成。

2、namenode的启动过程(元数据还原过程)

(1)加载镜像文件,还原了checkpoint时间节点前的元数据(包含目录结构,文件大小,块的大小,块的id等等信息),不包含块的存储位置
(2)加载edits文件,还原了checkpoint时间节点到集群停止的元数据,不包含块的存储位置。(至此namenode还原的元数据唯一缺失的就是块的存储位置)
(3)blockreport阶段,datanode启动,向namendoe汇报自己所管理的块及块的id,namenode根据块的ID还原块的存储位置
(4)在blockreport结束后,集群会判断,datanode的启动数量(可设置,默认为0),丢失的块的占比(可设置,默认0.999f)
是否满足退出安装模式的条件,如果满足,30秒后退出安全模式。在安全模式下namenode会删除多余的块
(副本数为3,结果实际存储4个。ps:这种情况发生在datanode宕机,集群把宕机的datanode管理的块进行了复制,而宕机的datanode又重新启动了)
还会复制低于副本数的块。

3、什么情况下会进入安全模式?
块的数量低于阀值
datanode启动数量不够都会进入安全模式
4、如何离开安全模式
(1)调低阀值
hdfs-site.xml中
dfs.namenode.safemode.threshold-pct
0.999f
(2)强制离开
hdfs dfsadmin -safemode leave
(3)重新格式化集群
(4)修复损坏的块文件

5、HDFS的可靠性策略
1)文件完整性
在文件建立时,每个数据块都产生校验和,校验和会保存在.meta文件内;
客户端获取数据时可以检查校验和是否相同,从而发现数据块是否损坏;
如果正在读取的数据块损坏,则可以继续读取其它副本。NameNode标记该块已经损坏,然后复制block达到预期设置的文件备份数;
DataNode 在其文件创建后三周验证其checksum。
2)网络或者机器失效
(1)副本冗余
(2)机架感知策略(副本放置策略)
(3)心跳机制策略
3)namenode挂掉
(1)主备切换(高可用)
(2)镜像文件和操作日志磁盘存储
(3)镜像文件和操作日志可以存储多份,多磁盘存储
4)其他机制
(1)快照(和虚拟机快照意义相同,保存了系统某一时刻的影像,可以还原到该时刻)
(2)回收站机制
(3)安全模式


2018.11.27

猜你喜欢

转载自blog.csdn.net/weixin_42741866/article/details/84564140