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、任务本地优化等功能,大幅提升了性能和资源利用效率。
版权归原作者 那一抹阳光多灿烂 所有, 如有侵权,请联系我们删除。