一、分布式文件系统
1.计算机集群的基本架构
集群中的计算机节点存放在机架上,每个机架可以存放8~64个节点,同一机架上的不同节点之间通过网络互联,多个不同机架之间采用另一级网络或交换机互连。
二、HDFS 定义
HDFS(Hadoop Distributed File System) 是 Hadoop 核心模块之一,是一个分布式文件系统,专为大规模数据存储和处理而设计,具有高容错性、高吞吐量等特点,适合部署在普通硬件组成的集群上。
三、HDFS 的主要特性
特性 | 简要描述 |
---|---|
高容错性 | 数据自动备份多份(默认3份),即使某些节点宕机,系统依然可用 |
高吞吐量 | 适合一次读写大文件,提高整体数据处理效率 |
高可扩展性 | 可通过添加节点横向扩展系统容量 |
适合大文件 | 设计初衷是处理 TB 甚至 PB 级的大文件,不适合频繁修改的小文件 |
一次写入,多次读取 | 写入过程不可修改,适合日志、大数据分析等场景 |
四、HDFS 架构组成
HDFS 采用 主从结构,由以下核心组件组成:
1. NameNode(名称节点)【主节点】
存储元数据:如文件路径、权限、每个文件分成多少块、每块在哪些 DataNode 上等
管理文件系统的命名空间
客户端上传、下载文件时,NameNode 负责调度,不直接处理数据
2. DataNode(数据节点)【从节点】
实际存储文件数据块(Block)
每个文件被分成多个 128MB(默认)大小的数据块,分别存放在不同的 DataNode 上
定期向 NameNode 报告存储状态(心跳)
五、NameNode 和 DataNode 的区别
项目 | NameNode | DataNode |
---|---|---|
角色 | 主节点 | 从节点 |
职责 | 存储元数据、调度任务 | 存储实际文件块,执行读写操作 |
是否存数据 | ❌ 不存文件数据 | ✅ 存储实际数据块 |
数量 | 通常只有 1 个主 + 1 个备用 | 可以有多个 |
故障影响 | 极大,元数据丢失则文件系统不可用 | 影响较小,可用副本恢复 |
六、Secondary NameNode(二级名称节点)
不是主节点的备份!
主要作用:辅助 NameNode 做元数据快照合并(Checkpoint)
避免 NameNode 的
edits
日志文件无限增长运行机制:
周期性从 NameNode 拉取
fsimage
(元数据快照)和edits
(操作日志)合并成新的
fsimage
,然后传回 NameNode
注意:它不能替代 NameNode,NameNode 宕机后不能自动接管工作。
七、冷热备份
HDFS 提供了以下方式提升系统可用性:
1. 冷备份(Cold Standby)
手动备份 NameNode 元数据文件,如
fsimage
和edits
一旦主 NameNode 出问题,需要手动恢复数据启动新 NameNode
缺点:恢复慢、人工干预多
2. 热备份(Hot Standby)— 高可用 NameNode(HA)
使用 Zookeeper + JournalNode 机制实现 自动主备切换
两个 NameNode:一个 Active,一个 Standby
JournalNode 保存日志,两者保持同步
Active NameNode 宕机时,Zookeeper 自动切换 Standby 为新的 Active
八、HDFS 常见命令讲解(基于 Hadoop 3.x+)
使用 HDFS 命令前,一般格式是:
hdfs dfs -[命令] [路径]
1. 目录操作
命令 | 功能 | 示例 |
---|---|---|
-mkdir |
创建目录 | hdfs dfs -mkdir /user/hadoop |
-mkdir -p |
创建多层目录 | hdfs dfs -mkdir -p /user/hadoop/input |
-ls |
列出目录内容 | hdfs dfs -ls /user/hadoop |
-ls -R |
递归列出目录内容 | hdfs dfs -ls -R /user/hadoop |
-rmdir |
删除空目录 | hdfs dfs -rmdir /user/tmp |
2. 文件上传下载
命令 | 功能 | 示例 |
---|---|---|
-put |
上传本地文件到 HDFS | hdfs dfs -put ~/file.txt /user/hadoop/ |
-copyFromLocal |
上传(同 put) | hdfs dfs -copyFromLocal file.txt /user/hadoop/ |
-get |
下载 HDFS 文件到本地 | hdfs dfs -get /user/hadoop/file.txt ~/ |
-copyToLocal |
下载(同 get) | hdfs dfs -copyToLocal /user/hadoop/file.txt ~/ |
3. 文件删除与移动
命令 | 功能 | 示例 |
---|---|---|
-rm |
删除文件 | hdfs dfs -rm /user/hadoop/file.txt |
-rm -r |
删除目录或非空目录 | hdfs dfs -rm -r /user/hadoop/input |
-mv |
移动或重命名文件 | hdfs dfs -mv /user/hadoop/file.txt /user/hadoop/file1.txt |
4. 查看文件内容
命令 | 功能 | 示例 |
---|---|---|
-cat |
查看文件全部内容 | hdfs dfs -cat /user/hadoop/file.txt |
-tail |
查看文件最后几行 | hdfs dfs -tail /user/hadoop/file.txt |
-head |
查看文件前若干字节 | hdfs dfs -head /user/hadoop/file.txt |
-text |
将 SequenceFile 等转为文本查看 | hdfs dfs -text /user/hadoop/seqfile |
5. 其他常用命令
命令 | 功能 | 示例 |
---|---|---|
-du |
查看文件/目录占用空间 | hdfs dfs -du /user/hadoop/ |
-dus |
显示目录总占用空间 | hdfs dfs -dus /user/hadoop/ |
-df |
查看 HDFS 使用情况 | hdfs dfs -df -h |
-stat |
查看文件信息 | hdfs dfs -stat /user/hadoop/file.txt |
-count |
查看文件数/目录数/空间占用 | hdfs dfs -count /user/hadoop |
-checksum |
获取文件校验码 | hdfs dfs -checksum /user/hadoop/file.txt |
-appendToFile |
追加内容到文件末尾 | hdfs dfs -appendToFile a.txt /user/hadoop/file.txt |
本篇博客对分布式文件系统HDFS进行了介绍,便于回顾。