HDFS
外观
HDFS[编辑 | 编辑源代码]
Hadoop分布式文件系统(Hadoop Distributed File System,简称HDFS)是Apache Hadoop项目的核心组件之一,是一个高度容错性的分布式文件系统,设计用于在廉价硬件上运行,并能提供高吞吐量的数据访问。
概述[编辑 | 编辑源代码]
HDFS是基于Google文件系统(GFS)论文设计的分布式文件系统,具有以下主要特点:
- 高容错性 - 数据自动保存多个副本
- 高吞吐量 - 优化用于批量数据处理而非交互式使用
- 大规模存储 - 支持PB级数据存储
- 硬件廉价 - 设计运行在普通商用硬件上
- 流式数据访问 - 适合一次写入多次读取的模式
架构[编辑 | 编辑源代码]
HDFS采用主从架构,主要组件包括:
NameNode[编辑 | 编辑源代码]
- 管理文件系统的命名空间
- 维护文件系统树和所有文件的元数据
- 记录每个文件的块列表及其位置
- 处理客户端的文件系统操作请求
DataNode[编辑 | 编辑源代码]
- 存储实际的数据块
- 定期向NameNode发送心跳和块报告
- 处理来自客户端的读写请求
Secondary NameNode[编辑 | 编辑源代码]
- 定期合并NameNode的编辑日志和文件系统镜像
- 不是NameNode的热备份,但可以在NameNode故障后帮助恢复
数据组织[编辑 | 编辑源代码]
HDFS中的数据被组织为:
- 块(Block) - 默认128MB大小的数据块(可配置)
- 文件(File) - 由多个块组成
- 目录(Directory) - 包含文件和子目录的命名空间
数据可靠性机制[编辑 | 编辑源代码]
HDFS通过以下机制确保数据可靠性:
- 副本机制 - 每个块默认保存3个副本(可配置)
- 心跳检测 - DataNode定期向NameNode发送心跳
- 块扫描 - DataNode定期验证存储的块
- 安全模式 - 启动时验证数据完整性
文件操作示例[编辑 | 编辑源代码]
通过HDFS命令行操作[编辑 | 编辑源代码]
# 列出HDFS根目录
hadoop fs -ls /
# 创建目录
hadoop fs -mkdir /user
# 上传本地文件到HDFS
hadoop fs -put localfile.txt /user/hadoop/
# 下载HDFS文件到本地
hadoop fs -get /user/hadoop/file.txt localfile.txt
# 查看文件内容
hadoop fs -cat /user/hadoop/file.txt
与HBase的关系[编辑 | 编辑源代码]
HDFS为HBase提供底层存储支持,HBase的数据文件(HFile)直接存储在HDFS上。这种结合使得HBase能够:
- 利用HDFS的高可靠性和高可用性
- 处理海量数据存储
- 实现数据的自动分片和负载均衡
实际应用场景[编辑 | 编辑源代码]
- 大型互联网公司的用户行为日志存储
- 金融行业的交易历史记录
- 电信行业的通话详单存储
- 科学计算领域的大规模数据集存储