Hadoop Distributed File System(简称HDFS)是Hadoop分布式文件系统。
HDFS有着高容错性(fault-tolerant)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求(requirements)这样可以实现流的形式访问(streaming access)文件系统中的数据。
当数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统 (Distributed File System)。
是一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间。
让实际上是通过网络来访问文件的动作,由程序与用户看来,就像是访问本地的磁盘一般。
即使系统中有某些节点脱机,整体来说系统仍然可以持续运作而不会有数据损失。
注意:分布式文件管理系统很多,HDFS只是其中一种。适用于一次写入多次查询的情况,不支持并发写情况,小文件不合适。
fsimage:元数据镜像文件。存储某一时段NameNode内存元数据信息。
edits:操作日志文件。
fstime:保存最近一次checkpoint的时间
DataNode是文件系统的工作节点,他们根据客户端或者是namenode的调度存储和检索数据,并且定期向namenode发送他们所存储的块(block)的列表。
是HA的一种解决方案,主要起到两种作用:镜像备份以及日志和镜像定期合并,这两个过程称之为checkpoint。
镜像备份:备份fsimage(fsimage是元数据发送检查点时写入文件);
日志与镜像的定期合并的作用:将Namenode中edits日志和fsimage合并,防止(如果Namenode节点故障,namenode下次启动的时候,会把fsimage加载到内存中,应用edit log,edit log往往很大,导致操作往往很耗时。)
HDFS是一个的主从结构,一个HDFS集群是由一个NameNode,它是一个管理文件命名空间和调节客户端访问文件的主服务器,当然还有一些DataNode,通常是一个节点一个机器,它来管理对应节点的存储。HDFS对外开放文件命名空间并允许用户数据以文件形式存储。
内部机制是将一个文件分割成一个或多个块,这些块被存储在一组DataNode中。NameNode用来操作文件命名空间的文件或目录操作,如打开,关闭,重命名等等。它同时确定块与DataNode的映射。DataNode来负责来自文件系统客户的读写请求。DataNode同时还要执行块的创建,删除,和来自NameNode的块复制指令。
NameNode和DataNode都是运行在普通的机器之上的软件,机器典型的都是GNU/Linux,HDFS是用java编写的,任何支持java的机器都可以运行NameNode或DataNode,利用java语言的超轻便型,很容易将HDFS部署到大范围的机器上。典型的部署是由一个专门的机器来运行NameNode软件,集群中的其他每台机器运行一个DataNode实例。体系结构不排斥在一个机器上运行多个DataNode的实例,但是实际的部署不会有这种情况。
集群中只有一个NameNode极大地简单化了系统的体系结构。NameNode是仲裁者和所有HDFS元数据的仓库,用户的实际数据不经过NameNode。