大数据-HDFS基本介绍
- 2019 年 12 月 25 日
- 筆記
1. HDFS
HDFS(Hadoop Distributed File System) 是一个 Apache Software Foundation项目, 是 Apache Hadoop 项目的一个子项目. Hadoop 非常适于存储大型数据(比如 TB 和 PB), 其就是使用 HDFS 作为存储系统. HDFS使用多台计算机存储文件, 并且提供统一的访问接口,像是访问一个普通文件系统一样使用分布式文件系统. HDFS对数据文件的访问通过流的方式进行处理, 这意味着通过命令和 MapReduce程序的方式可以直接使用 HDFS. HDFS 是容错的,且提供对大数据集的高吞吐量访问.
HDFS 的一个非常重要的特点就是一次写入、多次读取,该模型降低了对并发控制的要求, 简化了数据聚合性, 支持高吞吐量访问.而吞吐量是大数据系统的一个非常重要的指标,吞吐量高意味着能处理的数据量就大.
1.1. 设计目标
- 通过跨多个廉价计算机集群分布数据和处理来节约成本
- 通过自动维护多个数据副本和在故障发生时来实现可靠性
- 它们为存储和处理超大规模数据提供所需的扩展能力。
1.2. HDFS 的历史
- Doug Cutting 在做 Lucene 的时候, 需要编写一个爬虫服务,这个爬虫写的并不顺利, 遇到了一些问题, 诸如: 如何存储大规模的数据,如何保证集群的可伸缩性, 如何动态容错等
- 2013年的时候, Google 发布了三篇论文, 被称作为三驾马车,其中有一篇叫做 GFS, 是描述了 Google 内部的一个叫做 GFS的分布式大规模文件系统, 具有强大的可伸缩性和容错性
- Doug Cutting 后来根据 GFS 的论文, 创造了一个新的文件系统, 叫做 HDFS
1.3. HDFS 的架构


- NameNode 是一个中心服务器, 单一节点(简化系统的设计和实现),负责管理文件系统的名字空间(NameSpace)以及客户端对文件的访问
- 文件操作, NameNode 是负责文件元数据的操作, DataNode负责处理文件内容的读写请求, 跟文件内容相关的数据流不经过 NameNode,只询问它跟哪个 DataNode联系, 否则 NameNode 会成为系统的瓶颈
- 副本存放在哪些 DataNode 上由 NameNode 来控制,根据全局情况作出块放置决定, 读取文件时 NameNode尽量让用户先读取最近的副本, 降低读取网络开销和读取延时
- NameNode 全权管理数据库的复制, 它周期性的从集群中的每个 DataNode接收心跳信合和状态报告, 接收到心跳信号意味着 DataNode 节点工作正常,块状态报告包含了一个该 DataNode 上所有的数据列表
NameNode |
DataNode |
---|---|
存储元数据 |
存储文件内容 |
元数据保存在内存中 |
文件内容保存在磁盘 |
保存文件, block, DataNode 之间的关系 |
维护了 block id 到 DataNode 文件之间的关系 |