博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDFS写流程
阅读量:5145 次
发布时间:2019-06-13

本文共 1247 字,大约阅读时间需要 4 分钟。

HDFS写流程

[hadoop@hadoop002 hadoop-2.6.0-cdh5.7.0]$ hdfs dfs -put LICENSE.txt /
19/02/20 21:30:22 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
[hadoop@hadoop002 hadoop-2.6.0-cdh5.7.0]$

对于我们操作者而言,是无感知的

1.Client调用FileSystem.create(filePath)方法,
去与NN进行【RPC】通信,check该路径的文件是否存在
以及有没有权限创建该文件。 假如OK,就创建一个新文件,
但是不关联任何的block,nn根据上传的文件大小且块大小且副本数,
计算多少块,以及块存放的dn,最终将这些信息返回给客户端
则为【FSDataOutputStream】。

2.Client调用FSDataOutputStream.write方法,将第一个块的

第一个副本写到第一个DN,写完写第二个副本,写完写第三个副本;
当第三个副本写完,返回给ack packet给第二个副本的DN,然后第二个DN返回ack packet给第一个DN;
第一个DN返回ack packet给FSDataOutputStream对象,标识第一个块,3副本写完!

副本默认个数的参数设置参考:https://www.cnblogs.com/xuziyu/p/10426186.html

然后依次写剩余的块!

注意:

客户端调用FSDataInputStream API的write方法首先将其中一个block写在datanode上,每一个block默认都有3个副本,并不是由客户端分别往3个datanode上写3份,而是由已经上传了block的datanode产生新的线程,由这个namenode按照放置副本规则往其它datanode写副本,这样的优势就是快。

参考:https://www.cnblogs.com/fssqblogsit/p/6938999.html

(对操作者来说是透明的)

3.当向文件写入数据完成后,Client调用FSDataOutputStream.close()方法。关闭输出流,flush换成区的数据包。

4.再调用FileSystem.complete(),通知NN节点写入成功。

3DN

3副本
副本数据=DN

1DN

1副本
测试:DN挂了 能不能写
同比: 3DN 3副本 1DN挂了 肯定写不成功

10DN

3副本
副本数据<DN
测试:DN挂了 写

总结: 存活的DN满足我们的副本数 就能写

转载于:https://www.cnblogs.com/xuziyu/p/10431932.html

你可能感兴趣的文章
Vs2013中通过Nuget添加不同版本jQuery
查看>>
webpack 相关资料
查看>>
HTTP状态码(HTTP Status Code),常见的error 404, error 504等的意思
查看>>
Java(1)JDK安装
查看>>
python 导入包
查看>>
站在巨著之上谈泛型(转载)
查看>>
关东升-我的全栈之路导师之一
查看>>
Apache的安装和配置
查看>>
An introduction to machine learning with scikit-learn
查看>>
LOJ#2070. 「SDOI2016」平凡的骰子(计算几何)
查看>>
指数与指数函数 错题
查看>>
ios多线程
查看>>
Error Running Git Empty git --version output:IDEA关联GitHub时出现这个错误
查看>>
Binary Apple Tree_ural1018_树状dp
查看>>
ecshop 后台分页功能
查看>>
sql server 多列转多行实现方法
查看>>
mybatis知识小计
查看>>
winfrom 多线程控制窗体 刷新子窗体控件 主窗体弹框时空对象
查看>>
AVPlayer缓存实现
查看>>
画图板中的画图工具的使用
查看>>