HDFS
HDFS(Hadoop Distributed File System)是 Hadoop 的分布式文件系统,专为一次写入、多次读取的大文件场景设计。将文件切分为固定大小的 Block(默认 128MB),分散存储到多个 DataNode,并通过副本机制保证数据可靠性。
架构
Client
│
▼
NameNode(元数据:文件名、Block 列表、DataNode 位置)
│
├── DataNode 1(Block A, Block C)
├── DataNode 2(Block A副本, Block B)
└── DataNode 3(Block B副本, Block C副本)
| 角色 | 职责 |
|---|---|
| NameNode | 管理文件系统命名空间和元数据,不存储实际数据 |
| DataNode | 存储 Block,定期向 NameNode 发送心跳 |
| SecondaryNameNode | 定期合并 EditLog 和 FsImage,减轻 NameNode 压力(非 HA 备份) |
读写流程
写文件:
Client → NameNode(申请写入,获取 DataNode 列表)
Client → DataNode1 → DataNode2 → DataNode3(流水线写入)
写完后 → NameNode(更新元数据)
读文件:
Client → NameNode(查询 Block 所在 DataNode)
Client → 就近 DataNode(直接读取 Block)
常用命令
# 查看目录
hdfs dfs -ls /
hdfs dfs -ls -R /user # 递归列出
# 上传 / 下载
hdfs dfs -put localfile.txt /hdfs/path/
hdfs dfs -get /hdfs/path/file.txt ./local/
# 创建目录
hdfs dfs -mkdir -p /user/data
# 删除
hdfs dfs -rm /hdfs/path/file.txt
hdfs dfs -rm -r /hdfs/dir # 递归删除目录
# 查看文件内容
hdfs dfs -cat /hdfs/file.txt
hdfs dfs -tail /hdfs/file.txt
# 查看文件大小
hdfs dfs -du -h /hdfs/path
# 修改副本数
hdfs dfs -setrep 2 /hdfs/file.txt
# 检查集群健康状态
hdfs fsck /
hdfs fsck / -files -blocks -locations # 详细 Block 信息
# 查看集群状态报告
hdfs dfsadmin -report关键配置(hdfs-site.xml)
<!-- 副本数(默认 3) -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- Block 大小(默认 128MB) -->
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
</property>
<!-- DataNode 数据存储目录 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/hdfs/datanode</value>
</property>
<!-- NameNode 元数据目录 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>/data/hdfs/namenode</value>
</property>HA 高可用
生产环境通过两个 NameNode(Active/Standby)实现 HA,依赖 Zookeeper 进行主备切换,JournalNode 集群同步 EditLog。
Active NameNode ←→ JournalNode × 3 ←→ Standby NameNode
↕ ↕
Zookeeper(ZKFC 监控,自动切换)