大数据系列(1)之 HADOOP原理

图灵汇官网

一、Hadoop概述及核心组件

1、Hadoop简介

Hadoop 是一个开源的分布式系统框架,能够利用低成本的硬件设备存储和处理大规模数据。它特别适合于离线和大数据分析场景。Hadoop 能够处理半结构化和非结构化数据,比传统的关系型数据库更具灵活性。Hadoop 主要由 HDFS(分布式文件系统)和 MapReduce(分布式计算框架)组成,后者用于管理和处理大规模数据集。

2、Hadoop 核心组件

Hadoop 的三大核心组件分别是 HDFS、MapReduce 和 YARN。

(1) HDFS

HDFS 是 Hadoop 分布式文件系统的简称,旨在高效地存储和管理大规模数据。它采用了 master-slave 架构,由一个 NameNode 和多个 DataNode 组成。NameNode 负责管理文件系统的元数据,而 DataNode 负责实际的数据存储。HDFS 具备高容错性和高吞吐量的特点,能够确保数据在多台机器间可靠地分布和备份。

(2) MapReduce

MapReduce 是一个分布式计算框架,用于处理和生成大数据集。它允许用户编写简单的程序,运行在数千台商用机器上,并能够以容错的方式处理 TB 级别的数据。MapReduce 的核心理念是将数据处理任务分解为 Map 和 Reduce 两个阶段。Map 阶段负责数据过滤和转换,Reduce 阶段则负责汇总结果。

(3) YARN

YARN(Yet Another Resource Negotiator)是 Hadoop 的资源管理器,用于协调和调度不同类型的计算任务。它引入了资源管理的新模式,将资源管理和任务调度分离,使得 Hadoop 更加灵活和高效。YARN 支持多种计算框架,如 MapReduce、Spark 等,从而扩展了 Hadoop 的应用范围。

二、Hadoop 核心组件的工作原理

1、HDFS 工作机制

HDFS 是一个分布式文件系统,其设计目标是实现高吞吐量的数据访问。HDFS 采用 master-slave 架构,由一个 NameNode 和多个 DataNode 组成。NameNode 负责管理文件系统的元数据,而 DataNode 则负责存储实际数据。为了确保数据的可靠性,HDFS 将数据复制到多个 DataNode 上。

客户端写入流程

当客户端需要向 HDFS 写入数据时,它会首先向 NameNode 请求写入许可。NameNode 会确认写入请求,并告知客户端将数据写入哪些 DataNode。随后,客户端将数据写入选定的 DataNode,并确保每个数据块都有多个副本。所有 DataNode 会在完成写入后向客户端发送确认消息。

客户端读取流程

当客户端需要从 HDFS 读取数据时,它会首先询问 NameNode 文件的位置。NameNode 将这些位置信息反馈给客户端,客户端随后从相应的 DataNode 获取数据。客户端可以从多个 DataNode 并行读取数据,以提高读取速度。

数据一致性与可用性

HDFS 通过数据复制确保数据的一致性和可用性。即使某个 DataNode 出现故障,其他副本仍能确保数据的完整性和可访问性。HDFS 会自动检测并恢复受损的数据块,以维持数据的高可用性。

数据切分

HDFS 将文件切分成多个数据块,每个块默认大小为 64MB 至 128MB。这些数据块会被分散存储在不同的 DataNode 上,从而提高数据处理的并行度和效率。

NameNode 和 DataNode 的职责

  • NameNode

    • 响应客户端的请求
    • 管理文件系统的元数据,包括文件名、副本系数、数据块位置等
  • DataNode

    • 存储用户的文件数据块
    • 定期向 NameNode 发送心跳信息,汇报自身的健康状况和数据块状态

2、MapReduce 工作原理

MapReduce 是一种用于处理大规模数据集的分布式计算框架,它将任务分解为 Map 和 Reduce 两个阶段。

Map 阶段

Map 阶段将输入数据分割成多个片段,并将每个片段映射为键值对。这些键值对随后被传递给 Reduce 阶段进行汇总。

Reduce 阶段

Reduce 阶段将具有相同键的值聚合在一起,生成最终的结果。为了使 Reduce 阶段能够并行处理,Map 阶段的输出需要经过一定的排序和分割,以便 Reduce 阶段能够正确处理。

Shuffle 过程

Shuffle 是连接 Map 和 Reduce 的桥梁,它负责将 Map 阶段的输出整理并传递给 Reduce 阶段。Shuffle 过程分为两个主要阶段:Map 阶段的数据准备和 Reduce 阶段的数据拷贝处理。

  • Map 阶段的数据准备

    • 输入数据被分割成多个片段
    • 每个片段被映射为键值对
    • 键值对被临时存储在内存缓冲区
    • 当缓冲区满时,数据会被写入磁盘
    • 最终,所有数据块会被合并成一个正式的输入文件,等待 Reduce 阶段拉取
  • Reduce 阶段的数据拷贝处理

    • Reduce 阶段拉取 Map 阶段生成的所有临时文件
    • 合并这些文件以形成最终的输入文件
    • 对合并后的数据进行处理,生成最终结果

3、YARN 工作原理

YARN 是 Hadoop 的资源管理框架,旨在改进 MapReduce 的执行效率并支持其他分布式计算框架。

Hadoop1.x 与 Hadoop2.x 的区别

Hadoop2.x 引入了 YARN,将资源管理和任务调度分离。这使得 Hadoop 更加灵活和高效,能够支持更多类型的计算框架。

为什么引入 YARN

在 Hadoop1.x 中,JobTracker 承担了资源管理和任务调度的双重职责,这导致了单点故障和资源管理瓶颈。Hadoop2.x 通过引入 YARN 解决了这些问题。

  • JobTracker

    • JobTracker 负责资源管理、任务调度和监控
    • 它将资源分配给任务,并监控任务的执行情况
  • TaskTracker

    • TaskTracker 作为 JobTracker 和任务之间的桥梁
    • 它接收任务并执行,同时定期向 JobTracker 汇报任务的状态

YARN 架构

YARN 将资源管理和任务调度分离,提高了系统的灵活性和可靠性。

  • ResourceManager

    • 负责全局资源管理,包括资源分配和调度
    • 它将资源分配给不同的应用程序,并监控它们的执行情况
  • NodeManager

    • 负责管理单个节点上的资源,包括启动和监控容器
    • 它接收来自 ResourceManager 的资源请求,并执行相应的任务
  • ApplicationMaster

    • 负责特定应用程序的资源请求和任务调度
    • 它与 ResourceManager 协调,请求所需的资源,并监控任务的执行情况
  • Container

    • 代表一个任务运行的环境,包含所需的资源(如内存、CPU)
    • Container 由 NodeManager 启动和管理,确保任务的顺利执行

三、Hadoop 的优缺点

1、Hadoop 的优点

  • 成本低廉:利用低成本的硬件设备存储和处理数据
  • 扩展性强:能够轻松扩展以处理更大规模的数据
  • 高效率:通过 MapReduce 实现并行计算,提高数据处理速度
  • 可靠性:自动维护数据副本,确保数据的高可用性和可靠性

2、Hadoop 的缺点

  • 不适合小数据量:对于小数据量的应用,Hadoop 的优势并不明显,甚至不如单机处理
  • 高延迟:只适用于离线处理,不适合实时处理
  • 存储小文件问题:HDFS 不适合存储大量的小文件,会导致性能下降
  • 数据更新困难:HDFS 设计为一次写入多次读取,难以修改具体的数据项

通过以上改写,希望您能在网站上更好地展示 Hadoop 的相关内容。

本文来源: 图灵汇 文章作者: 林琳