1. HDFS
系统介绍
Hadoop
分布式文件系统
HDFS(Hadoop Distributed File System)
是一个能够兼容普通 硬件环境的分布式文件系统,和现有的分布式文件系统不同的地方是,Hadoop
更注重 容错 性和兼容廉价的硬件设备,这样做是为了用很小的预算甚至直接利用现有机器就实现大流量和大数据量的读取。Hadoop
使用了
POSIX
的设计来实现对文件系统文件流的读取。HDFS
原来是
Apache Nutch
搜索引擎
(
从
Lucene
发展而来
)
开发的一个部分,后来独立出来作为 一个 Apache
子项目。
HDFS
是基于流数据模式访问和处理超大文件的需求而开发的,它可以运行于廉价 的商用服务器上。HDFS 在设计时的假设和目标包括以下几个方面:
硬件出错
:Hadoop
假设硬件出错是一种正常的情况,而不是异常,为的就是在硬 件出错的情况下尽量保证数据完整性,HDFS
设计的目标是在成百上千台服务器中 存储数据,并且可以快速测出硬件错误和快速进行数据的自动恢复。
流数据读写
:
不同于普通的文件系统,
Hadoop
是为了程序批量处理数据而设计 的, 而不是与用户的交互或者随机读写,所以 POSIX
对程序增加了许多硬性限制,程 序必须使用流读取来提高数据吞吐率。
大数据集
:HDFS
上面一个典型的文件一般是用
GB
或者
TB
计算的,而且一个数百 台机器组成的集群里面可以支持过千万这样的文件。
简单的文件模型
:HDFS
上面的文件模型十分简单,就是一次写入多次读取的模型, 文件一旦创建,写入并关闭了,之后就再也不会被改变了,只能被读取,这种模型刚好符合搜索引擎的需求,以后可能会实现追加写入数据这样的功能。
强大的跨平台兼容性
:
由于是基于
Java
的实现,无论是硬件平台或者是软件平台要求都不高,只要是 JDK
支持的平台都可以兼容。
正是由于以上的种种考虑,我 们会发现,现在的 HDFS
在处理一些特定问题时,不但没有优势,而且有一定的局限性,主要表现在以下几个方面:
不适合低延迟数据访问
:
如果要处理一些用户要求时间比较短的低延迟应用请求,
则
HDFS
不适合。
HDFS
是为了处理大型数据集分析任务,主要是为了达到较高的数据吞吐量而设计的,这就可能以高延迟作为代价。目前的一些补充的方案,比如 使 用 HBase
,通过上层数据管理项目来尽可能地弥补这个不足。
无法高效存储大量小文件
:
在
Hadoop
中需要使用
NameNode(
目录节点
)
来管理 文 件系统的元数据,以响应客户端请求返回文件位置等,因此,文件数量大小的限 制要 由 NameNode
来决定。例如,每个文件、索引目录及块大约占
100
字节,如 果有
100 万个文件,每个文件占一个块,那么,至少要消耗 200MB
内存,这似乎 还可以接 受。但是,如果有更多文件,那么,NameNode
的工作压力更大,检索处 理元数据的 时间就不可接受了。
不支持多用户写入及任意修改文件
:
在
HDFS
的一个文件中只有一个写入者,而且写操作只能在文件末尾完成,即只能执行追加操作。目前 HDFS 还不支持多个 用户对 同一文件的写操作,以及在文件任意位置进行修改。