Hadoop

目录

Hadoop的核心设计哲学

Hadoop的核心组件

第一部分:分布式存储基石 - HDFS

HDFS的定义与作用

HDFS的适用场景

HDFS的架构与角色

NameNode(主节点)

DataNode(从节点)

Secondary NameNode(辅助节点)

HDFS的核心存储原理

数据分块

冗余存储

数据存取策略

错误与恢复

HDFS的读写流程

第二部分:分布式计算引擎 - MapReduce

MapReduce模型简介

MapReduce的工作流程

Input(输入)

Splitting(分片)

Mapping(映射)

Shuffling(洗牌)

Reducing(归约)

Output(输出)

关键执行环节详解

关于Split(分片)

Map任务数量

关于Reduce任务数量

Shuffle过程简介

Hadoop的演进与生态扩展


Hadoop是Apache基金会开发的一个开源分布式计算框架,它为海量数据的存储、管理和分析提供了可靠、可扩展、经济高效的解决方案,是整个大数据技术生态的奠基性系统。

Hadoop的核心设计哲学

Hadoop的设计遵循两个核心原则,以应对大数据处理的挑战:

  • 分而治之:将一个庞大的任务分解成多个子任务,分配到集群的不同节点上并行处理,最后将结果汇总。
  • 计算向数据靠拢:传统模式是移动数据到计算节点,这会产生巨大的网络开销。Hadoop反其道而行,将计算程序分发到存储数据的节点上运行,极大减少了数据传输,提升了整体效率。

Hadoop的核心组件

Hadoop生态系统由多个项目构成,但其最核心、最基础的是两个组件:

HDFS(分布式存储)和MapReduce(分布式计算),它们共同构成了Hadoop 1.x时代的核心。

第一部分:分布式存储基石 - HDFS

(Hadoop Distributed File System)

HDFS的定义与作用

定义:一个为存储超大数据文件而设计的分布式文件系统。

核心作用:提供高吞吐量、高容错性的数据访问能力,是Hadoop进行分布式计算的数据基础。

HDFS的适用场景

适合:

  1. 存储海量(GB、TB、PB级别)的大文件。
  2. 采用“一次写入,多次读取”的数据访问模型。
  3. 在普通商用硬件上构建,成本效益高。

不适合:

  1. 存储大量小文件(会占用NameNode大量内存)。
  2. 低延迟的数据访问(不适合实时交易系统)。
  3. 频繁修改文件内容。

HDFS的架构与角色

HDFS采用经典的主从架构:

NameNode(主节点):
  • 角色:集群的“总管家”或“目录”。
  • 职责:管理文件系统的元数据(文件名、目录结构、副本位置等),处理客户端请求。
  • 单点故障:是HDFS的关键瓶颈和潜在风险点。
DataNode(从节点):
  • 角色:集群的“工人”或“仓库”。
  • 职责:实际存储数据块,执行来自NameNode的读写指令,并定期向NameNode汇报心跳和块信息。
Secondary NameNode(辅助节点):
  • 角色:NameNode的“助手”。
  • 职责:定期合并NameNode的内存镜像和操作日志,帮助NameNode在故障时更快恢复。注意:它不是NameNode的热备。

HDFS的核心存储原理

数据分块

大文件被切分成固定大小的数据块(默认128MB),每个块是独立的存储单元。

冗余存储

为应对硬件故障,每个数据块默认保存3个副本,并分布在不同机架的DataNode上,以实现数据容错和机架感知。

数据存取策略

(1)写入:

客户端首先与NameNode通信获取DataNode列表,然后以管道方式将数据依次写入第一个、第二个、第三个DataNode。

(2)读取:

客户端从NameNode获取数据块副本位置,优先选择距离最近的副本进行读取,减少网络延迟。

错误与恢复

(1)DataNode故障:

通过心跳机制检测,NameNode会自动在健康的DataNode上重新创建丢失的副本,维持副本数量。

(2)数据损坏:

DataNode在读取数据时会校验,发现损坏会向NameNode报告,并由其他完好副本恢复。

HDFS的读写流程

写数据流程

客户端 → NameNode(获取元数据) → 管道写入DataNode1 → DataNode2 → DataNode3 → 确认 → 客户端。

读数据流程

客户端 → NameNode(获取块位置) → 直接连接最近的DataNode读取数据 → 客户端。

第二部分:分布式计算引擎 - MapReduce

MapReduce模型简介

MapReduce是一个将复杂的并行计算过程高度抽象为两个阶段的编程模型:

  • Map阶段:对输入的每个数据单元进行处理,生成一系列中间键值对。
  • Reduce阶段:对具有相同键的所有中间值进行聚合处理,生成最终结果。

MapReduce的工作流程

一个完整的MapReduce作业包含以下阶段:

Input(输入)

从HDFS读取输入数据。

Splitting(分片)

将输入数据集切分成逻辑上的分片,每个分片对应一个Map任务。

Mapping(映射)

每个Map任务并行处理一个分片,输出中间键值对。

Shuffling(洗牌)

核心环节。系统自动将Map阶段的输出按照键进行排序、分组,并分发到对应的Reduce任务。这是网络开销最大的阶段。

Reducing(归约)

每个Reduce任务处理一组具有相同键的值,进行聚合计算。

Output(输出)

将Reduce的结果写入HDFS。

关键执行环节详解

关于Split(分片)

目的:确定并行计算的粒度。

原则:分片大小通常与HDFS块大小相同,以确保每个Map任务能完整地在单个节点上处理数据。

Map任务数量

理论上由输入分片总数决定,分片越多,Map任务越多,并行度越高。

关于Reduce任务数量

可由用户指定,直接影响作业的并行度和最终输出文件数量。

数量过少,Reduce端负载高;数量过多,产生大量小文件,增加管理开销。

Shuffle过程简介

Map端:输出数据先写入内存缓冲区,达到阈值后溢写到磁盘,并进行分区、排序。

Reduce端:从各个Map Task拉取属于自己的分区数据,合并排序,然后交给Reduce函数处理。

Hadoop的演进与生态扩展

尽管MapReduce和HDFS是Hadoop的基石,但现代大数据处理已经超越了最初的框架。

(1)Hadoop 2.0及以后的演进

YARN (Yet Another Resource Negotiator):引入了资源管理层的概念,将资源管理与作业调度分离。

  • 作用:使Hadoop不再局限于MapReduce,可以支持Spark、Flink等多种计算框架,成为一个通用的分布式操作系统。
  • 架构:包含全局的ResourceManager和每个节点上的NodeManager。
(2)丰富的Hadoop生态系统

围绕HDFS和YARN,诞生了众多强大的工具,共同构成了大数据处理的完整解决方案:

  1. 数据仓库:Hive(提供SQL查询接口)
  2. NoSQL数据库:HBase(实时随机读写)
  3. 数据采集:Sqoop(关系型数据导入)、Flume(日志数据采集)
  4. 协调服务:Zookeeper(分布式协调)
  5. 新一代计算引擎:Spark(基于内存的计算,比MapReduce更快)、Flink(流处理引擎)

更多推荐