当前位置: 首页 > article >正文

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 ContainersOpportunistic 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、任务本地优化等功能,大幅提升了性能和资源利用效率。


http://www.kler.cn/a/399992.html

相关文章:

  • ArcGIS Pro ADCore DAML
  • 【原创】如何备份和还原Ubuntu系统,非常详细!!
  • day03(单片机高级)RTOS
  • uniapp 微信小程序地图标记点、聚合点/根据缩放重合点,根据缩放登记显示气泡marik标点
  • 华为ensp实验二--mux vlan的应用
  • 开源音乐分离器Audio Decomposition:可实现盲源音频分离,无需外部乐器分离库,从头开始制作。将音乐转换为五线谱的程序
  • 【数据分享】中国渔业统计年鉴(1979-2024) pdf
  • GaussDB性能调优
  • 机器学习—偏差或方差与神经网络
  • 基于 AI 智能名片 2 + 1 链动模式商城小程序的立体连接营销策略研究
  • 问:Spring MVC DispatcherServlet流程步骤梳理
  • go 学习网站,go例子 go demo go学习视频
  • 基于Canny边缘检测和轮廓检测
  • 版本控制【Git Bash】【Gitee】
  • Django5 2024全栈开发指南(一):框架简介、环境搭建与项目结构
  • 浅谈数据仓库的架构及其演变
  • C++中的观察者模式:通俗易懂的讲解与实现
  • 113页PPT制造业研发工艺协同及制造一体化
  • 四十、Python(pytest框架-下)
  • github进不去解决办法-误打误撞进去了
  • Redis GEO 功能解析
  • Spring Cloud Ribbon 实现“负载均衡”的详细配置说明
  • Stable Diffusion概要讲解
  • Jenkins的pipeline Script的 每个组件的详细讲解
  • LangChain学习--LangChain-chatchat代码研读
  • 2024年09月CCF-GESP编程能力等级认证Python编程二级真题解析