什么是 HDFS?

HDFS (Hadoop Distributed File System) 是 Hadoop 的分布式文件系统,是 Hadoop 的核心组件之一。HDFS 通过将大文件划分为多个块并存储在多个节点上,实现数据的备份和容错,具有高可靠性、高吞吐量等特点,适用于存储 PB 级别的数据。

HDFS 的架构

HDFS (Hadoop 分布式文件系统)是一种分布式、可扩展且可移植的文件系统,专为 Hadoop 框架设计。它的架构包括以下几个主要组件:

NameNode 和 DataNode

HDFS 由单个 NameNode (主服务器)和多个 DataNode (数据节点)组成。NameNode 负责管理和维护存储在其内存中的 DataNode 的元数据。DataNode 则负责响应客户端的读写请求,并管理运行所在节点上的存储。

NameNode 和 DataNode

文件块和复制

在 HDFS 集群中,文件被分割为等大小的块(除了最后一个块可能较小)。每个块都存储在多个 DataNode 上,并可在多个 DataNode 上复制以保证可用性。默认情况下,每个块会复制三次,以降低机架电源故障或交换机故障的影响。

文件块和复制

设计理念

HDFS 旨在跨各种硬件平台可移植,并与多种底层操作系统兼容,尽管这可能会带来一些性能限制。HDFS 非常适合"一次写入,多次读取"的文件访问场景,并支持文件追加和截断,而不支持随机读写,以简化数据一致性问题。

设计理念

并行处理大数据

HDFS 允许将多台计算机集群化,以并行分析海量数据集,而不是使用一台大型计算机来存储和处理数据。它使用块存储来存储独立分布的数据单元,为 Hadoop 和 Kafka 分析应用程序提供更好的性能。

并行处理大数据

HDFS 的特点

HDFS (Hadoop 分布式文件系统)具有高容错性,这是通过在服务器集群的每个节点上复制存储数据来实现。通过数据冗余备份,即使某个节点发生故障,也能确保数据的可用性和完整性。HDFS 的高容错性使其非常适合构建大规模、高可靠的数据存储和处理平台,满足大数据时代对数据可靠性的高要求。

HDFS 可以通过大型集群将超大文件拆分成多个数据块进行存储,从而支持超大文件的存储。HDFS 还支持自定义数据块大小,可以根据实际情况进行设置,有效提高大文件的存储效率和读写性能。此外,HDFS 能够水平扩展存储容量,通过增加更多节点来满足海量数据存储的需求,非常适合构建大规模数据存储和处理平台。

由于 HDFS 采用数据复制的方式实现数据冗余备份,因此可以使用低成本的机器来搭建 HDFS 集群,而不需要过多考虑单个机器的性能和可靠性。这使得构建大规模、高可靠的 HDFS 存储系统的成本相对较低。HDFS 的这一特性使其非常适合构建大规模数据存储和处理平台,满足大数据时代对存储系统的低成本和高可扩展性的需求。

HDFS 与传统文件系统的区别

分布式文件系统是一种专为大规模数据集的批量处理而设计的系统,与传统文件系统存在显著区别。以下是它们的主要差异:

设计目标不同

分布式文件系统专为大规模数据集的批量处理而设计,而传统文件系统则面向通用用途。分布式文件系统支持一次写入多次读取的访问模式,并支持文件追加和截断,而非随机读写,以简化数据一致性问题。相比之下,传统文件系统则没有针对大数据场景进行优化。

设计目标不同

架构差异

分布式文件系统引入了中央节点管理元数据和负载均衡,这在大规模文件访问时可能会成为瓶颈,而传统分布式文件系统则没有这一限制。此外,分布式文件系统的某些实现无法利用特定平台的独有功能,导致一些性能瓶颈。

架构差异

可移植性和合规性

分布式文件系统并非完全符合某些文件系统标准,因为它们的目标与这些标准的要求不同。这也导致了分布式文件系统在可移植性上的局限性。而传统文件系统则需要遵循相关标准。

可移植性和合规性

数据结构和可扩展性

分布式文件系统采用了扁平的对象存储结构,每个对象都有唯一标识符和元数据,更易于扩展到 PB 级和数十亿对象规模。而传统文件系统则采用层次化的目录和文件夹结构,更适合非结构化数据和大型内容存储库,但在可扩展性上存在局限。

数据结构和可扩展性

HDFS 的数据冗余机制

HDFS 通过跨多台机器存储大文件并复制数据到多个主机来实现可靠性。默认情况下,数据会被复制 3 份,两份存储在同一机架上,一份存储在不同机架上。这种方法可以减少机架断电或交换机故障的影响,即使发生此类硬件故障,数据仍然可用。

HDFS 最基本的数据冗余机制是复制。通过在多个节点上存储数据副本,即使某些节点发生故障,数据也不会丢失。默认情况下,HDFS 会将数据复制3份,但复制因子可以根据需要进行配置。

除了简单复制,HDFS 还使用了一些数据编码技术确保数据可用性。这些技术允许异步编码复制数据,并在编码后删除额外副本。另一种方法是用纠删码替代复制,数据被编码后,即使部分数据丢失也可以从剩余片段中恢复。

为了进一步提高可靠性,HDFS 会将数据副本分布在不同的机架。这样,即使整个机架发生故障,数据仍然可以从其他机架上的副本中获取。通常情况下,HDFS 会将两个副本存储在同一机架,第三个副本存储在另一个机架。

亚马逊云科技中国峰会

6 月 19 日 - 20 日|上海世博中心

聚焦生成式 AI 从技术爆发迈向行业深耕的跨越

HDFS 的读写流程

HDFS (Hadoop 分布式文件系统)是一种高度容错的分布式文件系统,旨在运行在廉价的商用硬件上。HDFS 的读写流程如下:

文件写入

客户端向 HDFS 中的 NameNode 发送一个写入请求,并将文件的元数据(如文件名、权限、目录树等)保存在 NameNode 的内存中。 在接收到客户端写入请求后,NameNode 会根据配置的副本数量,返回一组 DataNode 列表给客户端,用于存储文件数据块。 客户端会将文件数据分成多个数据块,并将这些数据块发送给 DataNode 列表中的 DataNode 进行存储。每个数据块会被复制到多个 DataNode 上,以提供数据冗余和容错能力。

数据读取

客户端向 NameNode 发送读取请求,并获取文件的元数据信息。 NameNode 会返回存储该文件数据块的 DataNode 列表给客户端。 客户端从 DataNode 列表中的一个 DataNode 读取数据块,如果读取失败,则会从另一个 DataNode 读取该数据块的副本。

数据块恢复

如果客户端在读取数据块时发现某个 DataNode 上的数据块损坏或丢失,HDFS 会自动从其他副本的 DataNode 中获取该数据块的副本进行恢复。

数据校验

在读取数据块时,HDFS 会通过对数据块进行校验和检查,来验证数据的完整性和正确性。如果发现数据块损坏,则会从其他副本中恢复该数据块。

HDFS 的设计目标是提供高吞吐量的数据访问,适合运行在廉价的商用硬件上。通过数据块的复制和恢复机制,HDFS 可以提供高容错性和高可用性,从而确保数据的安全性和可靠性。

HDFS 异常处理

HDFS (Hadoop 分布式文件系统)是一种高度容错的分布式文件系统,旨在存储大规模数据集并支持大数据应用程序运行。HDFS 异常处理是确保数据可靠性和可用性的关键机制,包括以下几个方面:

HDFS 采用多副本存储策略,每个数据块默认存储 3 个副本。如果某个数据块损坏或丢失,HDFS会自动从其他副本中获取数据进行恢复。如果在复制数据块时出现异常,导致某些数据块的副本数量不足,HDFS 会自动触发重新复制过程,以确保每个数据块都有足够的副本数量。

由于文件块可能会因为网络异常、硬件故障或软件漏洞等原因损坏,HDFS 实现了校验机制,定期对数据块进行校验和检查,以保证数据的完整性和正确性。一旦发现损坏的数据块,HDFS 会自动从其他副本中恢复。

HDFS 的元数据由 NameNode 管理,包括文件系统树和数据块与 DataNode 的映射关系。为了避免单点故障导致整个 HDFS 集群失效,NameNode 的元数据以 FsImage 和 EditLog 两种形式存储,并配置了 SecondaryNameNode 定期合并 FsImage 和 EditLog,生成新的一致的 FsImage。同时,HDFS 还支持配置多个 NameNode,通过主备热备份和元数据同步机制,实现元数据的高可用性。

在 HDFS 中,大量的数据请求比元数据请求更常见。为了提高数据吞吐量,HDFS 采用了数据块位置感知调度策略,尽量将计算任务调度到存储数据块的 DataNode 节点上,从而最大限度减少数据传输。

如何优化 HDFS 的性能

优化 HDFS 性能的几种方式如下:

HDFS 的作业跟踪器(Job Tracker)和任务跟踪器(Task Tracker)之间存在数据位置感知能力。作业跟踪器可以根据数据位置将 Map 或 Reduce 作业调度到相应的任务跟踪器,从而减少网络流量并防止不必要的数据传输。这对于数据密集型作业来说,可以显著缩短作业完成时间。

虽然 HDFS 通过跨多个主机复制数据来实现可靠性,理论上消除了在主机上使用冗余磁盘阵列(RAID)存储的需求。但某些 RAID 配置仍然有助于提高输入/输出(I/O)性能。

HDFS 并不完全兼容 POSIX,这是一种权衡,旨在提高数据吞吐量的性能,并支持非 POSIX 操作,如 Append。

HDFS 已添加高可用性功能,允许主元数据服务器 NameNode 手动故障转移到备份节点。该项目还开始开发自动故障转移功能。

欢迎加入亚马逊云科技培训中心

从 0 到 1 轻松上手云服务,获取更多官方开发资源及培训教程

快速上手训练营

第一课:亚马逊云科技简介

本课程帮助您初步了解云平台与本地环境的差异,以及亚马逊云科技平台的基础设施和部分核心服务,包括亚马逊云科技平台上的弹性高可用架构,架构设计准则和本地架构迁移上云的基本知识。

亚马逊云科技技术讲师:李锦鸿

第二课:存储与数据库服务

您将在本课程中学习到亚马逊云科技上的三个存储服务分别是什么。我们也将在这个模块中为您介绍亚马逊云科技上的关系型数据库服务 Amazon Relational Database Service (RDS)。

亚马逊云科技资深技术讲师:周一川

第三课:安全、身份和访问管理

在这个模块,您将学习到保护您在亚马逊云科技上构建的应用的安全相关知识,责任共担模型以及身份和访问管理服务, Identity and Access Management (IAM) 。同时,通过讲师演示,您将学会如何授权给 EC2 实例,允许其访问 S3 上的资源。

亚马逊云科技技术讲师:马仲凯

了解更多入门学习计划 »

快速上手训练营

账单设置与查看

账单设置与查看

动手实操

快速上手云上无服务器化的 MySQL 数据库

本教程将引导您创建一个Aurora Serverless 数据库并且连接上它。

部署时间:10 分钟

启动一台基于 Graviton2 的 EC2 实例

本教程将为您讲解如何在云控制台上启动一台基于 Graviton2 的 EC2 实例。

部署时间:5 分钟

使用 Amazon Systems Manager 进行云资源统一跟踪和管理

在这个快速上手教程中,您将学会如何使用 Amazon Systems Manager 在 Amazon EC2 实例上远程运行命令。

部署时间:10 分钟

查看更多教程 »

动手实操

快速注册账号 享用免费套餐

跟随注册步骤详解,三分钟快速创建账号,领取免费权益

打开中国区账号注册页面

01 填写您 注册账号的邮箱,点击“继续”

02 查看您的 注册账号邮箱

注: 发件箱 no-reply@register.signin.amazonaws.com.cn

03 输入 邮箱中收到的验证码,点击“继续”

注: 该链接中的内容显示语言是与您的网页浏览器设置相一致的,您可以根据需要自行调整语言栏。

立即开始注册 »

image

填写用户名密码

01 请设置您的 账号用户名

02 为您的帐号 设置密码

03 重新 输入密码

立即开始注册 »

图片

填写账号联系人以及公司信息

01 填写公司联系人 姓名全称

02 填写公司联系人的 联系电话

03 填写 公司名称

注: 公司名称请务必与您所提供的营业执照公司名称保持一致

04 填写 公司办公地址

注: 省份/自治区/直辖市 - 城市 - 区 - 街道门牌号以及楼层信息 - 邮政编码

05 请选择 是否需要发票

注: *附件-申请发票流程 供您参考

06 点击查看 客户协议 勾选方框表示您已阅读,并同意客户协议的条款

立即开始注册 »

图片

企业信息验证

01 在此上传 企业注册执照

02 请填写网络安全负责人的 姓名

注: 该字段务必与您下方提供的身份证号匹配或与证件上的姓名保持一致

03 请填写网络安全负责人的 联系方式

注: 有效的电子邮件地址 - 有效的中国内地 手机号码 - 座机号码(如无座机,请填写正确有效的手机号码)

04 在此上传网络安全负责人的 身份证件

注: 当您选择证件类型为“身份证”时,您需要填写正确的身份证号码,选择其他证件类型时,您需要上传证件扫描稿

立即开始注册 »

图片

手机验证与支持计划

01 在此填写 手机号

02 请输入您收到的 4 位 验证码

03 请点击 继续

04 请根据需求 选择一个支持计划

立即开始注册 »

图片