HDFS入门

hdfs基础入门

什么是HDFS

HDFS 是Hadoop中的分布式文件系统,它的主要功能是存储超大数据量的到普通机器集群中,同时提供高可靠性的和高吞吐量的服务。

HDFS 开发是参考Google的GFS实现的。

HDFS基本架构

HDFS 主要由3个组件组成,分别是NameNode,SecondryNameNode,DateNode

HDFS 是以 master/slave 模式运行的,其中 NameNode 和 SecondryNameNode 是运行在master节点的,DateNode 是运行在 slave 节点上,所以一般集群运行时都有1个NameNode和1个SencondryNameNode还有若干个 ataNode。

在 HDFS 中,文件都是分块存储的,一个文件可能会有多个块散布在不同 DataNode 中。当客户端需要读取一个文件时,需要先从 NameNode 中获取数据元信息,然后再请求具体的DataNode节点去读取数据块。

NameNode

NameNode 是服务主节点,负责管理文件系统的命名空间以及客户端对数据的访问。客户端要读取一个文件时会访问NameNode获取文件元信息,然后客户端直接从DateNode中读取文件内容。

NameNode中存储的文件元信息有文件名、目录名、文件所有者、权限等信息,这些元数据信息是记录在fsimage文件中的。当系统启动时,NameNode会将fsimage中的信息读取到内存中,提高访问速度。

SecondryNameNode

SecondryNode的作用并非是NameNode的备份节点,而是NamdeNode的一个辅助角色,主要功能是合并NameNode生成的edits 文件。

edit 文件是NameNode在运行期间记录的操作日志信息,每当创建的 edits 文件到达一定数量或间隔指定时间时便会触发edits合并到fsimage的操作,这个具体合并的工作就是由 SecondryNameNode 来做的。

DataNode

DateNode 是 HDFS 中的数据存储节点,主要负责数据块的读写,同时也响应NameNode的一些工作指令。

当 DataNode 在执行块存储操作时,DataNode 还会与其他 DataNode 通信,复制这些块到其他 DataNode 上实现冗余。

HDFS 的分块和副本

HDFS 中存储文件均是数据块的形式进行存储的,而副本机制则是保障了数据的可用性,避免意外丢失数据。

分块

HDFS 中的数据块大小默认为64MB,创建这么大块的目的是为了降低小数据块的频繁寻址。

块存储的好处

  • 文件大小可指定,根据实际情况设置,有很大的灵活度。
  • 文件分块存储避免单个文件过大,并且分块大小固定,文件分布也容易计算。磁盘利用率高,文件分块存储在多个机器,不受单机存储容量限制。
  • 分工明确,提高系统可用性。分块方便数据备份,同时也方便负载均衡,当某个块读取缓慢时可以读取其他节点的块副本。

副本机制

HDFS 中的数据块副本默认为3,多个副本会散布在集群的多个机器中。

副本机制的应用极大的提高了数据可用性,多副本冗余存储保证了在部分机器异常时依然能正常读取数据。

HDFS 的特点及使用场景

HDFS 适合大数据量的存储,文件大小不受单机存储容量限制,数据块存储在不同节点,读写大文件时并行读取吞吐量较高。

HDFS 不适合存储大量小文件,小文件指小于块大小的文件,一个是会有较大的空间浪费,再者由于NameNode将文件的元信息存储在自己的内存中,所以文件存储的上限是由NameNode