【揭秘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 仍然是处理大规模数据集的重要工具之一。

相关文章
|
6月前
|
XML 存储 分布式计算
【赵渝强老师】史上最详细:Hadoop HDFS的体系架构
HDFS(Hadoop分布式文件系统)由三个核心组件构成:NameNode、DataNode和SecondaryNameNode。NameNode负责管理文件系统的命名空间和客户端请求,维护元数据文件fsimage和edits;DataNode存储实际的数据块,默认大小为128MB;SecondaryNameNode定期合并edits日志到fsimage中,但不作为NameNode的热备份。通过这些组件的协同工作,HDFS实现了高效、可靠的大规模数据存储与管理。
628 70
|
11月前
|
分布式计算 Kubernetes Hadoop
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
437 6
|
11月前
|
SQL 分布式计算 监控
Hadoop-20 Flume 采集数据双写至本地+HDFS中 监控目录变化 3个Agent MemoryChannel Source对比
Hadoop-20 Flume 采集数据双写至本地+HDFS中 监控目录变化 3个Agent MemoryChannel Source对比
168 3
|
8月前
|
存储 分布式计算 Hadoop
基于Java的Hadoop文件处理系统:高效分布式数据解析与存储
本文介绍了如何借鉴Hadoop的设计思想,使用Java实现其核心功能MapReduce,解决海量数据处理问题。通过类比图书馆管理系统,详细解释了Hadoop的两大组件:HDFS(分布式文件系统)和MapReduce(分布式计算模型)。具体实现了单词统计任务,并扩展支持CSV和JSON格式的数据解析。为了提升性能,引入了Combiner减少中间数据传输,以及自定义Partitioner解决数据倾斜问题。最后总结了Hadoop在大数据处理中的重要性,鼓励Java开发者学习Hadoop以拓展技术边界。
270 7
|
11月前
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
169 4
|
11月前
|
分布式计算 NoSQL Java
Hadoop-32 ZooKeeper 分布式锁问题 分布式锁Java实现 附带案例和实现思路代码
Hadoop-32 ZooKeeper 分布式锁问题 分布式锁Java实现 附带案例和实现思路代码
161 2
|
11月前
|
SQL 分布式计算 Hadoop
Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析
Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析
184 2
|
11月前
|
分布式计算 Hadoop
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
202 1
|
11月前
|
存储 数据采集 分布式计算
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
195 1
|
11月前
|
存储 SQL 消息中间件
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
152 0

热门文章

最新文章

相关实验场景

更多