刘明帅
热爱生活!
刘明帅
什么是HDFS
什么是HDFS

Hadoop Distributed File System (HDFS) 是一种分布式文件系统,设计用于在商用硬件上运行。它与现有的分布式文件系统有许多相似之处。

但是,与其他分布式文件系统的差异很大:

  1. HDFS具有高度容错能力,旨在部署在低成本硬件上。
  2. HDFS提供对应用程序数据的高吞吐量访问,适用于具有大型数据集的应用程序。
  3. HDFS放宽了一些POSIX要求,以实现对文件系统数据的流式访问。

HDFS最初是作为Apache Nutch网络搜索引擎项目的基础设施而构建的。HDFS是Apache Hadoop Core项目的一部分。

HDFS的设计目标和假设

  1. 硬件故障是常态
  2. 应用程序需要流式访问数据
  3. 大数据集
  4. 简单的一致性模型
  5. “移动计算比移动数据更划算”
  6. 跨异构硬件和软件平台的可移植性

NameNode和DataNodes

HDFS具有主/从架构。

HDFS集群由单个NameNode,一个管理文件系统命名空间的主服务器和管理客户端对文件的访问组成。

此外,还有许多DataNode,通常是群集中每个节点一个,用于管理连接到它们运行的节点的存储。

HDFS公开文件系统命名空间,并允许用户数据存储在文件中。

在内部,文件被分成一个或多个块,这些块存储在一组DataNode中。

NameNode执行文件系统命名空间操作,如打开,关闭和重命名文件和目录;它还确定了块到DataNode的映射。

DataNode负责提供来自文件系统客户端的读写请求。DataNodes还执行块创建,删除。

NameNode和DataNode是设计用于在商用机器上运行的软件。这些机器通常运行GNU / Linux操作系统(OS)。

HDFS是使用Java语言构建的; 任何支持Java的机器都可以运行NameNode或DataNode软件。使用高度可移植的Java语言意味着可以在各种计算机上部署HDFS。典型部署具有仅运行NameNode软件的专用计算机。群集中的每台其他计算机都运行一个DataNode软件实例。该体系结构不排除在同一台机器上运行多个DataNode,但在实际部署中很少出现这种情况。

群集中存在单个NameNode极大地简化了系统的体系结构。NameNode是所有HDFS元数据的仲裁者和存储库。系统的设计使用户数据永远不会流经NameNode。

文件系统命名空间

HDFS支持传统的分层文件组织。用户或应用程序可以在这些目录中创建目录并存储文件。

文件系统命名空间层次结构与大多数其他现有文件系统类似; 可以创建和删除文件,将文件从一个目录移动到另一个目录,或重命名文件。

HDFS尚未实现用户配额或访问权限。HDFS不支持硬链接或软链接。但是,HDFS架构并不排除实现这些功能。

NameNode维护文件系统名称空间。NameNode记录对文件系统命名空间或其属性的任何更改。应用程序可以指定应由HDFS维护的文件的副本数。文件的副本数称为该文件的复制因子。该信息由NameNode存储。

数据复制

HDFS旨在可靠地在大型群集中的计算机上存储非常大的文件。

它将每个文件存储为一系列块; 除最后一个块之外的文件中的所有块都是相同的大小。复制文件的块以实现容错。

块大小和复制因子可根据文件进行配置。应用程序可以指定文件的副本数。复制因子可以在文件创建时指定,并可以在以后更改。HDFS中的文件是一次写入的,并且在任何时候都只有一个写入器。

NameNode做出有关块复制的所有决定。它定期从群集中的每个DataNode接收Heartbeat和Blockreport。收到心跳意味着DataNode正常运行。Blockreport包含DataNode上所有块的列表。

1.副本安置:第一个婴儿步骤

复制品的放置对HDFS的可靠性和性能至关重要。

优化副本放置可将HDFS与大多数其他分布式文件系统区分开来。这是一项需要大量调整和体验的功能。机架感知副本放置策略的目的是提高数据可靠性,可用性和网络带宽利用率。

副本放置策略的当前实现是朝这个方向的第一次努力。实施此政策的短期目标是在生产系统上对其进行验证,更多地了解其行为,并为测试和研究更复杂的策略奠定基础。

大型HDFS实例在通常分布在多个机架上的计算机群集上运行。不同机架中两个节点之间的通信必须通过交换机。在大多数情况下,同一机架中的计算机之间的网络带宽大于不同机架中的计算机之间的网络带宽。

NameNode通过Hadoop Rack Awareness中概述的过程确定每个DataNode所属的机架ID 。一个简单但非最优的策略是将复制品放在独特的机架上。这可以防止在整个机架出现故障时丢失数据,并允许在读取数据时使用来自多个机架的带宽。

此策略在群集中均匀分布副本,这样可以轻松平衡组件故障的负载。但是,此策略会增加写入成本,因为写入需要将块传输到多个机架。

对于常见情况,当复制因子为3时,HDFS的放置策略是将一个副本放在本地机架中的一个节点上,另一个放在本地机架中的另一个节点上,将最后一个放在另一个机架中的另一个节点上。

此策略可以减少机架间写入流量,从而提高写入性能。机架故障的可能性远小于节点故障的可能性; 此策略不会影响数据可靠性和可用性保证。

但是,它确实减少了读取数据时使用的聚合网络带宽,因为块只放在两个唯一的机架而不是三个。使用此策略时,文件的副本不会均匀分布在机架上。三分之一的副本位于一个节点上,三分之二的副本位于一个机架上,另外三个副本均匀分布在剩余的机架上。

此处描述的当前默认副本放置策略是正在进行的工作。

2. 副本选择

为了最大限度地减少全局带宽消耗和读取延迟,HDFS尝试满足最接近读取器的副本的读取请求。

如果在与读取器节点相同的机架上存在副本,则该副本首选满足读取请求。如果angg / HDFS群集跨越多个数据中心,则驻留在本地数据中心的副本优先于任何远程副本。

3.安全模式

在启动时,NameNode进入一个名为Safemode的特殊状态。

当NameNode处于Safemode状态时,不会发生数据块的复制。NameNode从DataNode接收Heartbeat和Blockreport消息。Blockreport包含DataNode托管的数据块列表。每个块都有指定的最小副本数。

当使用NameNode检入该数据块的最小副本数时,会认为该块是安全复制的。在可配置百分比的安全复制数据块使用NameNode检入(再加上30秒)后,NameNode退出Safemode状态。

然后,它确定仍然具有少于指定数量的副本的数据块列表(如果有)。然后,NameNode将这些块复制到其他DataNode。

文章链接: https://lmshuai.com/archives/126
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

推荐文章

发表评论

textsms
account_circle
email

刘明帅

什么是HDFS
Hadoop Distributed File System (HDFS) 是一种分布式文件系统,设计用于在商用硬件上运行。它与现有的分布式文件系统有许多相似之处。 但是,与其他分布式文件系统的差异很大: HDFS…
扫描二维码继续阅读
2019-05-26