1.5.5 HDFS读写解析-hadoop[亲测有效]

1.5.5 HDFS读写解析-hadoop[亲测有效]1.5.5 HDFS读写解析 1.5.5.1 HDFS读数据流程 客户端通过Distributed FileSystem向NameNode请求下载文件,NameNode通过查询元数据, 找到文件块所在

1.5.5 HDFS读写解析-hadoop

目录
  • 1.5.5 HDFS读写解析
    • 1.5.5.1 HDFS读数据流程
    • 1.5.5.2 HDFS写数据流程

1.5.5 HDFS读写解析

1.5.5.1 HDFS读数据流程

在这里插入图片描述

  1. 客户端通过Distributed FileSystem向NameNode请求下载文件,NameNode通过查询元数据, 找到文件块所在的DataNode地址。
  2. 挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据。
  3. DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验)。
  4. 客户端以Packet为单位接收,先在本地缓存,然后写入目标文件。

1.5.5.2 HDFS写数据流程

在这里插入图片描述

  1. 客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在。

  2. NameNode返回是否可以上传。

  3. 客户端请求第一个 Block上传到哪几个DataNode服务器上。

  4. NameNode返回3个DataNode节点,分别为dn1、dn2、dn3。

  5. 客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成。

  6. dn1、dn2、dn3逐级应答客户端。

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

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

验证Packet代码

@Test
public void testUploadPacket() throws IOException {
    //1 准备读取本地文件的输入流
    final FileInputStream in = new FileInputStream(new File("e:/lagou.txt"));
    //2 准备好写出数据到hdfs的输出流
    final FSDataOutputStream out = fs.create(new Path("/lagou.txt"), new Progressable() {
        public void progress () { //这个progress方法就是每传输64KB(packet)就会执行一次,
            System.out.println("&");
        }
    });
    //3 实现流拷贝
    IOUtils.copyBytes(in, out, configuration); //默认关闭流选项是true,所以会自动 关闭
    //4 关流         可以再次关闭也可以不关了
}

原文地址:https://www.cnblogs.com/gitBook/archive/2022/12/09/16967974.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/4440.html

(0)
上一篇 2023-06-19
下一篇 2023-06-19

相关推荐

  • mysql如何dump数据「终于解决」

    mysql如何dump数据「终于解决」从远程数据库dump mysqldump -h hostname -u user –verbose -p database > dump.sql 上传到本地数据库 mysql -u local_u…

    2023-04-10
    156
  • 提高数据处理效率的Python最小化实现

    提高数据处理效率的Python最小化实现现如今,数据处理已成为各行各业都必备的技能和工具。然而,数据处理效率往往成为数据处理的瓶颈。Python作为一种高级编程语言,为程序员们提供了许多工具和方法来提升数据处理效率。在本文中,我们将介绍如何使用Python来最小化实现提高数据处理效率。

    2024-03-15
    74
  • MySQL锁与事务隔离级别[通俗易懂]

    MySQL锁与事务隔离级别[通俗易懂]1、概述 (1)锁的定义 锁是计算机协调多个进程或线程并发访问某一资源的机制。 在数据库中,除了传统的计算资源(如CPU、RAM、IO等)的争用以外,数据也是一种供需要用户共享的资源。如何保证数据并发

    2023-01-29
    154
  • SQL Injection (Blind) time 盲注入[亲测有效]

    SQL Injection (Blind) time 盲注入[亲测有效]python3编写EXP系列 SQL Injection (Blind) time盲注入 1 简介 DVWA靶场这个是最基础的靶场如果想学习EXP编写这个靶场最好不过,如果能把这个靶场的利用的EXP…

    2023-04-12
    162
  • 关于thks的介绍

    关于thks的介绍随着互联网的快速发展,越来越多的企业和组织开始关注数据处理和分析领域,strongthks/strong作为一家专业的大数据处理和分析公司,为客户提供高效、准确、全面的数据解决方案,为企业和组织的发展提供有力支持。

    2024-06-21
    40
  • Python函数参数定义

    Python函数参数定义函数参数定义是指在定义函数时,给函数传递的参数设置名称、类型、默认值等具体信息。设置良好的函数参数可以有效提高程序的可读性和可维护性。

    2023-12-06
    124
  • mysql查询最近一小时的数据[通俗易懂]

    mysql查询最近一小时的数据[通俗易懂] date_sub()函数: DATE_SUB(date,INTERVAL expr type) 实例: SELECT NOW(),DATE_SUB(NOW(),INTERVAL 1 HOUR…

    2023-03-21
    152
  • MongoDB Security[通俗易懂]

    MongoDB Security[通俗易懂]1. Security MongoDB提供了一系列的保护措施,以保护它自身安全: 启用访问控制并实行身份验证 MongoDB支持多种身份认证机制,默认的认证机制是SCRAM 配置基于角色的访问控制 首

    2023-05-04
    133

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注