2.2.1 HDFS

HDFS是Hadoop项目的两大核心之一,源自Google于2003年10月发表的GFS论文,是对GFS的开源实现。HDFS最初是作为Apache Nutch搜索引擎项目的基础架构而开发的。

HDFS具有高度容错性的特点,通常部署在廉价机器上即可提供存储服务。HDFS能提供高吞吐量的连续数据访问,适合超大数据集的应用。它运行在普通的硬件之上,即使硬件出故障,也可通过容错来保证数据的高可用性[3]

HDFS在设计之初就非常明确其应用场景、适合什么类型的应用,它有一个相对明确的指导原则。HDFS的设计目标如下。

1.存储非常大的文件

非常大指几百MB、GB或TB级。在实际应用中已有很多集群存储的数据达到PB级。根据Hadoop官网,Yahoo的Hadoop集群约有10万颗CPU,运行在4万个机器节点上。

2.采用流式的数据访问方式

HDFS基于这样的一个假设:最有效的数据处理模式是一次写入、多次读取数据集,经常从数据源生成或者复制一次,然后做很多分析工作,分析工作经常读取其中的大部分数据。因此,读取整个数据集所需时间比读取第一条记录的时延更重要。

3.运行于商业硬件上

Hadoop不需要特别贵的、可靠的机器,可运行在普通商用机器(可以从多家供应商采购)上,商用机器不代表低端机器。在集群(尤其是大的集群)中,节点失败率是比较高的。HDFS的目标是确保集群在节点失败时不会让用户感觉到明显的中断。

HDFS不适用于以下应用场景。

1.低时延的数据访问

对时延要求为毫秒级的应用,不适合采用HDFS。HDFS是为高吞吐率数据传输设计的,因此可能牺牲时延,HBase更适合低时延的数据访问。

2.大量小文件

文件的元数据(如目录结构、文件块的节点列表、块−节点映射)保存在NameNode的内存中,整个文件系统的文件数量会受限于NameNode的内存大小。

3多方读/

HDFS采用追加(Append-only)的方式写入数据,不支持文件任意步长的修改,不支持多个写入器。