《从你点了一份外卖,到老板发现程序员是顶级牛马》一条外卖订单的大数据技术栈奇幻漂流

发布时间:2026/9/30 19:19:27
《从你点了一份外卖,到老板发现程序员是顶级牛马》一条外卖订单的大数据技术栈奇幻漂流 假设你是某电商app的核心开发随着用户越来越多每天都会产生海量的用户行为和订单数据。老板看了这些数据得出一个惊人结论程序员是顶级牛马。你想验证这个结论于是打开 MySQL写了一条 SQL按性别统计消费金额。结果 MySQL 直接卡死。为什么因为数据量太大了。几百 GB 还能勉强撑一撑到了 TB、PB 级别MySQL 根本扛不住。这就是我们常说的大数据。那怎么办没有什么是加一层中间层不能解决的。这次我们加的中间层叫 Hadoop。Hadoop 是一套技术由三个核心组件组成HDFS、MapReduce、YARN。但大数据的核心难题就一个字大。解决方案也就一个字切。分而治之把大问题切成小问题。那我们先看看数据是怎么进来的。其实在数据存下来之前还有一个很重要的东西叫 Kafka。Kafka 是一个分布式消息队列你可以把它想象成一个巨大的蓄水池。双十一零点每秒几十万订单涌进来如果直接往 HDFS 写HDFS 会被瞬间冲垮。Kafka 先把这些数据接住缓冲一下再让下游按自己的节奏慢慢消费。它还能解耦上下游上游只管发下游只管读互不干扰。同一份数据实时风控、实时大屏、离线数仓都能读。而且 Kafka 可以攒批发送比如攒够 16KB 或者等几毫秒打包发出去这样吞吐量就上去了。但你要知道Kafka 本身不做计算它只是负责把数据安全、平稳地送进后面的存储和计算引擎。好数据接住了接下来解决怎么存。一台服务器硬盘不够就用多台。大文件切分成一个个 128MB 的数据块分散放到多台服务器上。怕一台机器挂了丢数据就多复制几份默认三副本放到不同机器备份。但问题来了以前单机读写很简单现在数据分散在几百台机器上读写变得极其复杂。你怎么知道哪个块在哪台机器上怎么保证一致性于是 HDFS 诞生了。全称 Hadoop Distributed File System分布式文件系统。它有两个核心角色NameNode 和 DataNode。NameNode 是大脑负责管理整个文件系统的目录树和每个文件块的位置信息DataNode 是苦力真正存数据块的地方。你只需要调用 HDFS 的 API它就能帮你切分、存储、备份、容错。你不用关心底层细节就像用本地文件系统一样简单。存储问题解决了接下来解决怎么算。假设我们要统计本年度的订单按性别汇总消费金额。数据有 1000G没有任何一台服务器能扛住。那就切。把数据切分成一个个分片分给多台服务器并行计算最后把结果聚合起来。但每台服务器怎么知道该怎么算这就需要我们告诉它业务逻辑。我们写两个函数一个 Map 函数一个 Reduce 函数。Map 函数告诉每台服务器每个分片里的数据怎么处理Reduce 函数告诉服务器Map 算完的结果怎么汇总。这个“从 HDFS 读数据、切分片、执行 Map、Shuffle、执行 Reduce、汇总结果”的通用流程被抽象成了一个框架叫 MapReduce。MapReduce 的核心思想就是分而治之。它会把你的计算任务自动拆分成很多个小任务分配到不同的机器上并行执行。中间还有一个 Shuffle 阶段把相同 key 的数据拉到一起交给 Reduce 处理。虽然它写起来有点麻烦但它是大数据计算的基石。存和算都解决了还有什么问题每个分片都要跑一个 Map 任务每个任务都要占 CPU 和内存。这么多任务怎么管理分配到哪些服务器上跑这时候 YARN 登场了。全称 Yet Another Resource Negotiator资源调度器。它在计算任务和服务器之间加了一层中间层负责资源管理。它把每个任务需要的资源抽象成一个容器容器里运行计算任务的代码。YARN 有两个核心角色ResourceManager 和 NodeManager。ResourceManager 是全局大管家负责整个集群的资源分配NodeManager 是每台机器上的小管家负责启动和监控容器。当 MapReduce 需要跑任务时它会向 YARN 申请容器YARN 根据资源情况分配然后 MapReduce 把任务调度到对应的容器上运行。通过一系列资源申请和协调调度完成所有 Map 和 Reduce 任务最终得到结果。到这里存储、计算、资源调度都解决了。还有优化空间吗有。以前单机架构我们写点 SQL 就搞定了。现在分布式集群却要写一大堆 MapReduce 代码。这也太麻烦了吧于是 Hive 出现了。它是 SQL 和 MapReduce 之间的中间层。你把 SQL 丢给它它自动解析转换成 MapReduce 任务运行完把结果返回给你。Hive 还有一个 MetaStore用来存表的元数据比如表名、字段、分区信息等。这样不会写 Java 的人也能分析大数据。它让大数据的门槛一下子降低了很多。还能再快吗MapReduce 的中间结果每次都往磁盘写频繁读写磁盘速度慢。那为什么不放内存呢于是 Spark 出现了。它把中间结果放内存放不下才放磁盘。Spark 的核心是 RDD弹性分布式数据集还有 DAG有向无环图可以把多个计算步骤串起来减少落盘。速度比 MapReduce 快 10 到 100 倍。而且 Spark 也支持 SQL叫 Spark SQL可以直接查 Hive 表性能更好。还有问题吗双十一秒杀一秒钟涌入几十万订单。MapReduce 和 Spark 都是批处理得攒够一批才处理。攒的过程浪费时间实时性不够。于是 Flink 出现了。来一条数据处理一条数据。真正的流处理毫秒级延迟。它还有状态管理和 Exactly-Once 语义保证数据不丢不重。Flink 也能做批处理但它的强项是流处理特别适合实时性要求高的场景。最后总结一下这条数据流水线Kafka 负责接数据HDFS 负责存数据MapReduce 负责批量算YARN 负责管资源Hive 负责让 SQL 也能算Spark 负责加速算Flink 负责实时算。它们各司其职共同构成了大数据处理的完整体系。所以下次你点外卖看到推荐变了背后就是这套系统在运转。