HDFS的写入数据的流程

文字连贯版

1)想要进行【本地文件写入hdfs】的操作,首先需要将服务器与HDFS进行连接,从而获取HDFS的客户端连接对象,然后用客户端连接对象来调用API完成具体功能:比如写入文件的功能(写入数据的过程,重点研究的点也是在这。研究往HDFS写入数据时的内在工作机制)

  1. 将服务器与HDFS进行连接的代码
            //hdfs的访问路径:hdfs://hadoop132:9820  (
            //将Hadoop集群的服务器路径,传递给uri,便于实现hdfs与Hadoop集群之间的连接)
            URI uri = URI.create("hdfs://hadoop132:9820");
            //conf 配置对象
            Configuration conf = new Configuration();
            conf.set("dfs.replication","6");
            //操作的用户(用哪个用户操作HDFS)
            String user = "zhangwuji";
  2. 获取HDFS的客户端连接对象的代码
    //获取HDFS的客户端连接对象(文件系统对象)
    FileSystem fs = FileSystem.get(uri, conf, user);
  3. 用客户端连接对象来调用API完成具体功能:比如写入文件的功能,的代码
    //用文件系统对象fs来调用API从而完成功能
    fs.copyFromLocalFile(false,true,
                    new Path("E:\\Documents\\01_大数据开发\\3.Hadoop\\02.资料\\07_测试数据\\wcinput\\hello.txt"),
                    new Path("/client_test"));

2)完成了第一步的准备工作之后,则准备上传文件了(也就是所谓的【往HDFS写数据】),那如何往HDFS写入数据呢?只需要通过第一步的【文件系统对象】调用【上传文件的API】即可将本地文件写入HDFS中

  1. 写入文件的具体代码
    //用文件系统对象fs来调用API从而完成功能
    fs.copyFromLocalFile(false,true,
                    new Path("E:\\Documents\\01_大数据开发\\3.Hadoop\\02.资料\\07_测试数据\\wcinput\\hello.txt"),
                    new Path("/client_test"));

3)剖析文件写入的内在工作机制(HDFS的写数据流程):将本地文件传入HDFS的这个过程中发生了什么?

  1. 客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在。NameNode根据目标文件是否存在、父目录是否存在,来判断是否可以上传。
  2. 若经过判断可以上传文件,NameNode则会向客户端返回响应:表示可以上传文件
  3. 于是客户端则会先向NameNode请求上传第一个Block的数据(0-128M),并询问NameNode应该将文件上传到哪几个DataNode上。
  4. NameNode则会向客户端返回三个节点dn1、dn2、dn3,表示存储数据用这三个节点(问:NameNode如何确定应该返回哪几个节点给客户端--机架感知的知识点)
  5. 客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成。(为什么请求dn1上传数据,因为:本地文件的数据放在了dn1、dn2、dn3中存储,现在需要请求三个节点中的数据开始上传到HDFS)
  6. 然后dn1、dn2、dn3逐级应答客户端,三个节点均应答成功则可以开始传输数据了

  7. 客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位,dn1收到一个Packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答

  8. 当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务器。(重复执行3-7步)

推荐阅读:

1.​​​​​​HDFS读写流程(史上最精炼详细)_简述hdfs系统中文件的读写过程-CSDN博客

2.【精】彻底理解HDFS写文件流程 - 知乎 (zhihu.com)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值