Hadoop Distributed File System (HDFS): 概念、功能点及实战

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 【6月更文挑战第12天】Hadoop Distributed File System (HDFS) 是 Hadoop 生态系统中的核心组件之一。它设计用于在大规模集群环境中存储和管理海量数据,提供高吞吐量的数据访问和容错能力。

Hadoop Distributed File System (HDFS) 是 Hadoop 生态系统中的核心组件之一。它设计用于在大规模集群环境中存储和管理海量数据,提供高吞吐量的数据访问和容错能力。本文将详细介绍 HDFS 的概念、功能点以及实际操作,并通过原型图帮助你更好地理解其架构和工作机制。

目录

  1. 概念
  2. 功能点
  3. HDFS 架构
  4. 实战指南
  5. 小结

1. 概念

HDFS 是一个分布式文件系统,设计用于在大规模集群环境中存储和管理海量数据。它借鉴了 Google File System (GFS) 的设计思想,具备高容错性和高吞吐量的特点,适用于大数据处理应用。

HDFS 的核心思想是将大文件拆分成较小的块(block),并将这些块分布式存储在集群中的多个节点上。这样即使部分节点发生故障,数据仍然可以通过其他节点进行访问。

2. 功能点

HDFS 提供了许多关键功能,确保其在大规模数据处理环境中的可靠性和高效性。

2.1 块存储

HDFS 将大文件拆分成固定大小的块(默认 128MB),每个块独立存储在不同的 DataNode 上。这种设计使得文件存储和处理更加高效。

2.2 数据冗余

为了提高容错能力,HDFS 对每个数据块进行多副本存储(默认 3 副本)。即使某个节点发生故障,其他节点的副本仍能提供数据访问。

2.3 数据完整性

HDFS 使用校验和(checksum)确保数据的完整性。在数据写入和读取过程中,HDFS 会进行校验和验证,确保数据没有损坏。

2.4 数据流转

HDFS 支持单次写操作和多次读操作(WORM)。一旦文件写入 HDFS,它将不能被修改,只能追加或读取。这种设计简化了数据一致性的管理。

2.5 高可用性

HDFS 通过主从架构实现高可用性。NameNode 是主节点,负责管理文件系统的元数据;DataNode 是从节点,负责存储实际的数据块。

3. HDFS 架构

HDFS 的架构由多个组件组成,主要包括 NameNode、DataNode 和 Secondary NameNode。

3.1 NameNode

NameNode 是 HDFS 的主节点,负责管理文件系统的元数据,包括文件目录树、文件块信息等。它不存储实际的数据块,但管理所有数据块的位置信息。

3.2 DataNode

DataNode 是 HDFS 的从节点,负责存储实际的数据块。每个 DataNode 周期性地向 NameNode 发送心跳信息和数据块报告,用于状态监控和数据管理。

3.3 Secondary NameNode

Secondary NameNode 不是 NameNode 的备份,而是定期从 NameNode 获取元数据快照,并将其合并到一个新的元数据文件中,以减轻 NameNode 的负担。

HDFS 架构原型图

plaintext复制代码

+---------------------+     +---------------------+
|                     |     |                     |
|      Client         |     |      Client         |
|                     |     |                     |
+---------------------+     +---------------------+
            |                       |
            +-----------------------+
             |
             v
+---------------------+
|      NameNode       |
|  (主节点,元数据管理)  |
+---------------------+
             |
             +-----------------------------------+
             |                                   |
             v                                   v
+---------------------+               +---------------------+
|     DataNode 1      |               |     DataNode 2      |
|  (从节点,数据存储)   |               |  (从节点,数据存储)   |
+---------------------+               +---------------------+
             |                                   |
             +-------------------+               |
             |                   |               |
             v                   v               v
      数据块1、块2、块3            数据块1、块2、块3             数据块1、块2、块3

4. 实战指南

环境准备

确保你已经安装并配置好 Hadoop 环境。你可以参考 Hadoop 官方文档进行安装。

启动 HDFS 服务

  1. 格式化 NameNode(首次启动时执行):

bash复制代码

hdfs namenode -format
  1. 启动 HDFS 服务:

bash复制代码

start-dfs.sh

基本操作

  1. 创建目录:

bash复制代码

hdfs dfs -mkdir /user
hdfs dfs -mkdir /user/hadoop
  1. 上传文件:

bash复制代码

hdfs dfs -put localfile.txt /user/hadoop/
  1. 查看文件:

bash复制代码

hdfs dfs -ls /user/hadoop/
  1. 下载文件:

bash复制代码

hdfs dfs -get /user/hadoop/localfile.txt downloadfile.txt
  1. 删除文件:

bash复制代码

hdfs dfs -rm /user/hadoop/localfile.txt

实战示例

假设我们有一个大数据文件 data.txt,需要将其上传到 HDFS 并进行数据处理。

  1. 上传数据文件:

bash复制代码

hdfs dfs -put data.txt /user/hadoop/
  1. 查看文件信息:

bash复制代码

hdfs dfs -ls /user/hadoop/
  1. 数据处理(例如,统计词频):

你可以使用 MapReduce 或 Spark 等大数据处理框架对 HDFS 中的数据进行处理。这里以 MapReduce 为例:

创建一个简单的词频统计 MapReduce 程序:

java复制代码

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import java.io.IOException;
import java.util.StringTokenizer;

public class WordCount {

    public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> {

        private final static IntWritable one = new IntWritable(1);
        private Text word = new Text();

        public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
            StringTokenizer itr = new StringTokenizer(value.toString());
            while (itr.hasMoreTokens()) {
                word.set(itr.nextToken());
                context.write(word, one);
            }
        }
    }

    public static class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
        private IntWritable result = new IntWritable();

        public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
            int sum = 0;
            for (IntWritable val : values) {
                sum += val.get();
            }
            result.set(sum);
            context.write(key, result);
        }
    }

    public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf, "word count");
        job.setJarByClass(WordCount.class);
        job.setMapperClass(TokenizerMapper.class);
        job.setCombinerClass(IntSumReducer.class);
        job.setReducerClass(IntSumReducer.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        FileInputFormat.addInputPath(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));
        System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
}

编译并执行该程序:

bash复制代码

hadoop jar wordcount.jar WordCount /user/hadoop/data.txt /user/hadoop/output

查看输出结果:

bash复制代码

hdfs dfs -cat /user/hadoop/output/part-r-00000

5. 小结

通过本文,我们详细介绍了 Hadoop Distributed File System (HDFS) 的概念、功能点及其实战操作。HDFS 是一个高吞吐量、高容错性的分布式文件系统,适用于大数据处理应用。我们通过实例代码演示了如何在 HDFS 中执行基本操作,并进行了简单的数据处理。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
2月前
|
分布式计算 Kubernetes Hadoop
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
177 6
|
2月前
|
SQL 分布式计算 监控
Hadoop-20 Flume 采集数据双写至本地+HDFS中 监控目录变化 3个Agent MemoryChannel Source对比
Hadoop-20 Flume 采集数据双写至本地+HDFS中 监控目录变化 3个Agent MemoryChannel Source对比
66 3
|
3天前
|
Java
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
57 34
|
2月前
|
分布式计算 Hadoop Unix
Hadoop-28 ZooKeeper集群 ZNode简介概念和测试 数据结构与监听机制 持久性节点 持久顺序节点 事务ID Watcher机制
Hadoop-28 ZooKeeper集群 ZNode简介概念和测试 数据结构与监听机制 持久性节点 持久顺序节点 事务ID Watcher机制
45 1
|
2月前
|
存储 SQL 消息中间件
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
51 0
|
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
96 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
43 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
56 0
|
2月前
|
分布式计算 资源调度 Hadoop
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
71 2
|
1月前
|
存储 分布式计算 Hadoop
数据湖技术:Hadoop与Spark在大数据处理中的协同作用
【10月更文挑战第27天】在大数据时代,数据湖技术凭借其灵活性和成本效益成为企业存储和分析大规模异构数据的首选。Hadoop和Spark作为数据湖技术的核心组件,通过HDFS存储数据和Spark进行高效计算,实现了数据处理的优化。本文探讨了Hadoop与Spark的最佳实践,包括数据存储、处理、安全和可视化等方面,展示了它们在实际应用中的协同效应。
96 2

相关实验场景

更多