点一下关注吧!!!非常感谢!!持续更新!!!
🚀 AI篇持续更新中!(长期更新)
目前2025年06月05日更新到: AI炼丹日志-28 - Audiblez 将你的电子书epub转换为音频mp3 做有声书,持续打造实用AI工具指南!📐🤖
💻 Java篇正式开启!(300篇)
目前2025年06月05日更新到: Java-39 深入浅出 Spring - AOP切面增强 核心概念 通知类型 XML+注解方式 附代码 MyBatis 已完结,Spring 正在火热更新中,深入浅出助你打牢基础!
📊 大数据板块已完成多项干货更新(300篇):
包括 Hadoop、Hive、Kafka、Flink、ClickHouse、Elasticsearch 等二十余项核心组件,覆盖离线+实时数仓全栈! 目前2025年06月05日更新到: 大数据-278 Spark MLib - 基础介绍 机器学习算法 梯度提升树 GBDT案例 详解
👉 点个关注,不迷路!后续还将持续更新更多大模型+数据智能+工程实战内容,敬请期待!
章节内容
上一节完成:
- HDFS的简介内容
- HDFS基础原理
- HDFS读文件流程
- HDFS写文件流程
背景介绍
这里是三台公网云服务器,每台 2C4G,搭建一个Hadoop的学习环境,供我学习。 之前已经在 VM 虚拟机上搭建过一次,但是没留下笔记,这次趁着前几天薅羊毛的3台机器,赶紧尝试在公网上搭建体验一下。
- 2C4G 编号 h121
- 2C4G 编号 h122
- 2C2G 编号 h123
HDFS(Hadoop Distributed File System)是 Hadoop 框架中专为大规模数据存储设计的 分布式文件系统。它可以运行在廉价的硬件集群上,提供 高容错性、高吞吐量、大文件支持能力,并且适用于一次写入、多次读取的场景。
设计思想
数据分块(Block-based Storage)
- 默认每个文件被分割为多个 128MB(或旧版本默认64MB)的块(Block)。
- 每个块被冗余复制(默认3份)存储在不同的 DataNode 上,保证数据的容错性。
主从架构(Master-Slave)
- NameNode:管理文件系统的元数据(如目录结构、文件到块的映射、块到 DataNode 的映射)。
- DataNode:存储实际数据块,定期向 NameNode 报告存活情况和数据块状态。
+----------------+
| Client |
+----------------+
| |
| V
+-------------+ +-------------+
| NameNode |<-----> | Secondary | (定期合并EditLog和FsImage)
| | | NameNode |
+-------------+ +-------------+
|
V
+----------------------------+
| DataNodes |
| [块1][块2]...[块N] |
+----------------------------+
文件上传流程
- 客户端向 NameNode 请求上传;
- NameNode 划分数据块并指定 DataNode;
- 客户端将数据流按顺序写入多个 DataNode(管道写入);
- NameNode 更新元数据。
文件读取流程
- 客户端向 NameNode 查询文件元数据;
- 获取到数据块列表及其位置;
- 从对应 DataNode 中读取数据块内容;
- 客户端本地拼接成完整文件。
容错机制
数据块副本(Block Replication)
- 默认每个数据块有3个副本,分布在不同节点;
- 某个 DataNode 宕机后,NameNode 会安排其他 DataNode 复制缺失的副本。
心跳机制
- DataNode 每隔一定时间向 NameNode 发送心跳,若超时未收到,认为其宕机。
适用场景
- 大数据分析平台(如 Spark、Hive、MapReduce 后端存储);
- 物联网日志采集;
- 视频、图像等大文件归档;
- 日志归档与批量处理。
基础语法
hadoop fs
启动集群
start-dfs.sh
start-yarn.sh
查看目录
hadoop fs -ls /
创建目录
hadoop fs -mkdir -p /wzk/test
上传文件
hadoop fs -moveFromLocal ./1.txt /wzk/test
hadoop fs -ls /
hadoop fs -ls /wzk/test
下载文件
hadoop fs -copyToLocal /wzk/test/1.txt ./
查看文件
hadoop fs -cat /wzk/test/1.txt
CP操作
hadoop fs -cp /wzk/test/1.txt /1.txt
MV操作
hadoop fs -mv /1.txt /wzk/test/
GET操作
hadoop fs -get /wzk/test/1.txt ./
PUT操作
hadoop fs -put ./1.txt /wzk/test
删除文件
hadoop fs -rm /wzk/test
删除空目录
hadoop fs -mkdir /wzk01
hadoop fs -rmdir /wzk01