作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
中间件,我给它的定义就是为了实现某系业务功能依赖的软件,包括如下部分:
Web服务器
代理服务器
ZooKeeper
Kafka
RabbitMQ
Hadoop HDFS(本章节)
上个小节我们介绍消息队列软件,本章进入大数据章节,会涉及到多个软件。但是我们这里主要讲解的HDFS。
在云计算与人工智能尚未普及的 2006 年,一个名为 Hadoop 的开源项目悄然诞生。它以“分而治之”的朴素哲学,通过 HDFS(存)、MapReduce(算)、YARN(调度) 三大核心组件,首次实现了用廉价商用服务器集群处理 PB 级数据的可能。这“老三件套”不仅成为大数据时代的引擎,更奠定了现代分布式系统的设计范式。
HDFS —— 数据洪流的河床(存)
设计目标:廉价硬件的可靠存储
面对海量数据的存储需求,传统 NAS/SAN 系统在成本和扩展性上彻底失效。HDFS 的核心突破在于:
-
分块存储:将文件切割为固定大小块(默认 128MB),分散存储于不同节点。
-
多副本冗余:每个块自动复制 3 份(可配置),物理分散存放,容忍节点宕机。
-
移动计算而非数据:计算任务优先调度至存有数据的节点,减少网络传输。
架构精髓:元数据与数据的分离
-
NameNode:集群的“大脑”,单点管理文件系统树、块映射表等元数据(后期引入 HA 机制解决单点故障);
-
DataNode:数据真实存储节点,执行数据块的读写请求,定期向 NameNode 汇报块状态
MapReduce —— 批处理的里程碑(算)
MapReduce 将复杂计算抽象为两个函数:
-
Map 阶段: 读取输入数据,将其拆分为独立的片段,由多个 Map 任务并行处理,输出中间键值对
(key, value)。 -
Reduce 阶段: 将 Map 阶段输出的中间键值对按
key进行分组和排序(Shuffle & Sort),然后由多个 Reduce 任务并行处理,每个 Reduce 处理一个或多个key对应的所有value,最终输出结果。伪代码示例
def map(key, value): # 处理原始数据,输出中间键值对 emit(intermediate_key, value)
def reduce(key, values_list): # 聚合相同 key 的值 emit(final_result)
YARN —— 资源管理的破壁者(调度)
-
ResourceManager (RM):
Master节点。集群全局的资源管理和调度器。负责接收应用提交请求、调度资源、启动/监控 ApplicationMaster。 -
NodeManager (NM):
Slave节点。单节点的资源管理和任务执行代理。负责启动、监控容器(Container),向 RM 报告资源使用和容器状态。 -
ApplicationMaster (AM):****每个应用一个实例。由 RM 启动,负责向 RM 协商应用所需的资源(Container),与 NM 通信启动/监控任务,管理单个应用的执行和容错。
其他相关软件
- Apache Hive
-
角色: 基于 Hadoop 的数据仓库工具。
-
功能: 提供类似 SQL 的查询语言(HiveQL),将 SQL 查询自动转换为 MapReduce、Tez 或 Spark 作业在 Hadoop 上执行。让熟悉 SQL 的用户也能处理 HDFS 上的大数据。
-
核心概念: 表(Table)、分区(Partition)、分桶(Bucket)、元数据存储(通常用 MySQL/PostgreSQL)。
- Apache Pig
-
角色: 用于分析大型数据集的高级数据流语言和执行框架。
-
功能: 提供
Pig Latin脚本语言,描述数据转换流程(ETL - Extract, Transform, Load)。脚本被编译成 MapReduce 作业序列执行。相比直接写 MapReduce 代码更简洁。
- Apache HBase
-
角色: 运行在 HDFS 之上的分布式、可扩展的 NoSQL 数据库。
-
功能: 提供对海量数据的实时随机读写访问(弥补 HDFS 的不足)。数据按行键(Row Key)排序存储。适用于需要低延迟访问大表的场景(如消息、用户画像)。
-
模型: 列式存储(Column Family)、强一致性(特定级别)。
- Apache Spark
-
角色: 快速、通用的分布式计算引擎。虽然独立于 Hadoop,但常与 Hadoop (HDFS, YARN) 集成使用。
-
核心优势: 内存计算(大幅减少磁盘 I/O)、DAG 执行引擎(更高效的任务调度)、丰富的 API(Scala, Java, Python, R)、支持多种工作负载(批处理 Spark SQL, 流处理 Spark Streaming / Structured Streaming, 机器学习 MLlib, 图计算 GraphX)。
-
与 MapReduce 比较: 通常比 MapReduce 快很多倍,尤其在迭代算法和交互式查询场景。
- Apache ZooKeeper
-
角色: 分布式协调服务。
-
功能: 为分布式应用提供配置维护、命名服务、分布式同步(锁)、组服务、Leader 选举等。是保证 Hadoop 高可用性(HA)的基础(如 HDFS HA 的 Active/Standby NameNode 切换依赖 ZK)。
- Apache Sqoop
-
角色: 用于在 Hadoop (HDFS/Hive/HBase) 和关系型数据库 (RDBMS) 之间高效传输批量数据的工具。
-
功能: 导入(RDBMS -> Hadoop)、导出(Hadoop -> RDBMS)。
- Apache Flume
-
角色: 高可靠、高可用的分布式海量日志采集、聚合和传输系统。
-
功能: 将来自不同来源(Web Server, Application Server)的流式日志数据高效地收集、聚合并传输到 HDFS 或 HBase 等集中存储中。
- Apache Oozie
-
角色: 工作流调度系统。
-
功能: 管理和协调运行在 Hadoop 平台上的复杂作业依赖关系(多个 MapReduce, Pig, Hive, Sqoop, Spark 等作业按顺序或条件执行)。可以定时或事件触发。
- Apache Kafka
-
角色: 分布式流处理平台。独立但常与 Hadoop/Spark 集成。
-
功能: 高吞吐、低延迟、可持久化的发布-订阅消息系统。常用于构建实时数据管道和流式应用(如将实时数据喂给 Spark Streaming/Flink 或 Flume 写入 HDFS)。
- Apache Tez
-
角色: 构建在 YARN 之上的通用数据流处理框架。
-
功能: 优化执行由复杂任务 DAG(有向无环图)构成的计算。Hive 和 Pig 可以将查询编译成 Tez 作业而非 MapReduce 作业,显著提升执行效率。
运维小路
一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!
关注微信公众号《运维小路》获取更多内容。