HDFS是Hadoop Distributed Filesystem,Hadoop分布式文件系统。
当数据大到一台机器无法存储时,就要把它分散到多台机器上去,通过网络管理多台计算机上的存储空间的文件系统,就称为分布式文件系统。网络程序的复杂性使得分布式文件系统比普通的磁盘文件系统复杂得多,例如其中最大的挑战之一就是要容错,要在其中一个或几个节点死掉后,仍能保证数据完整。
HDFS是Hadoop的旗舰文件系统,但是Hadoop还有一个抽象的文件系统,用于整合其它文件系统,例如本地存储。
HDFS是为存储非常大的文件设计的文件系统,适合于流式数据访问,运行于普通商业计算机集群。
“非常大的文件”:指几百MB,几GB甚至几TB的数据。Yahoo曾经在4000个节点上存储上PB的数据。
“流式数据访问”:是指数据被写入一次,然后被多次读取并分析计算。而且每次计算都几乎要用到文件中的大部分数据,而不是只用其中的第一行数据。
“普通商业计算机集群”:是指Hadoop不要求运行于非常昂贵的可靠性很高的服务器上,而是设计成运行于普通的计算机上。这就意味着节点是不可靠的,节点故障退出集群是很正常的事。HDFS就是设计成在节点故障时,不让用户有明显的感觉。
相对应的,HDFS也有其不适用的场景。
“即时数据访问”:HDFS不适合于即时系统。HDFS针对高吐吞量进行优化,对于处理大量数据有优势,但不适合于那种在大量数据中处理一小部分,然后快速响应返回的系统。
“大量小文件”:文件元信息是存储在namenode的内存里的,100万个文件,元信息将占用namenode机器内存300M左右。因此,尽管几百万个文件可以承受,但几十亿个文件对于当前流行的硬件配置就吃不消了。
“大量写操作和文件中间修改”:HDFS目前只支持单线程写操作,并且只能在文件尾写。不支持修改文件中的任意位置。(也许在以后的版本中会支持,但即使支持,也一定效率很差。)