HDFS

1、HDFS的架构

HDFS主要分为三个部分,namenode,datanode,secondary namenode。

讲一下他们的作用。:

namenode:负责存储数据的元数据信息。

datanode:负责存储数据的block块。

secondar namenode:负责定期合并fismage文件和log文件。

fsimage负责存储namenode的备份元数据信息,log文件负责存储数据的增删修改操作。

2、HDFS的读写流程

写流程:

服务器的客户端会向namenode申请上传文件,namenode会检查该文件是否存在,如果不存在,就会允许上传。

客户端向namenode申请上传block,namenode会返回datanode的地址,假设是3个。

datanode1,datanode2,datanode3.

客户端会申请上传datanode1,data1会传给datanode2和datanode3,简历通信管道,并以321的顺序进行回复客户端。

然后客户端就会上传block块给datanode1,datanode1收到后再传给2和3。

申请上传第二个block块的话重复上述过程。

读流程:

首先客户端会向namenode记性请求,namenode检查该文件是否存在,如果存在,就允许读的流程。返回该存储该文件的datanode的地址,然后datanode会得出与客户端的距离,进行排序,客户端会读取离他最近的文件的地址,然后本地缓存,最后写进目标文件。

3HDFS文件为什么以block块文件存储

不设置block块,文件是以分散的形式分布在磁盘上,寻址时间较长,设置block块,可以减少磁盘寻到次数和时间。

4小文件过多危害和解决方法。

危害:

大量小文件会占用namenode大量的内存存储元数据信息。

计算的时候,每个小文件都需要一个maptask来处理,占用大量性能。

读取的时候,寻址时间远超读取时间。

解决方法:

将小文件合并在上传到HDFS。

采用har归档方式存储,将多个小文件打包成一个文件进行存储。

采用combineinputformat的切片方式,将多个小文件打包成一个切片进行处理。

开启jvm重用,多个task公用一个jvm。

5 namenode脑裂了解么?怎么去解决?


假设namenode1处于假死状态,namenode处于satndby状态。某一时刻namenode1的zkfaillover发生了假死,zookeeper就会认为namenode1挂掉了,就会启动会namenode2,但是此时namenode1并没有挂掉,namenode2也进入了active状态,这时就会有两个namenode对外进行输出,这时候我们就称之为脑裂现象。

解决方法,zookeeper解决这种情况的方案叫做fencing(隔离),他会调用namenode1的rpc接口中的transitionstandby方法,把namenode1转换为standby状态。

如果无法执行,我们就会调用hadoop中的预隔离措施,有两种sshfence和shellfence。

sshfence:调用ssh命令到目标机器上使用fuser杀死该进程。

shellfence:使用用户自定义脚本杀死进程。

6、简述hadoop的压缩与解压缩框架:

gzip:较高压缩率与较高压缩速度,不支持切片,hadoop本身支持。

bzip:较高压缩率,压缩速度不如gzip,支持切片,hadoop本身支持。

lzo压缩:合理的压缩率与压缩速度,支持切片,hadoop本身不支持。

snappy压缩:合理的压缩率与压缩速度,不支持切片,haddop本身不支持。

7、namenode的安全模式有了解么?

安全模式就是hdfs对于客户端来说是只读的。

namenode启动的时候,会进行fsimage文件和logs文件的合并,这个时候namenode会监听datanode,datanode会汇报最新的情况,这个时候namenode处于安全模式。

8、secondary的工作机制了解么?


 Secondary NameNode 询问 NameNode 是否需要 checkpoint。直接带回 NameNode 是否检查结果
Secondary NameNode 请求执行 checkpoint
NameNode 滚动正在写的 edits 日志
将滚动前的编辑日志和镜像文件拷贝到 Secondary NameNode
Secondary NameNode 加载编辑日志和镜像文件到内存,并合并
生成新的镜像文件 fsimage.chkpoint
拷贝 fsimage.chkpoint 到 NameNode
NameNode 将 fsimage.chkpoint 重新命名成 fsimage

9 、上传文件的时候,有一个datanode挂掉了怎么办?

客户端与datanode之间会建立pipeline管道,管道正向是客户端向datanode发送的block块,反向是datanode向客户端应答的ack确认机制,也就是datanode收到文件之后会向客户端发送我收到的确认,如果datanode挂掉了,那么客户端就收不到这个ack确认,就会通知namenode,namenode就会下线这个datanode,客户端从下一个datanode上进行上传。

10、读取文件,有一个block块损坏不符合怎么办?

客户端读取文件之后,会将这个文件与hdfs原始数据进行比对,如果不符合,那么就会通知nameno,然后从新从下一个datanode上进行读取。

11、namenode宕机如何恢复,简单介绍一下。

namenode宕机,secondarynamenode会保存namenode的元数据信息,

namenode重启后,secondarynamenode会将这个文件的拷贝传给namenode。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐