深入 Hadoop 22 - Hadoop 设计遗产从 GFS MapReduce 到云原生
上一篇讲了现代大数据栈的演进。本篇是系列最后一篇——总结 Hadoop 留下的设计遗产。 Hadoop 项目本身在某些场景被云原生 stack 取代,但 Hadoop 沉淀的设计思想已经成为后续所有大数据、云原生系统的默认起点。本篇把全系列 22 篇文章压成一组"可迁移的设计模式",看 Hadoop 的哪些核心思想被后续系统继承。 Hadoop 的设计遗产不是"代码",而是"前提假设 + 工程对策"——节点失败是常态、大对象切块、副本放在一起、心跳监控、自动重做、双层调度、分而治之、Append-Only Journal、Snapshot + Checkpoint。这些模式已经成为现代分布式系统的标准设计语言,被 Kafka、Cassandra、Kubernetes、Spark、Flink、Ray 等系统以不同方式继承。 本篇只抓一个问题:Hadoop 的哪些设计模式被后续系统继承、各自如何变体、为什么这些模式有跨时代的生命力。 三条核心前提的传承 本系列 00 篇把 Hadoop 的主线压成一句话——以"节点...
深入 Hadoop 21 - Hadoop 与对象存储 Kubernetes 演进对比
上一篇讲了 Hadoop 生态。本篇讲现代大数据栈的演进——对象存储和 Kubernetes 如何逐步替代 HDFS 和 YARN。 云原生大数据栈常被简化成"把 Hadoop 搬到云上"。这个简化漏了核心架构变化。准确的说法是:现代大数据栈把 Hadoop 的"存储 + 计算 + 编排"三层各自独立演化——存储层从 HDFS 切到 S3 / OSS 等对象存储(彻底解耦存储与计算)、计算层从 MapReduce 演进到 Spark / Flink(内存优先 + 流批一体)、编排层从 YARN 切到 Kubernetes(弹性扩缩容 + 多租户隔离)。三层解耦后每个组件独立演化、独立计费、独立运维,让大数据栈从"集成式 Hadoop 集群"变成"组合式数据平台"。 本篇只抓一个问题:对象存储为什么能取代 HDFS、Spark on K8s 现在能取代 YARN 多少、现代大数据栈与 Hadoop 的具体架构差异、什么场景应该选哪种。 存储层:HDFS vs 对象存储 HDFS 在 Hadoop 1.x...
深入 Hadoop 20 - Hadoop 生态 Hive HBase Pig
前四阶段把 Hadoop 核心(HDFS / YARN / MapReduce + Common)讲完了。第五阶段展开 Hadoop 周边的生态系统和现代演进。本篇先讲生态——Hive、HBase、Pig 在 Hadoop 之上各自的角色。 Hadoop 生态常被介绍成"HDFS + YARN + MapReduce + 一堆工具"。这个描述对应了组件清单但完全没解释这些工具为什么存在。准确的说法是:Hive 是 SQL 编译器(把 SQL 翻译成 MapReduce/Tez/Spark 执行计划),不是计算引擎;HBase 是把随机读写放上 HDFS 的 LSM-Tree KV 存储,依赖 HDFS 做持久化但通过 RegionServer 提供低延迟访问;Pig 是脚本化的数据流编程语言,曾被 Yahoo 大规模使用但已被 Spark 取代。这三个工具各自填补 Hadoop 的一个能力空白——SQL 接口、随机读写、复杂数据流——但底层都跑在 HDFS + YARN 之上,不替代它们。 本篇只抓一个问题:Hive 的 SQL 编译流程是什么、HBase 怎...
深入 Hadoop 19 - 监控与运维 Metrics JMX 日志聚合
上一篇讲了安全。本篇讲 Hadoop 的可观测性——Metrics、JMX、日志聚合。这是 HA、安全与 Common 篇的最后一篇。 Hadoop 可观测性常被介绍成"看 Web UI 和日志"。这个描述对应了基本操作但漏了系统化设计。准确的说法是:Hadoop 提供三层可观测性——Metrics V2 是结构化指标系统(Source-Sink 架构,周期性采样暴露给外部采集)、JMX 是运行时 Java 指标暴露接口(Prometheus JMX Exporter 让 Hadoop 接入现代时序数据库)、YARN Log Aggregation 是 Task 日志的集中存储和查询。这三层共同构成 Hadoop 集群的运维可观测性基座。 本篇只抓一个问题:Metrics V2 的 Source-Sink 架构怎么工作、JMX 怎么接入 Prometheus 等现代监控栈、YARN Log Aggregation 的写入和查询流程、生产环境的可观测性最佳实践。 Metrics V2:Source-Sink 架构 Hadoop 2.x 引入了 Metrics V...
深入 Hadoop 18 - Hadoop 安全 Kerberos Token ProxyUser
上一篇讲了序列化与压缩。本篇讲 Hadoop 的安全机制——Kerberos 认证、Delegation Token、Proxy User。 Hadoop 安全常被介绍成"Kerberos 配置"。这个描述对应了最显眼的部分但漏了完整设计。准确的说法是:Hadoop 安全是一个分层模型——底层用 Kerberos 做初始强认证,中间层用 Delegation Token 减轻 KDC 压力,资源访问层用 Block Token / Container Token 做时间受限授权,最上层用 ACL 做细粒度权限控制。Proxy User 让超级用户代表真实用户访问 Hadoop,是 HiveServer2 / Oozie / Hue 这类网关服务的核心机制。 本篇只抓一个问题:Kerberos 在 Hadoop 里到底起什么作用、Delegation Token 怎么减少 KDC 压力、Proxy User 与 doAs 模型怎么让网关服务代用户访问。 为什么 Hadoop 需要 Kerberos Hadoop 默认是 SIMPLE 认证——客户端声称自己是哪个...
深入 Hadoop 17 - 序列化与压缩
上一篇讲了 RPC。本篇讲 RPC 和数据存储都依赖的两个底层机制——序列化和压缩。 序列化与压缩常被合并介绍。这两个机制其实是不同维度——序列化解决"对象怎么变字节流"(结构化),压缩解决"字节流怎么变更小的字节流"(空间优化)。两者经常组合使用——序列化后的字节流再压缩存储或传输。准确的说法是:Hadoop 提供多种序列化格式(Writable / Protobuf / Avro),与多种压缩格式(Gzip / BZip2 / Snappy / LZ4 / Zstd)正交组合,按场景选择最优组合。 本篇只抓一个问题:Writable 与 Java Serializable 的差别、Protobuf 与 Avro 各自的取舍、Snappy vs Zstd vs Gzip 的压缩比/速度权衡、压缩在 Hadoop 各个环节的具体应用位置。 序列化的本质 序列化(serialization)解决"对象 → 字节流"和"字节流 → 对象"的双向转换。分布式系统的所有跨进程数据交换都依赖序列化——RPC 参...
深入 Hadoop 16 - Hadoop RPC 协议栈
前三阶段把 HDFS / YARN / MapReduce 三个子系统讲完了。第四阶段展开三个子系统共用的那套基础设施——RPC、序列化、安全、监控。本篇先讲 RPC。 Hadoop RPC 常被介绍成"Hadoop 进程间通信的协议"。这个描述对应了功能但完全没解释机制。准确的说法是:Hadoop RPC 是一个独立的、自研的 RPC 框架,不是 gRPC / Thrift / Dubbo 之类通用框架。它用 Protobuf 做序列化(Hadoop 2.x 起默认),用 SASL 做认证(Kerberos / Delegation Token / Simple),用 NIO + 长连接做传输。整个 Hadoop 项目(HDFS / YARN / MapReduce)的所有进程间通信都走这套 RPC——NameNode 与 DataNode、ResourceManager 与 NodeManager、ApplicationMaster 与 RM、Task 与 MRAppMaster。 本篇只抓一个问题:Hadoop RPC 的六层栈是怎么组织的、Protob...
深入 Hadoop 15 - MRv2 on YARN ApplicationMaster 与 Task Attempt
上一篇讲了 Shuffle。本篇讲 MapReduce 在 YARN 上的具体实现——MRv2。这是 MapReduce 计算模型篇的最后一篇。 MRv2 常被介绍成"MapReduce 在 YARN 上的版本"。这个描述对应了部署形态但漏了内部架构。准确的说法是:MRv2 把 Hadoop 1.x 的 JobTracker 拆成 ResourceManager(资源管理)和 MRAppMaster(作业编排)两部分,MRAppMaster 是一个普通的 YARN ApplicationMaster,运行在 container 里。每个 Task 也是一个 container(YarnChild),通过 umbilical RPC 与 MRAppMaster 通信。MRv2 的 Speculative Execution、Counter、Task Recovery 等机制都是 MRAppMaster 实现的,与 YARN 基础设施解耦。 本篇只抓一个问题:MRAppMaster 内部是怎么编排 Map / Reduce Task 的、Task Attempt ...
深入 Hadoop 14 - MapReduce Shuffle 全流程
上一篇讲了 MapReduce 编程模型。本篇展开 MapReduce 性能代价最重的环节——Shuffle。 Shuffle 常被介绍成"Map 到 Reduce 之间的数据传输"。这个描述对应了功能但完全没解释 Shuffle 为什么慢。准确的说法是:Shuffle 是 Map 端的 Spill-Sort-Merge 流水线、Reduce 端的 Fetch-Merge 流水线、中间的网络 HTTP 传输共同组成的复杂流程,涉及磁盘 I/O、网络 I/O、内存缓冲、排序算法等多个层。Shuffle 是 MapReduce 作业 50%+ 延迟的来源,调优 Shuffle 几乎等同于调优 MapReduce。 本篇只抓一个问题:Map 端 Shuffle 怎么从内存缓冲流到本地磁盘分区文件、Reduce 端怎么从所有 Map 拉取并合并、CombineFileInputFormat 在什么场景下能减少 Map 数。 Map 端 Shuffle 的五个步骤 Map Task 输出的 key-value 对不是直接发给 Reduce,而是经过一个五步骤的本地流水线...
深入 Hadoop 13 - MapReduce 编程模型与分而治之
第一、第二阶段把 HDFS 和 YARN 讲完了。从这一篇起进入 MapReduce——Hadoop 三大子系统的最后一个,也是历史最久的一个。 MapReduce 常被介绍成"Hadoop 的计算引擎"。这个描述对应了功能但漏了 MapReduce 的本质。准确的说法是:MapReduce 是把"分而治之"这个通用算法思路工程化为可运行框架的产物——把大输入切成 InputSplit 给 Map 并行处理,用 Partitioner 把 Map 输出按 key 分发到 Reduce,Reduce 聚合后写 HDFS。三阶段切分(Map / Shuffle / Reduce)和三个用户钩子(Mapper / Combiner / Reducer)是 MapReduce 全部抽象的核心。 本篇只抓一个问题:MapReduce 为什么把计算切成 Map → Shuffle → Reduce 三阶段、Combiner 在什么场景下能省 Shuffle 流量、Partitioner 与 Reduce 个数的关系。 三个阶段的本质 一次 MapRed...
