开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第3天,点击查看活动详情
HDFS是 Hadoop 的分布式文件系统,用于存储大量的数据。HDFS 把数据分成若干块,并分布存储在集群中的节点上,能够支持海量数据的存储和访问。
HDFS(Hadoop Distributed File System)是一种分布式文件系统,是 ApacheHadoop 项目的核心组成部分之一。它的目的是将大型数据文件分割成若干个小块,并将这些小块存储到集群中的许多节点上,使得大型数据文件可以用更高的效率进行处理和分析。 HDFS 的设计基于一些假设,包括:
- 文件通常都很大,达到 GB 甚至 TB 级别;
- 文件读写频率较低,但是读取速度要求较高;
- 大多数应用程序需要访问文件的一个子集,而不是整个文件。
因此,HDFS 将文件分割成若干个块,并将每个块存储到不同的节点上,使得文件可以并行处理。HDFS 还支持数据冗余,即将每个块的多个副本存储到不同的节点上,以防止数据丢失。
体系结构
- NameNode:NameNode 是 HDFS 的管理节点,负责维护文件系统的元数据信息,包括文件名、文件大小、文件块位置等。NameNode 还负责调度客户端的读写请求,并将请求转发给相应的 DataNode 节点。
- DataNode:DataNode 是 HDFS 的工作节点,负责存储数据块,并执行来自 NameNode 的读写请求。每个 DataNode 都有一个本地存储器(如磁盘),用于存储文件块。
- Secondary NameNode:其所做的工作就是从NameNode获得fsimage和edits后把两者重新合并发给NameNode,这样,既能减轻NameNode的负担又能安全地备份,一旦HDFS的Master架构失效,就可以借助Secondary NameNode进行数据恢复。
HDFS写数据
- 客户端向NameNode发出写文件请求。
- 检查是否已存在文件、检查权限。若通过检查,直接先将操作写入EditLog,并返回输出流对象。
- client端按128MB的块切分文件。
- client将NameNode返回的分配的可写的DataNode列表和Data数据一同发送给最近的第一个DataNode节点。
- 每个DataNode写完一个块后,会返回确认信息。
- 写完数据,关闭输输出流。
- 发送完成信号给NameNode。
HDFS读数据
- client访问NameNode,查询元数据信息,获得这个文件的数据块位置列表,返回输入流对象。
- 就近挑选一台datanode服务器,请求建立输入流 。
- DataNode向输入流中中写数据,以packet为单位来校验。
- 关闭输入流