Hadoop 架构

Hadoop 架构

Hadoop 是一个主从架构的分布式计算框架,采用主节点(Master)与从节点(Slave)的拓扑结构。在系统中,Master 节点负责资源管理和任务分配,而 Slave 节点负责执行计算和存储数据。以下是 Hadoop 的主要架构组成及其核心概念的详细介绍。

HDFS(分布式文件系统)

HDFS 提供 Hadoop 的数据存储功能,通过将大文件划分为多个块(Block),以分布式的方式存储在多个节点上。

  1. HDFS 架构
    NameNode(运行在 Master 节点):负责命名空间管理、文件访问控制、文件块的元数据管理,以及块的存储和映射。
    DataNode(运行在 Slave 节点):负责存储实际数据块并处理来自客户端的读写请求。
  2. 块的概念
    HDFS 中的默认块大小为 128MB 或 256MB,远大于传统文件系统的块大小。
    合理设置块大小非常重要:如果块太小,会导致 NameNode 存储的元数据膨胀,从而消耗大量内存并降低效率。
  3. 副本机制
    HDFS 使用副本技术以保证容错性,每个块默认会被复制 3 次,存储在不同的节点上。
    机架感知算法:在存储副本时,HDFS 优先选择本地机架存放一个副本,其他副本则分布在其他机架上,从而提高容错能力和读取效率。

MapReduce(分布式计算框架)

MapReduce 是 Hadoop 的核心计算框架,用于处理海量数据。它将任务分为 Map 和 Reduce 两部分,以并行化方式运行在集群中。

  1. MapReduce 数据流
    输入格式(InputFormat):定义如何分割输入文件为数据片段。
    数据本地化:Map 任务尽量在数据所在节点执行,减少网络传输。
  2. Map 任务
    RecordReader:将输入分片解析为记录,并以键值对形式(key-value)提供给 Mapper。
    Mapper:用户自定义函数处理键值对,并生成中间键值对。
    Combiner(可选):对中间键值对进行本地聚合,减少网络传输的数据量。
    Partitioner:将 Mapper 输出的键值对分区,每个分区对应一个 Reducer。
  3. Reduce 任务
    Shuffle 和排序:拉取分区数据并排序,将相同键的数据分组。
    Reducer:用户自定义函数对每组键值对执行操作,生成最终结果。
    OutputFormat:将 Reducer 输出的键值对写入 HDFS,支持自定义格式。
Partitioner 的工作流程

-1. 从 Mapper 获取键值对:

Partitioner 接收来自 Mapper 的中间键值对数据。

-2. 分区逻辑:

默认情况下,Partitioner 会对键计算哈希值,然后对 Reducer 的数量取模:
partition=key.hashcode()%reducer_数量

这个机制确保:

(1)均匀分布:键值对尽可能均匀分布到所有 Reducer 上。

(2)键的唯一性:相同键的所有值会被分配到同一个 Reducer。

-3. 分片数据的本地存储:

分区后的数据以文件形式写入本地文件系统,等待相应的 Reducer 拉取。

Yarn(资源管理框架)

Yarn 是 Hadoop 的资源管理和任务调度系统。

  1. Yarn 架构
    ResourceManager(全局资源管理器):
    Scheduler:分配资源,但不跟踪任务状态。
    ApplicationManager:接收任务、分配第一个容器,重启失败的 ApplicationMaster。
    NodeManager(节点资源管理器):监控节点上的资源使用情况。
    ApplicationMaster:负责资源申请、任务监控和进度跟踪。
  2. Yarn 特性
    多租户:支持多种访问引擎(如批处理、实时处理)。
    高集群利用率:动态资源分配提升资源利用率。
    可扩展性:支持扩展至数千节点并联结多个 Yarn 集群。
    兼容性:Hadoop 1.x 的 MapReduce 应用可直接运行在 Yarn 集群上。

上图展示了 Yarn(Yet Another Resource Negotiator) 的架构及其工作流程。

  1. 任务提交:
    Client 向 Resource Manager 提交任务请求,包含所需资源信息和任务描述。
  2. 资源分配:
    Resource Manager 为任务分配第一个 Container,启动 Application Master。
  3. 任务管理:
    Application Master 在分配的容器中启动,并与 Resource Manager 交互以申请更多资源。
  4. 任务执行:
    Resource Manager 为 Application Master 分配多个 Container,这些 Container 运行具体的 MapReduce 或其他计算任务。
    Application Master 与 Node Manager 通信以启动任务容器。
  5. 状态监控:
    Node Manager 监控任务执行的容器资源使用情况,并向 Resource Manager 汇报。
    Application Master 跟踪任务状态,并将任务执行结果反馈给客户端。
  6. 任务完成:
    Client 接收任务执行状态(成功或失败),同时释放所有相关的资源。

Hadoop 架构整合了 HDFS 的分布式存储、MapReduce 的并行计算以及 Yarn 的资源管理能力,为海量数据的存储与处理提供了强大的支持。

相关推荐
宅博士小陈1 小时前
Servlet入门 Servlet生命周期 Servlet体系结构
数据仓库·hive·hadoop
喻师傅1 小时前
Scala-注释、标识符、变量与常量-用法详解
大数据·开发语言·scala
vibag2 小时前
Flink算子
java·大数据·后端·flink
字节跳动数据平台3 小时前
又稳又快!基于ByteHouse ELT构建高性能离/在线一体化数仓
大数据
Data-Miner4 小时前
企业智慧数字化运营平台重构建设项目实施技术方案(453页WORD)
大数据
finbarr454 小时前
搭建es环境
大数据·elasticsearch·搜索引擎
青云交7 小时前
大数据新视界 -- 大数据大厂之 Impala 性能优化:集群资源动态分配的智慧(上)(23 / 30)
大数据·性能优化·impala·应用案例·集群资源动态分配·负载感知算法·自适应机制
花菜回锅肉10 小时前
基于Hadoop、hive的数仓搭建实践
大数据·数据仓库·hive·hadoop
Java 第一深情18 小时前
已解决:spark代码中sqlContext.createDataframe空指针异常
大数据·分布式·spark