以下是一些我在面试时候碰到的关于hdfs的面试问题
什么是hdfs
分布式文件存储系统,元数据存放在namenode中,它是通过目录树的方式定位文件
hdfs上的数据怎么修改
它适合一次写入多次读出,不适合修改
hdfs的读写流程
写:
1客户端通过distributed FileSystem向nameNode请求上传文件
2nameNode返回是否允许上传
3客户端将第一个block向nameNode请求dataNode节点
4NameNode返回配置的副本节点数
5客户端通过fs dataoutputput Stream模块请求上传数据 dn1收到请求继续调用dn2、dn3,将通道建立完成
6dn1、dn2、dn3逐级应答客户端
7建立好通道之后开始上传block并落盘
8第一个block完成之后重复请求落盘操作
读:1客户端通过distributed fileSystem向nameNode请求下载文件,nameNode通过查询元数据找到文件所在dataNode位置
2就近原则选择dataNode节点读取数据
3客户端以pocket接收,先在本地缓存然后写入目标文件
block块大小,能否调整,能否超过128M
block128M ,可以调整大小,可以超过128M但是最优为128M
hadoop1.x与hadoop2.x有什么区别
1.x中的nameNode只能有一个,虽然可以通过2NN同步备份数据,但总有延时
2.x中增强了nameNode的水平扩展及可用性,可以部署多个nameNode相互独立,DataNode同时在所有nameNode上注册
NameNode高可用怎么做
故障转移:两个nameNode的状态放在zookeeper中,有一个进程监控程序实时读取zookeeper的状态判断是否宕机,如果宕机了强制关掉active的机器,standby顶上
如何降低副本数
hadoop fs -setrep -w 2-R /路径
SecondaryNameNode的checkpoint
一开始以为是spark的checkpoint,后来反应过来是辅助nameNode合并fsimage和edits的
如果是第一次启动nameNode会格式化之后生成一个edits和fsimage,如果不是第一次启动则直接加载edits和fsimage到内存中,首先会滚动edits并生成一个空的edits_inprogress,然后加载归档后的edits和fsimage到内存中此时nameNode就会持有最新的元数据信息,客户端发送增删改请求,这些请求会被记录到edits_inprogress中,如果此时nameNode挂掉,重启后悔从edits中读取元数据信息,然后再执行元数据的增删改操作,由于edits中记录的操作会越来越多,需要合并eduts和fsimage,2NN就是辅助NN进行合并,他首先会询问是否需要checkpoint(edits写满的时候或者定时辅助nameNode checkpoint 默认3600s 64M执行)fsimage:nameNode内存中元数据序列化之后形成的文件
edits:记录客户端更新元数据之后的每一步操作