HDFS 架构指南
HDFS架构指南
介绍
Hadoop分布式文件系统(HDFS)是一个分布式的文件系统在廉价的硬件上运行。它与现有的分布式文件系统有很多相似之处。然而,从其他的分布式文件系统的差异是显着的。HDFS是高容错和被设计为低成本硬件上部署。HDFS的应用数据提供高吞吐量的访问,是适用于具有大型数据集的应用程序。HDFS的满足一些POSIX的要求,流式方式访问文件系统数据。HDFS的最初是为ApacheNutch的网络搜索引擎项目的基础。目前HDFS是一个ApacheHadoop的子项目。该项目的网址是http://hadoop.apache.org/hdfs/。
假设和目标
硬件故障
硬件故障是常态而不是例外。一个HDFS的实例可能包括数百或数千个服务器的机器,每个文件系统的数据存储部分。事实上,有大量的组件,每个组件都有一个可能的概率失败,意味着一些HDFS的组件总是非功能。因此,故障检测和快速自动恢复,是HDFS核心框架实现的目标。
流数据访问
HDFS上运行的应用程序需要访问他们的数据集流。他们不是一般用途的通用文件系统上运行的应用。HDFS被设计为批量处理,而不是由用户交互式的使用。重点是高吞吐量的数据访问,而不是数据访问的低延迟。POSIX的规定很多,不完全是HDFS的目标应用要求。POSIX场景在几个关键的领域已经很好,以提高数据吞吐率。
大型数据集
HDFS上运行的应用程序,拥有大型数据集。一个典型的文件在HDFS是从GB到TB级大小。因此,HDFS的调整,以支持大文件。它应该提供高总数据带宽和规模数百个单个群集节点。数以千万计的文件,它应支持在一个单一的实例。
简单的一致性模型
HDFS的应用程序需要一次写入,多次读取一个文件的访问模式。曾经创造了一个文件,不需要再写,写关闭,不需要更改。这一假设简化了数据一致性问题,并实现高吞吐量的数据访问。一个MapReduce的应用程序或网络爬虫应用程序完全符合这个模型。有一个计划,以支持追加写入到在未来的文件。(0.21.0以上版本,已经添加了Append功能,https://issues.apache.org/jira/browse/HDFS-265)
“移动计算比移动数据更便宜”
应用程序所要求的计算是更有效的,如果它运行在附近的数据执行。这是尤其如此,当数据集的规模是巨大的。这最大限度地减少网络拥塞,提高了系统的整体吞吐量。假设是,它常常是更好的迁移计算而不是移动数据的应用程序正在运行。HDFS的应用程序提供的接口将自己接近的数据开始计算。
跨异构硬件和软件平台的可移植性
HDFS已设计很容易地从一个平台移植到另一个。这有利于HDFS的广泛采用,大量应用的首选平台。
NameNode和Datanode
HDFS中有一个主/从架构。一个HDFS集群由一个单一的NameNode,主服务器管理文件系统命名空间和访问客户端的文件规定。此外,还有一个Datanode的数目,通常一个集群中,每个节点管理连接到存储节点上运行。HDFS的公开文件系统命名空间,并允许用户将数据存储在文件中。在内部,一个文件被分成一个或多个块,这些块存储在Datanode的集合。NameNode的执行文件系统命名空间的操作,如打开,关闭,重命名文件和目录。这也决定了Datanode的块映射。Datanode的是负责为在职读,写从文件系统的客户端的请求。Datanode的也执行后,从该NameNode的指令块创建,删除和复制。
Namenode和Datanode是件设计商品的机器上运行的软件。这些机器通常运行在GNU/Linux操作系统(OS)。HDFS是建立使用Java语言,任何支持Java的机器可以运行的NameNode或DataNode软件。高度可移植的Java语言的使用是指,可以广泛的机器上部署的HDFS。一个典型的部署,有一个专门的机器运行的唯一的NameNode的软件。每个集群中的其他机器上运行一个的DataNode软件的实例。该架构并不排除在同一台机器上运行多个Datanode的,但在实际部署中是很少见的情况。
NameNode的单一集群的存在,极大地简化了系统的体系结构。NameNode的是仲裁员和所有的HDFS元数据信息库。该系统的设计,在这样一种方式,用户数据不会通过NameNode的流动。