大数据开发面试题-HDFS
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。
更多推荐
所有评论(0)