1. HDFS的写流程
a) hdfs客户端向namenode发送rpc请求.
b) namenode检查文件是否已经存在, 创建者是否有权进行操作, 成功则会为文件创建记录, 反之客户端抛出异常.
c) 客户端将文件切分成多个packets, 并在内部以数据队列形式管理packets. 然后客户端向namenode申请blocks, 通过选择合适的datanode列表来存放副本.
d) 以pipeline的形式将packet写入所有副本中. DataStreamer以流的形式将packet写入第一个datanode, 然后以此类推写至最后一个.
e) 当datanode接收完成, 会给DFSOutputstream一个确认消息, 而DFSOutputStream中有一个确认队列, 一旦收到确认信息, 就会将相应的包从确认队列中删除, 并为其创建副本.
f) 客户端完成数据写入后, 调用流的close()方法, 关闭数据流.
延申—如果传输过程中datanode出现故障怎么办?
如果有某个datanode故障, 当前管道会关闭, 故障的datanode会被从当前管道移除,剩余的block会继续以管道形式传输, 同时namenode会分配一个新的datanode, 保持replicas维持设定的数量.
2. datanode什么情况下不会备份?
设置备份数为1时, 就不会备份了.
延申—Hadoop中在哪里设置备份数, 是哪个字段?
在hdfs-site.xml中的dfs.replication变量.
3. HDFS中大量小文件带来的问题以及解决方法
问题:
hadoop中目录,文件和块都会以对象的形式保存在namenode的内存中,