Hadoop 3.x 新特性详解

Hadoop 3.x 新特性详解

Hadoop 3 相比 Hadoop 2 带来了许多重要的增强和优化功能,进一步提升了稳定性、可扩展性和性能。以下是 Hadoop 3 的主要新特性及改进的详细介绍。

HDFS的新特性

HDFS 是 Hadoop 用来存储数据的核心组件,它可以把大文件切分成多个块(Block),然后分布式地存储在多台机器上。

纠删码支持(Erasure Coding)

背景 :传统副本存储问题

传统方式:为了防止数据丢失,HDFS 通常会把同一份数据复制 3 份(即 3 倍存储开销)。

问题:这种方法可靠性高,但非常浪费存储空间。

纠删码(Erasure Coding)解决了什么问题?
纠删码的原理

将数据分成多个部分,并生成一些额外的校验数据。

即使部分数据丢失,仍然可以通过校验数据重建完整数据。

存储优势:使用 Reed-Solomon (10,4) 编码技术,仅需 1.4 倍存储开销(比传统的 3 倍节省 50% 以上)。

适用场景

冷数据:很少访问的大数据(如历史日志文件、备份数据)。

注意事项

数据重建过程会消耗更多的 CPU 和网络资源。

因此,不适合用于频繁访问的数据。

支持多于两个 NameNode

背景 :HDFS 的高可用性(HA)问题

在 Hadoop 中,NameNode 是 HDFS 的核心节点,负责管理文件系统的元数据(即哪些文件存在哪些数据块)。

传统上,HDFS 的高可用性依赖于 1 个活跃(Active)NameNode 和 1 个备用(Standby)NameNode

多 NameNode 的好处

Hadoop 3 支持多个 Standby NameNode(如 2 个备用节点),提高了容错能力。
例子:使用 3 个 NameNode 和 5 个 JournalNode,可以在 2 个节点故障的情况下仍然保持集群运行。

数据节点内置平衡器(Intra-Datanode Balancer)

背景 :数据分布不均问题

每个 DataNode(存储数据块的节点)通常会有多个磁盘存储数据。

如果你在 DataNode 中添加或替换磁盘,可能导致新磁盘上的数据很少,而旧磁盘的数据几乎满了。

问题:DataNode 内部磁盘不平衡,可能导致性能问题。

新特性 :内置平衡器

Hadoop 3 引入了 DataNode 内部平衡器 ,可以在 DataNode 内部重新分配数据,确保各磁盘数据均衡。
使用方式:通过 hdfs diskbalancer 命令调用。

基于路由器的 HDFS 联邦(Router-Based Federation)

背景 :多命名空间管理问题

在大规模 Hadoop 集群中,可能有多个独立的 HDFS 命名空间,每个命名空间是一个独立的文件系统。
问题:客户端需要单独管理如何访问这些命名空间。

新特性Router-Based Federation

引入了一个基于路由器的 RPC 层,提供统一的视图,隐藏了多个命名空间的复杂性。

好处

客户端可以像访问单一 HDFS 一样访问多个命名空间。

简化管理,操作由服务端完成。

YARN(资源管理框架)的新特性

YARN 是 Hadoop 的资源调度系统,负责管理 Hadoop 集群中的计算资源(如内存、CPU 等),并分配给不同的应用程序或任务。

YARN Timeline Service v.2

背景 :时间线服务问题

Timeline Service 是 YARN 用来跟踪应用程序运行历史数据的工具(例如任务运行的时间、状态等)。

问题:v.1.x 的时间线服务在大规模集群中易出现性能瓶颈。

新特性:v.2

提高了时间线服务的 可扩展性 和 可靠性。
新增功能:

流(Flow):可以组织和管理应用程序之间的工作流。

聚合(Aggregation):可以从多个来源汇总数据。

资源类型的扩展

背景 :传统资源模型的局限

Hadoop 2.x 的资源模型只支持 CPU 和内存。
问题:在异构集群中(如 GPU 服务器、本地存储服务器),无法根据其他资源类型进行任务调度。

新特性 :支持自定义资源类型

集群管理员可以定义新的资源类型(如 GPU 数量、存储容量等)。
好处:YARN 的任务可以针对 GPU 或其他资源进行调度,适应更多样化的硬件环境。

支持 Opportunistic Containers 和分布式调度

背景: 资源调度效率

在资源不足的情况下,任务可能需要等待较长时间才能执行。

Opportunistic Containers
工作机制

在资源不足时,任务会进入 NodeManager 的队列,等待资源释放后再执行。

优先级低于 Guaranteed Containers。

好处 :即使在高负载时,任务也不会被拒绝,提高了集群的利用率。
分布式调度

由 NodeManager 直接进行任务调度,减少了中心化调度的延迟。

Guaranteed Containers 与 Opportunistic Containers 的对比

特性 Guaranteed Containers Opportunistic Containers
资源分配 即时分配,任务启动时资源已准备好 等待资源可用时才开始执行
优先级
适用场景 关键任务,需要稳定资源支持 非关键任务,资源紧张时可延迟执行
资源抢占 不会被抢占,可抢占 Opportunistic 可被 Guaranteed 容器抢占
资源利用率 可能导致资源碎片化 更高的集群利用率

基于 API 的 Capacity Scheduler 队列配置

背景 :队列配置管理问题

YARN 的队列配置通常通过手动编辑配置文件完成。
问题 :手动管理队列配置复杂且容易出错。
新特性 :API 管理队列配置

提供 REST API 接口,支持动态修改队列配置。

好处

管理员可以通过脚本或工具自动化队列管理。

更加灵活,避免手动配置文件的复杂操作。

MapReduce 优化

任务级本地优化

背景 :什么是 MapReduce?

MapReduce 是 Hadoop 中用于处理大规模数据的核心计算框架。

Map 阶段 将数据分成多个小部分并进行初步处理。

Reduce 阶段 汇总和整理来自 Map 阶段的输出。

Shuffle 操作 是指 Map 阶段的输出数据被传递到 Reduce 阶段,这需要进行排序和网络传输。

问题 :Shuffle 操作的性能瓶颈

Shuffle 是 MapReduce 的关键步骤,但由于需要大量的数据传输和排序,性能往往成为瓶颈。

优化:本地化映射输出收集器
本地化处理 :Hadoop 3 支持将 Shuffle 操作部分在本地完成,而非全部通过网络传输。
性能提升 :对于需要大量 Shuffle 操作的任务,可提升 30% 的性能。
适用场景:特别适用于需要频繁数据交换的大型任务。

堆管理机制改进

背景 :什么是堆(Heap)?

堆是 JVM(Java 虚拟机)运行时分配内存的区域,用于存储程序中需要动态分配的数据。

Hadoop 中的每个任务和守护进程(如 NameNode、DataNode)都会使用堆内存。

问题 :手动配置堆大小的局限

在 Hadoop 2.x 中,堆大小由 HADOOP_HEAPSIZE 手动设置。

手动配置可能导致以下问题:

配置不合理会导致任务失败或资源浪费。

不同机器的内存大小不同,无法灵活调整。

改进 :自动堆管理

Hadoop 3 弃用了 HADOOP_HEAPSIZE,引入了 自动堆大小调整机制

根据每台机器的内存大小自动分配适当的堆大小。

减少人为干预,提升资源利用效率。

客户端和开发者支持

覆盖客户端的 Jar(Shaded Client Jars)

背景 :依赖冲突问题

在 Hadoop 2.x 中,客户端程序(如用户开发的应用程序)需要使用 Hadoop 的类库。
问题

客户端程序必须加载 Hadoop 的依赖项。

如果 Hadoop 的依赖版本与客户端程序的依赖版本冲突,会导致程序错误。

改进 :单一 Jar 包隔离依赖

Hadoop 3 引入了 hadoop-client-api 和 hadoop-client-runtime。
优势

将 Hadoop 的依赖项隔离到单一 Jar 包中。

避免了 Hadoop 依赖污染客户端程序的类路径,减少冲突。

重写 Shell 脚本

背景 :Hadoop 的 Shell 脚本

Hadoop 提供了一系列 Shell 脚本,用于启动、停止和管理集群服务。
问题 :旧版脚本的局限

脚本中存在许多长期未修复的 bug。

功能较为有限,难以适应复杂的部署环境。

改进 :重写 Shell 脚本

修复了许多历史 bug,并增加了新功能。
优势

提高了脚本的稳定性和兼容性。

更适合现代化的集群管理需求。

云存储支持

文件系统连接器

功能

Hadoop 3 新增了对以下云存储的支持:
Microsoft Azure Data Lake
阿里云对象存储(Aliyun OSS)

通过这些连接器,Hadoop 可以将云存储视为普通的分布式文件系统使用。

意义

用户无需额外开发即可直接将云存储集成到 Hadoop 中。

特别适合混合云或多云环境。

S3Guard

功能

为 Amazon S3 的文件系统客户端(S3A)提供 一致性保证元数据缓存

一致性问题:

S3 的存储系统是最终一致性的,这意味着在文件更新后,可能需要一段时间才能对外部可见。

实现方式

使用 Amazon DynamoDB 存储文件和目录的元数据。

提供一致性视图,确保文件更新能够立即可见。

其他优化

修改多服务的默认端口

问题

在 Hadoop 2.x 中,某些服务的默认端口与 Linux 系统的临时端口范围(32768-61000)重叠。

影响:端口冲突可能导致服务启动失败。

解决方案

调整了多个服务的默认端口号,涉及:

  • NameNode
  • Secondary NameNode
  • DataNode
  • KMS(Key Management Service)

提高了服务的可靠性。

Hadoop 3 的总体提升

最低要求

Hadoop 3 需要 Java 8 作为最低版本支持。

所有 Jar 包均基于 Java 8 编译。

稳定性与可用性

提供了更稳定的 API,适合生产环境使用。

性能与资源利用率

引入纠删码、多 NameNode、任务本地优化等功能,大幅提升了性能和资源利用效率。

相关推荐
Fulima_cloud1 小时前
智慧锂电:开启能源新时代的钥匙
大数据·人工智能·物联网
CXH7281 小时前
elasticsearch 8.17.3部署文档
大数据·elasticsearch
jinan8862 小时前
车间图纸安全传输需要注意什么?
大数据·运维·服务器·安全
阿里云大数据AI技术3 小时前
Hologres 计算组实例&分时弹性入门实践
大数据·serverless
港股研究社3 小时前
重估首程控股:一只产业生态完整的“机器人ETF”
大数据·人工智能·机器人
心存の思念3 小时前
分布式系统中分布式ID生成方案的技术详解
分布式
atbigapp.com4 小时前
AI数据分析:一键生成可视化分析思路
大数据·人工智能·数据分析
叶域5 小时前
正则表达式(复习)
大数据·python·正则表达式
Data-Miner5 小时前
电商数据分析 电商平台销售数据分析 电商平台数据库设计 揭秘电商怎么做数据分析
大数据
hellolianhua5 小时前
大数据hadoop课程笔记
大数据·hadoop·笔记