文件系统介绍
文件系统的作用就是永久存储数据。计算机可以存储数据的地方是内存,硬盘,优盘,SD 卡等等。如果计算机断电关机,存放在内存里的数据就没有了,而存放在硬盘优盘 SD 卡这些上的数据会仍然存在。硬盘优盘SD 卡上的数据是以文件的形式存在,文件系统就是文件的组织和处理。总之,凡是断电之后不会消失的数据,就必须由文件系统存储和管理。
从用户的角度来说,文件系统需要提供文件的创建,删除,读,写,追加,重命名,查看属性,更改属性等各种功能。文件夹,也叫目录,它的作用类似容器,保存其他文件夹和文件。于是,各级文件夹和各级文件就共同组成了文件系统的层次,看起来象一棵倒放的树,最上层是最大的目录,也叫根目录,然后这个目录包含子目录和文件,子目录又包含更多的子目录和文件,这棵树的术语叫目录树。
起初,Linux 使用的文件系统是Minix 文件系统。但Minix 系统有不少限制,诸如最大文件尺寸只有 64M,文件名最多是14 个字符长度。后来,Linux 内核加入了 VFS,也就是虚拟文件系统Virtual File System。VFS 是Linux 内核和真正文件系统之间的抽象层,它提供统一的接口,真正的文件系统和 Linxu 内核必须通过 VFS 的接口进行沟通。随后,Linux 逐步使用基于 VFS 的ext文件系统,ext2 文件系统,ext3 文件系统等等。基于 VFS,Linux 对 Windows 的FAT 和NTFS 格式也提供支持。
通常情况下,Linux 的文件系统是单机的,也就说,从物理的角度看,文件系统只存储单台计算机的数据。分布式文件系统在物理上分散的计算机上存储数据。比如,NFS(NetWork File System)是一种非常经典的分布式文件系统,它基于 VFS,由 Sun 公司开发的。本质上,NFS 是在物理上分散的计算机之间增加了一个客户-服务器层。对NFS,可以这么理解:计算机 A 有自己的 VFS,计算机 B也有自己的 VFS,那么,如果 A 想操作 B上的文件,A 的数据和命令依次通过的路线是:A 的 VFS-->A 的 NFS 客户端-->网络-->B 的 NFS 服务器端-->B 的 VFS-->B 的文件系统。
HDFS文件系统
Hadoop分布式文件系统,全称Hadoop Distributed File System,也就是HDFS。
Hadoop 借鉴了VFS,也引入了虚拟文件系统机制。HDFS 是 Hadoop 虚拟文件系统的一个具体实现。除了HDFS 文件系统之外,Hadoop 还实现很多其他文件系统,诸如本地文件系统,支持 HTTP 的 HFTP 文件系统,支持 Amazon的 S3 文件系统等等。
HDFS 从设计上来说,主要考虑以下的特征:超大文件,最大能支持 PB 级别的数据;流式数据访问,一次写入,多次读取;在不可靠的文件,故障率高的商用硬件上能运行。Hadoop 的不利之处,是不适应低时间延迟的数据访问,不适应大量的小文件,也不适应多用户写入任意修改文件的情况。
假设有一个 HDFS 集群,那么这个集群有且仅有一台计算机做名字节点 NameNode,有且仅有一台计算机做第二名 字 节 点 SecondaryNameNode , 其 他 机 器 都 是 数 据 节 点 DataNode 。 在 伪 分 布 式 的 运 行 方 式 下 ,NameNode,SecodaryNameNode,DataNode 都由同一台机器担任。
NameNode 是 HDFS 的管理者。SecondaryNameNode 是 NameNode 的辅助者,帮助 NameNode 处理一些合并事宜,注意,它不是 NameNode 的热备份,它的功能跟 NameNode 是不同的。DataNode 以数据块的方式分散存储 HDFS 的文件。HDFS 将大文件分割成数据块,每个数据块是 64M,也可以设置成 128M或者 256M,然后将这些数据块以普通文件的形式存放到数据节点上,为了防止 DataNode 意外失效,HDFS 会将每个数据块复制若干份放到不同的数据节点。
执行“ hadoop fs -help”可以看到 HDFS的命令行工具和用法。