【揭秘Hadoop背后的秘密!】HDFS读写流程大曝光:从理论到实践,带你深入了解Hadoop分布式文件系统!

简介: 【8月更文挑战第24天】Hadoop分布式文件系统(HDFS)是Hadoop生态系统的关键组件,专为大规模数据集提供高效率存储及访问。本文深入解析HDFS数据读写流程并附带示例代码。HDFS采用NameNode和DataNode架构,前者负责元数据管理,后者承担数据块存储任务。文章通过Java示例演示了如何利用Hadoop API实现数据的写入与读取,有助于理解HDFS的工作原理及其在大数据处理中的应用价值。

Hadoop 分布式文件系统(HDFS)是 Hadoop 生态系统中的核心组件之一,旨在提供高吞吐量的数据访问能力,非常适合大规模数据集的分布式存储。本文将详细探讨 HDFS 中的数据读写流程,并通过示例代码展示具体的操作步骤。

HDFS 的设计目标是支持海量数据的存储和处理,因此其架构中包含 NameNode 和 DataNode。NameNode 负责元数据管理,包括文件系统的命名空间管理和客户端请求的处理。DataNode 则负责数据块的存储和检索,每个数据块默认大小为 128MB(在 Hadoop 2.x 版本中)。

写入流程

当客户端向 HDFS 写入数据时,流程如下:

  1. 客户端发起写入请求给 NameNode,请求创建一个新的文件。
  2. NameNode 根据文件系统的命名空间信息检查文件是否已存在,若不存在,则返回可以写入的响应,并指示客户端将数据发送给哪些 DataNode。
  3. 客户端接收到响应后,开始向第一个 DataNode 发送数据,并启动一个数据流管道。数据按照预设的副本策略被复制到其他 DataNode 上。
  4. 数据写入过程中,每个 DataNode 在接收到数据后会向发送方确认收到数据。最后一个 DataNode 向客户端发送确认消息。
  5. 当所有副本都被成功写入后,客户端通知 NameNode 文件写入完成。

示例代码

以下是一个简单的 Java 示例,展示如何使用 Hadoop API 向 HDFS 写入数据:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.io.IOException;
import java.nio.ByteBuffer;

public class HDFSWriter {
   
    public static void main(String[] args) throws IOException {
   
        Configuration conf = new Configuration();
        FileSystem fs = FileSystem.get(conf);

        Path filePath = new Path("/hdfs/input.txt");

        // 创建文件
        fs.create(filePath).close();

        // 写入数据
        try (FileSystem fileSystem = FileSystem.get(conf)) {
   
            fileSystem.append(filePath).write(ByteBuffer.wrap("Hello, HDFS!".getBytes()));
        }

        // 关闭文件系统
        fs.close();
    }
}

读取流程

当客户端从 HDFS 读取数据时,流程如下:

  1. 客户端向 NameNode 请求读取文件。
  2. NameNode 返回文件的元数据信息,包括文件块的位置信息。
  3. 客户端直接与 DataNode 通信,获取数据块。
  4. 如果客户端与 DataNode 之间的网络连接速度较慢,NameNode 可能会选择离客户端最近的 DataNode 提供数据服务。
  5. 客户端从 DataNode 读取数据块,并进行拼接以恢复原始文件。

示例代码

以下是一个简单的 Java 示例,展示如何使用 Hadoop API 从 HDFS 读取数据:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class HDFSReader {
   
    public static void main(String[] args) throws IOException {
   
        Configuration conf = new Configuration();
        FileSystem fs = FileSystem.get(conf);

        Path filePath = new Path("/hdfs/input.txt");

        // 读取文件
        try (FileSystem fileSystem = FileSystem.get(conf);
             BufferedReader reader = new BufferedReader(new InputStreamReader(fileSystem.open(filePath)))) {
   
            String line;
            while ((line = reader.readLine()) != null) {
   
                System.out.println(line);
            }
        }

        // 关闭文件系统
        fs.close();
    }
}

总结

通过上述示例,可以看出 HDFS 的读写操作是高度分布式的,它通过 NameNode 和 DataNode 的协同工作来实现数据的可靠存储和快速访问。了解这些底层机制对于优化 Hadoop 应用程序的性能至关重要。随着大数据技术的发展,HDFS 仍然是处理大规模数据集的重要工具之一。

相关文章
|
2月前
|
分布式计算 Kubernetes Hadoop
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
184 6
|
2月前
|
SQL 分布式计算 监控
Hadoop-20 Flume 采集数据双写至本地+HDFS中 监控目录变化 3个Agent MemoryChannel Source对比
Hadoop-20 Flume 采集数据双写至本地+HDFS中 监控目录变化 3个Agent MemoryChannel Source对比
70 3
|
9天前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
阿里云容器服务ACK提供强大的产品能力,支持弹性、调度、可观测、成本治理和安全合规。针对拥有IDC或三方资源的企业,ACK One分布式云容器平台能够有效解决资源管理、多云多集群管理及边缘计算等挑战,实现云上云下统一管理,提升业务效率与稳定性。
|
16天前
|
机器学习/深度学习 存储 运维
分布式机器学习系统:设计原理、优化策略与实践经验
本文详细探讨了分布式机器学习系统的发展现状与挑战,重点分析了数据并行、模型并行等核心训练范式,以及参数服务器、优化器等关键组件的设计与实现。文章还深入讨论了混合精度训练、梯度累积、ZeRO优化器等高级特性,旨在提供一套全面的技术解决方案,以应对超大规模模型训练中的计算、存储及通信挑战。
48 4
|
20天前
|
NoSQL Java 数据处理
基于Redis海量数据场景分布式ID架构实践
【11月更文挑战第30天】在现代分布式系统中,生成全局唯一的ID是一个常见且重要的需求。在微服务架构中,各个服务可能需要生成唯一标识符,如用户ID、订单ID等。传统的自增ID已经无法满足在集群环境下保持唯一性的要求,而分布式ID解决方案能够确保即使在多个实例间也能生成全局唯一的标识符。本文将深入探讨如何利用Redis实现分布式ID生成,并通过Java语言展示多个示例,同时分析每个实践方案的优缺点。
38 8
|
2月前
|
SQL 分布式计算 Hadoop
Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析
Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析
53 2
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
103 0
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
47 0
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
57 0
|
2月前
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
55 4

热门文章

最新文章