hadoop常见面试题

NameNode存储内容
文件系统的命名空间:
    a、文件名称;${dfs.name.dir}/current/VERSION
    b、文件目录结构;/edits
    c、文件的属性(权限,创建时间、副本数);/fsimage
    d、文件对应哪些数据块-->数据块对应哪些DataNode节点;/fstime
    说明d:不会持久化存储这个映射关系,是通过集群的启动和运行时,datanode定期发送blockreport给namenode。以此namenode在内存在动态维护这种映射关系。
NameNode作用
管理文件系统的命名空间。它维护着文件系统树及整棵树内所有的文件和目录。这些信息以两个文件形式永久保存在本地磁盘上:命名空间镜像文件fsimage和编辑日志文件editlog。
DataNode存储
数据块和数据块校验和
说明:与namenode通信:
    a、每隔3秒发送一个心跳包
    b、每十次心跳发送以此blockReport
DataNode作用
读写文件的额数据块(主要)
Scondary NameNode
存储:命名空间镜像文件fsimage和编辑日志editlog
作用:定期合并fsimage+editlog文件为新的fsimage,推送给NN,称为检查点,checkpoint。
参数:dfs.namenode.checkpoint.period: 3600 秒

具体参考:[https://www.cnblogs.com/smartloli/p/4342340.html]

文件读流程(FSDataInputStream)

这里写图片描述

  • 1、Client通过调用FileSystem.open(filePath)方法,去与NameNode进行rpc通信,返回该文件的部分或全部的block列表(包含该列表各block分布在DataNode上的地址列表),也就是返回FSDataInputStream对象;
  • 2、Client调用FSDataInputStream的read()方法,

    • a.去与第一个块最近的DataNode进行read,读取完后,会check,假如successful,会关闭与当前datanode通信。如果失败,则会记录失败的块+DataNode信息,下次就不会读取;那么会去该块的第二个DataNode地址读取。
    • b.然后去第二个块最近的DataNode上进行读取,check后关闭与此DataNode的通信。
    • c.假如block列表读取完了,文件还未结束,那么FileSystem会从NameNode获取下一批block的列表。(读操作对于client端是透明的,是连续的数据流)
  • 3、Client调用FSDataInputStream.close()方法,关闭输入流。

文件写流程(FSDataOutputStream)

这里写图片描述

  • 1、Client调用FileSystem.create(filepath)方法,去与NameNode进行rpc通信,check该路径的文件是否存在以及有没有权限创建该文件。假如条件成立,则创建一个新文件,但是不关联任何的block,返回一个FSDataOutputStream对象;否则返回错误信息,写代码需要try-catch。
  • 2、Client调用FSDataOutputStream的write()方法,会将第一个块写入第一个DataNode,第一个块写完传给第二个节点,第二个写完传给第三个节点。当第三个节点写完返回一个ack packet给第二个节点,第二个返回一个ack packet给第一个节点,第一个节点返回ack packet给FSDataOutputStream对象,则标志第一个块写完,副本数为3;接着剩下的块一次类似写。(写操作对client端透明)
  • 3、当向文件写入数据完成后,Client调用FSDataOutputStream.close()方法,关闭输出流,flush缓存区的数据包。
  • 4、调用FileSystem.complete()方法,告诉NameNode节点写入成功。

若泽数据: www.ruozedata.com
交流群: 707635769


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值