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 8 with docker-compose「终于解决」

    MySql 8 with docker-compose「终于解决」// Docker-compose.yml of MySql 8 version: '3' services: mysql: image: mysql restart: alwa…

    2023-02-22
    111
  • (9)MySQL进阶篇SQL优化(InnoDB锁-记录锁)[亲测有效]

    (9)MySQL进阶篇SQL优化(InnoDB锁-记录锁)[亲测有效]1.概述 InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的。InnoDB这种行锁实现特点意味着:只有通过索引条件检索

    2023-04-15
    109
  • 进军东南亚市场,腾讯云数据库 TDSQL 助力印尼 BNC 银行数字化转型[通俗易懂]

    进军东南亚市场,腾讯云数据库 TDSQL 助力印尼 BNC 银行数字化转型[通俗易懂]腾讯云数据库在助力金融核心系统分布式替换上,已经辐射到了东南亚市场。 东南亚最大的银行之一印尼BNC银行(Bank Neo Commerce)已正式完成新核心分布式迁移,使用腾讯云数据库TDSQL后,

    2023-06-17
    103
  • Python嵌套列表简介

    Python嵌套列表简介嵌套列表是Python的一个强大而灵活的数据结构,可以用来存储任意深度的数据,在列表和元组之间提供了一种简明而强大的解决方案。本文将介绍Python中的嵌套列表,包括什么是嵌套列表、如何创建它们、如何访问它们、如何修改它们以及如何使用它们来进行更复杂的计算和操作。

    2024-04-20
    24
  • Hadoop节点规模为什么不如Laxcus?[通俗易懂]

    Hadoop节点规模为什么不如Laxcus?[通俗易懂]Hadoop节点规模为什么不如Laxcus?需要从“多域并行集群、松耦合架构、DFL人工智能模型的自适应机制”三个角度来解释

    2023-04-14
    110
  • Python工程师:解析tempstr

    Python工程师:解析tempstr作为一名Python工程师,我们时常需要处理大量的数据,其中常用的一种数据格式就是字符串。而在字符串处理中,使用正则表达式是一种非常高效和灵活的方式,而正则表达式的一个关键就是:解析字符串。在这篇文章中,我们将会介绍如何使用Python来解析字符串,并针对不同场景进行实例演示。

    2024-04-16
    28
  • Python GUI编程:安装使用Tkinter进行界面设计

    Python GUI编程:安装使用Tkinter进行界面设计Graphical User Interface(图形用户界面)是现代软件中不可缺少的一部分,它提供了一种更亲近、直观的界面,使用户能够以更方便的方式与程序交互。而Python Tkinter(Toolkit Interface)是Python标准库中内置的一款GUI工具包,它提供了创建基本GUI应用程序所需的组件和控件,并且容易学习和使用。

    2024-03-10
    37
  • mysql使用临时表提高查询效率_sql慢查询如何优化

    mysql使用临时表提高查询效率_sql慢查询如何优化【理论分析】 MySQL在执行SQL查询时可能会用到临时表,一般情况下,用到临时表就意味着性能较低。 临时表存储 MySQL临时表分为“内存临时表”和“磁盘临时表”,其中内存临时表使用MySQL的M…

    2022-12-20
    96

发表回复

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