Hadoop概述
Hadoop
目录
Hadoop是Apache基金会开发的一个开源分布式计算框架,它为海量数据的存储、管理和分析提供了可靠、可扩展、经济高效的解决方案,是整个大数据技术生态的奠基性系统。
Hadoop的核心设计哲学
Hadoop的设计遵循两个核心原则,以应对大数据处理的挑战:
- 分而治之:将一个庞大的任务分解成多个子任务,分配到集群的不同节点上并行处理,最后将结果汇总。
- 计算向数据靠拢:传统模式是移动数据到计算节点,这会产生巨大的网络开销。Hadoop反其道而行,将计算程序分发到存储数据的节点上运行,极大减少了数据传输,提升了整体效率。
Hadoop的核心组件
Hadoop生态系统由多个项目构成,但其最核心、最基础的是两个组件:
HDFS(分布式存储)和MapReduce(分布式计算),它们共同构成了Hadoop 1.x时代的核心。
第一部分:分布式存储基石 - HDFS
(Hadoop Distributed File System)
HDFS的定义与作用
定义:一个为存储超大数据文件而设计的分布式文件系统。
核心作用:提供高吞吐量、高容错性的数据访问能力,是Hadoop进行分布式计算的数据基础。
HDFS的适用场景
适合:
- 存储海量(GB、TB、PB级别)的大文件。
- 采用“一次写入,多次读取”的数据访问模型。
- 在普通商用硬件上构建,成本效益高。
不适合:
- 存储大量小文件(会占用NameNode大量内存)。
- 低延迟的数据访问(不适合实时交易系统)。
- 频繁修改文件内容。
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,诞生了众多强大的工具,共同构成了大数据处理的完整解决方案:
- 数据仓库:Hive(提供SQL查询接口)
- NoSQL数据库:HBase(实时随机读写)
- 数据采集:Sqoop(关系型数据导入)、Flume(日志数据采集)
- 协调服务:Zookeeper(分布式协调)
- 新一代计算引擎:Spark(基于内存的计算,比MapReduce更快)、Flink(流处理引擎)
更多推荐


所有评论(0)