2021下半年阅读笔记之Hadoop分布式文件系统
hadoop分布式文件系统
HDFS是Apache Software Foundation项目和Apache Hadoop项目的子项目(请参阅参考资料 )。 Hadoop是存储诸如TB和PB之类的大量数据的理想选择,并且使用HDFS作为其存储系统。 HDFS使您可以连接包含在其上分布数据文件的群集中的节点 (商品个人计算机)。 然后,您可以将数据文件访问和存储为一个无缝文件系统。 对数据文件的访问以流方式处理,这意味着应用程序或命令直接使用MapReduce处理模型执行(同样,请参见参考资料 )。
HDFS是容错的,并提供对大数据集的高吞吐量访问。 本文探讨了HDFS的主要功能,并提供了HDFS体系结构的高级视图。
HDFS概述
HDFS与其他分布式文件系统有许多相似之处,但是在几个方面有所不同。 HDFS的一个明显区别是HDFS的“一次写入多次读取”模型,该模型放宽了并发控制要求,简化了数据一致性,并实现了高吞吐量访问。
HDFS的另一个独特属性是这样的观点:通常最好将处理逻辑放在数据附近,而不是将数据移至应用程序空间。
HDFS严格限制一次只能将数据写入一个写入器。 字节总是附加在流的末尾,并且保证字节流按写入顺序存储。
HDFS有许多目标。 以下是一些最著名的:
- 通过检测故障并进行快速,自动的恢复来实现容错
- 通过MapReduce流数据访问
- 简单而强大的一致性模型
- 处理逻辑靠近数据,而不是数据靠近处理逻辑
- 跨异构商品硬件和操作系统的可移植性
- 可扩展性以可靠地存储和处理大量数据
- 通过在商用个人计算机集群之间分布数据和进行处理来实现经济
- 通过分布数据和逻辑以在数据所在的节点上并行处理数据来提高效率
- 通过自动维护数据的多个副本并在发生故障时自动重新部署处理逻辑来确保可靠性
HDFS为应用程序提供了接口,以将它们移到数据所在的位置,如以下部分所述。
应用程序连接到HDFS
您可以通过多种不同方式访问HDFS。 HDFS为Java API提供了本机Java™应用程序编程接口(API)和本机C语言包装器。 此外,您可以使用Web浏览器浏览HDFS文件。
表1中描述的应用程序还可用于与HDFS交互。
表1.可以与HDFS交互的应用程序
应用 | 描述 |
---|---|
FileSystem(FS)外壳 | 类似于常见Linux®和UNIX®shell(bash,csh等)的命令行界面,允许与HDFS数据进行交互。 |
DFS管理员 | 可用于管理HDFS群集的命令集。 |
fsck |
Hadoop命令/应用程序的子命令。 您可以使用fsck 命令检查与文件的不一致情况,例如丢失的块,但不能使用fsck 命令来纠正这些不一致情况。 |
名称节点和数据节点 | 这些服务器具有内置的Web服务器,管理员可以通过它们检查集群的当前状态。 |
HDFS具有简单而强大的体系结构,因此具有令人期待的非凡功能集。
HDFS架构
HDFS由文件和目录所驻留的节点的互连群集组成。 HDFS群集由一个称为NameNode
节点组成,该节点管理文件系统名称空间并管理客户端对文件的访问。 另外,数据节点( DataNodes
)将数据存储为文件内的块。
名称节点和数据节点
在HDFS中,一个给定名称的节点管理文件系统名称空间操作,例如打开,关闭和重命名文件和目录。 名称节点还将数据块映射到数据节点,该数据节点处理来自HDFS客户端的读取和写入请求。 数据节点还根据管理名称节点的指令创建,删除和复制数据块。
图1说明了HDFS的高级体系结构。
图1. HDFS架构
如图1所示,每个群集包含一个名称节点。 这种设计简化了用于管理每个名称空间和仲裁数据分发的简化模型。
名称节点与数据节点之间的关系
名称节点和数据节点是设计为在异构操作系统上的商品计算机上以解耦方式运行的软件组件。 HDFS是使用Java编程语言构建的; 因此,任何支持Java编程语言的机器都可以运行HDFS。 典型的安装群集具有一台专用计算机,该计算机运行一个名称节点,并可能运行一个数据节点。 集群中的每台其他机器都运行一个数据节点。
数据节点不断循环,向名称节点询问指令。 名称节点不能直接连接到数据节点。 它只是从数据节点调用的函数中返回值。 每个数据节点都维护一个开放的服务器套接字,以便客户端代码或其他数据节点可以读取或写入数据。 名称节点知道此服务器套接字的主机或端口,该节点将信息提供给感兴趣的客户端或其他数据节点。 有关数据节点,名称节点和客户端之间的通信的更多信息,请参见通信协议侧栏。
名称节点维护和管理对文件系统名称空间的更改。
文件系统名称空间
HDFS支持传统的分层文件组织,用户或应用程序可以在其中创建目录并将文件存储在其中。 文件系统名称空间层次结构与大多数其他现有文件系统相似。 您可以创建,重命名,重定位和删除文件。
HDFS还支持第三方文件系统,例如CloudStore和Amazon Simple Storage Service(S3)(请参阅参考资料 )。
资料复制
HDFS复制文件块以实现容错功能。 应用程序可以在创建文件时指定其副本数,此后可以随时更改此数目。 名称节点做出有关块复制的所有决定。
HDFS使用智能副本放置模型来提高可靠性和性能。 优化副本的放置使HDFS在大多数其他分布式文件系统中独树一帜,并且通过有效利用网络带宽的机架感知副本放置策略得以促进。
大型HDFS环境通常跨多个计算机安装运行。 不同安装中的两个数据节点之间的通信通常比同一安装中的数据节点要慢。 因此,名称节点尝试优化数据节点之间的通信。 名称节点通过其机架ID标识数据节点的位置。
资料组织
HDFS的主要目标之一是支持大文件。 典型的HDFS块的大小为64MB。 因此,每个HDFS文件由一个或多个64MB块组成。 HDFS尝试将每个块放置在单独的数据节点上。
文件创建过程
在HDFS上处理文件与其他文件系统所使用的过程相似。 但是,由于HDFS是显示为单个磁盘的多计算机系统,所以所有在HDFS上操纵文件的代码都使用org.apache.hadoop.fs.FileSystem
对象的子类。