Open Xuanmin-W opened 7 years ago
目录: ● 一、介绍 ● 二、假设和目标 ○ 2.1硬件故障 ○ 2.2流式数据访问 ○ 2.3大数据集 ○ 2.4简单的一致性模型 ○ 2.5移动计算的代价小于移动数据 ○ 2.6跨异构的硬件和软件平台
一、介绍 Hadoop分布式文件系统(HDFS)是一个分布式文件系统,设计用于在商品硬件上运行。 它与现有的分布式文件系统有许多相似之处。 但是,与其他分布式文件系统的差异是显着的。 HDFS具有高度的容错能力,可以部署在低成本的硬件上。 HDFS提供对应用程序数据的高吞吐量访问,适用于具有大型数据集的应用程序。 HDFS放宽了一些POSIX要求来启用对文件系统数据的流式访问。 HDFS最初是作为Apache Nutch网络搜索引擎项目的基础设施而构建的。 HDFS是Apache Hadoop Core项目的一部分。 项目URL是http://hadoop.apache.org/ 笔记:POSIX:POSIX表示可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX ),POSIX标准定义了操作系统应该为应用程序提供的接口标准,是IEEE为要在各种UNIX操作系统上运行的软件而定义的一系列API标准的总称。POSIX标准意在期望获得源代码级别的软件可移植性。换句话说,为一个POSIX兼容的操作系统编写的程序,应该可以在任何其它的POSIX操作系统(即使是来自另一个厂商)上编译执行。
二、假设和目标 2.1硬件故障 硬件故障是常态而不是例外。 一个HDFS实例可以由数百或数千个服务器机器组成,每个服务器机器存储部分文件系统的数据。 事实上,有大量的组件,并且每个组件都有一个较大的故障概率,这意味着HDFS总有某个组件是不起作用的。 因此,检测故障和快速自动恢复是HDFS的核心架构目标。 2.2流式数据访问 运行在HDFS的应用需要以流的方式访问它们的数据集。这些应用不是运行于一般用途的文件系统上的一般用户的应用。HDFS的设计更适合批处理而不是交互式处理。HDFS的重点是高通量的数据访问而不是低延迟的数据访问。POSIX强加了很多对HDFS适合的应用不需要的硬性需求。POXIS在部分关键地方的语义已被替换以提高数据吞吐率。 笔记:流式访问:流式数据,特点就是,像流水一样,不是一次过来而是一点一点“流”过来。而你处理流式数据也是一点一点处理。 吞吐量与延迟:从山西到广州运煤,一列火车100小时(包括往返)可以运输10000t煤,而一架飞机20小时(包括往返)可以运输100t煤。飞机追求的是低延迟,火车追求的是高吞吐量。两个指标并无直接关系。 2.3大数据集 在HDFS上运行的应用程序有大量的数据集。 HDFS中的典型文件大小为千兆字节至兆兆字节。 因此,HDFS被调整为支持大文件。 它应该为单个群集中的数百个节点提供高聚合数据带宽和规模。 它应该支持单个实例中的数千万个文件。 2.4简单的一致性模型 HDFS应用程序需要需要对文件的访问模式为write-once-read-many 。 一个文件一旦创建,写入,关闭后,除了附加和截断之外,不需要再改变。 支持将内容附加到文件的末尾,但不能在任意点更新。 这种假设简化了数据一致性问题,并实现了高吞吐量数据访问。 MapReduce应用程序或Web爬虫应用程序完全适合这种模式。 2.5移动计算的代价小于移动数据 如果应用在紧挨着数据的地方运行应用所需要的计算将更有效率。当数据集非常大是尤是如此。这减少了网络拥塞,增加了系统整体的吞吐量。这个假设是移动计算到数据所在的位置而不是移动数据到应用运行所在的位置。HDFS为应用程序提供了一个接口,以移动应用程序自己到数据所在的位置。 2.6跨异构的硬件和软件平台 HDFS被设置为可以很容易的从一个平台移动到另一个平台。这使HDFS作为一个平台对于大量的应用程序具有普遍的适用性。
三、NameNode 和 DataNodes HDFS具有主/从体系结构。 一个HDFS集群包含一个NameNode,这是一个主服务器,管理文件系统名称空间和客户端对文件的访问。 此外,还有许多DataNode,通常是集群中的每个节点一个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。 笔记:元数据(Metadata):又称中介数据、中继数据,为描述数据的数据(data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。
四、文件系统命名空间 HDFS支持传统的分层文件组织。 用户或应用程序可以在这些目录内创建目录并存储文件。 文件系统命名空间层次结构与大多数其他现有文件系统类似; 可以创建和删除文件,将文件从一个目录移动到另一个目录,或者重命名一个文件。 HDFS支持用户配额(users quota)和访问权限。 HDFS不支持硬链接或软链接。 但是,HDFS体系结构并不排除实现这些功能。NameNode维护文件系统名称空间。 NameNode记录对文件系统名称空间或其属性的任何更改。 应用程序可以指定HDFS应该维护的文件的副本数量。 文件的副本数称为该文件的复制因子。 这个信息由NameNode存储。 笔记:HDFS允许管理员为所使用的名称数量和用于各个目录的空间量设置配额。 名称配额和空间配额是独立运作的,但两类配额的管理和实施是紧密平行的。
Apache Hadoop官方文档翻译与学习系列笔记 地址:http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html