0%

HDFS

HDFS

HDFS是分布式的文件系统,用于存储文件,通过目录树来定位文件,作为Hadoop的数据存储部分,采用了主从(Master/Slave)结构模型,一个HDFS集群是由一个NameNode(nn)和若干个DataNode(dn)以及Secondary NameNode(2nn)组成的。其中NameNode作为主服务器,管理文件系统的命名空间和客户端对文件的访问操作;集群中的DataNode管理存储的数据。

HDFS的场景:适用于一次写入,多次读出,且不支持修改

结构

NameNode

NameNode是用来存储文件的元数据,如文件名,文件目录,文件属性,以及每个文件的块列表和块所在的DataNode,每个文件在NameNode都要建立一个索引,索引大小大约150byte,所以应该避免太多的小文件

小文件过多,一方面占用NameNode内存,一方面索引文件过大,索引速度变慢

作用:

  • 管理HDFS的名称空间
  • 配置副本策略
  • 管理数据块(Block)映射信息
  • 处理客户端读写请求

DataNode

DataNode是在本地文件系统存储文件块数据,以及块数据的检验和

作用:

  • 存储实际的数据块
  • 执行数据块的读写命令

Secondary NameNode

Secondary NameNode用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照。

当NameNode挂掉时,并不能马上替换NameNode并提供服务

作用:

  • 辅助NameNode,分担其工作量,如定期合并Fsimages和Edits,并推送给NameNode
  • 在紧急情况下,可辅助回复NameNode

Client

客户端

作用:

  • 进行文件切分,文件上传HDFS时,Client将文件切分成一个一个的Block,然后进行上传
  • 与NameNode进行交互,获取文件的位置信息
  • 与DataNode进行交互,读取或写入数据
  • Client提供命令来管理HDFS,以及通过一些命令来访问HDFS

配置文件的优先级: 客户端代码中设置Configuration > classpath下自定义的配置文件 > 集群中的配置文件