Hadoop与Spark对比:从计算模型到选型实践
1. 先理清一个误区Hadoop和Spark根本不是同一层的东西在大数据处理框架的选型问题上几乎每隔一段时间就会有人把Hadoop和Spark拿出来做一次对比。作为长期和数据平台打交道的从业者我被问过最多的问题就是我现在用的是Hadoop要不要换成Spark这个问题看起来简单但每次我都要先反问一句你说的Hadoop到底是指HDFS加YARN那套底层底座还是指写MapReduce的那个计算引擎因为很多人在讨论“Hadoop vs Spark”的时候并没有意识到这两个名字的对比并不对等。Hadoop更多是一个生态系统的代称Spark则是这个生态里跑得很快的一个计算引擎。先把这层关系理清楚后面的比较才有意义。1.1 Hadoop是一套生态Spark是一个计算引擎如果要用一句话向初学者解释我会这样说Hadoop是几兄弟组成的家族Spark是家族里后来请来的一个干活特别快的外援。HDFS负责存储YARN负责给任务分配资源MapReduce负责真正逐个处理数据三个角色各司其职组成了传统意义上的Hadoop平台。而Spark是另一个分布式计算框架它自己有内存计算、DAG调度、统一API这些本事但你让它跑起来依然可以借助YARN来分配资源、借助HDFS来存数据。所以严格意义上讲我们平时说的“Hadoop vs Spark”真正要比的是“Hadoop生态里的MapReduce引擎”和“Spark引擎”而不是拿整个Hadoop集群去跟Spark这个计算框架掰手腕。网上不少对比文章喜欢把Hadoop和Spark摆成两张对立面的大图左边HDFS、YARN、MapReduce堆成一摞右边Spark单枪匹马占一整块。这种图容易让人产生一个错误印象好像选了Spark就不用管HDFS和YARN了。但实际项目中绝大多数跑Spark的集群依然把HDFS作为底层存储也依然由YARN或者K8s这类资源调度器来分配算力。我自己在帮某团队做架构梳理时就见过他们把Spark任务运行在一套由HDFS和YARN搭好的现有集群上省掉了重新搭存储和调度层的成本运行效果同样不错。1.2 我见过的最普遍误区把HDFS速度等同于Hadoop速度还有一个误解在业务部门之间流传很广Hadoop很慢写一个统计任务要跑半天所以要赶紧用Spark替换掉。碰巧HDFS做小文件存取确实不理想NameNode内存瓶颈、元数据压力也都是真实存在的问题于是很多人把这些现象一股脑归罪于“Hadoop”。但如果你真正去看任务耗时和资源日志会发现瓶颈往往不在HDFS而在MapReduce那个两阶段模型上每个作业的中间结果都要写磁盘下一阶段再重新读一遍。这个过程中存储读写开销被无限放大才是慢的根源。换句话说把计算层从MapReduce换到Spark但继续沿用HDFS存储往往就能获得明显的提速效果存储层并不需要跟着换。这个认知非常重要——很多团队在做技术选型时被“Hadoop慢”这个模糊说法带偏差点连存储层一起推倒重建成本和时间都被成倍放大。看清了这一点我们才能往下比较真正的主角MapReduce和Spark的计算模型。2. 计算模型差异为什么Spark在迭代计算里占尽优势2.1 MapReduce的两阶段模型和它的致命短板MapReduce的思路非常简洁一个作业被拆成Map阶段和Reduce阶段中间通过Shuffle把相同key的数据送到同一个Reducer。每个阶段结束都会把结果写到磁盘下一阶段再从磁盘读取。这个模型最大的优点是稳因为每个阶段都落盘任务失败后可以单独重跑某个阶段不需要把整条链路翻出来重算。但代价也显而易见如果是多轮迭代型计算比如机器学习里的梯度下降、图计算里的PageRank每一轮都要重新从HDFS读取输入、写中间结果、Shuffle、再写结果……一轮轮下来磁盘IO和序列化开销高得吓人。我见过一个比较典型的例子某推荐团队的协同过滤模型训练脚本跑在MapReduce上单次迭代要处理约三个TB的点击日志数据一轮跑下来大概要四十多分钟。整个训练过程需要迭代三十多次于是每次调参都要等上十几个小时研发调试基本处于“提交任务、睡觉、第二天看结果”的状态。后来同一份训练逻辑迁移到Spark只改了一部分API迭代训练的总时长从十几个小时压到了两个多小时。当时我没有做复杂的参数调优仅仅是因为Spark在迭代过程中可以复用内存中的中间结果不需要每轮都落一遍盘。这个差异在单次批处理里可能只是几倍放到迭代场景里就是数量级上的差距。2.2 RDD与DAG调度Spark快在“少落盘、多复用”Spark的核心抽象是RDD它是一个只读的、分区的记录集合。RDD之间的依赖关系构成了DAG有向无环图调度器会把DAG划分成不同的Stage在同一个Stage内部尽量把数据留在内存里做流水线式处理。这就是“快”的机制来源。需要强调一点Spark也不是完全不落盘当内存容不下数据或者遇到Shuffle节点时依然会写入磁盘。但相比MapReduce把每一次中间状态都物化到磁盘Spark在内存充足的条件下能省掉大量磁盘IO。为了讲清楚这点我常用一个生活化类比MapReduce像快递分拣中心每个包裹每到一个环节都要先卸到仓库下一个环节再重新出库Spark则像一条传送带包裹在传送带上流转只有放不下的时候才临时堆到仓库里。同样是分拣一千个包裹前者在仓库和传送带之间来回折腾后者自然快得多。这也是为什么很多团队在第一次把Hive on MapReduce切换到Hive on Spark后会惊讶地发现同样的SQL跑得快了很多——SQL逻辑没变数据没变变的只是中间结果的流转方式。2.3 一个对比清单不同场景下两者的表现差异下面这张表是我在实际项目里比较常见的耗时感受具体数字会随着集群规模和数据量浮动但相对关系很有参考价值使用场景MapReduce经验表现Spark经验表现差异来源单次全量离线批处理5小时约1.5-2小时落盘次数减少IO大幅下降多次迭代计算十几小时两三个小时迭代复用内存中RDD优势明显数据量特别大且内存吃紧稳定但慢可能频繁OOM或溢写Spark对内存更敏感需要调优简单ETL清洗差距不大略快主要差异在启动和调度开销别把这张表当成绝对真理它只是一张方向性参考。比如在内存不足、磁盘压力大的集群上Spark的优势会被明显压缩甚至会因为频繁GC和溢写导致性能反而不如MapReduce稳定。这也是很多人说“Spark吃内存、小集群别硬上”的根本原因。选型时不看集群实际资源状况只拿“Spark比Hadoop快”这句话做决策是很危险的做法。3. 内存管理、容错与调优从几次翻车事故看真实差异3.1 Spark执行内存和存储内存是怎么分的OOM又是怎么来的Spark的内存管理比MapReduce复杂得多。在统一内存管理机制下堆内存被划分成执行内存和存储内存执行内存给Shuffle、Join、Aggregation这类计算用存储内存给缓存RDD、广播变量用两者之间存在软边界可以互相抢占。听起来很灵活但到了实际集群上如果没人真正理解这套机制踩坑几乎是必然的。我印象很深的一次翻车事故是某数据平台组把一批Hive on MapReduce作业切到Spark SQL后每个Executor分配了8GB内存任务一跑就被OOM中断日志里频繁出现“java.lang.OutOfMemoryError: Java heap space”。排查后发现他们只是把参数从Hive那边的模板原封不动搬了过来完全没考虑Spark执行内存默认只占堆内存的0.6也就是说8GB里实际能用于计算的只有不到5GB。而Spark SQL里一个大表广播Join很容易就把这块打满。后来我们把Executor内存调到12GB把spark.memory.fraction调整到0.7同时开了堆外内存任务才算稳定下来。这类教训用一句话总结就是Spark的快是建立在充足内存之上的内存参数的调整绝不能照抄某个现成模板而要根据数据量和计算特征重新估算。很多团队在迁移初期满怀期待结果被OOM折腾几个星期就误以为Spark“不稳定”其实是参数没有跟着场景走。3.2 同样是节点挂了两者的恢复策略完全不同容错机制也是很多人忽略的差异点。MapReduce的容错靠的是阶段落盘如果某个Task失败调度器会重新启动一个Task从HDFS读取对应分片重算即可。Spark的RDD血缘机制则允许只重算失败的那一部分分区理论上恢复粒度更细、更快。但前提是相关的依赖RDD还在内存或缓存里。如果某些上游RDD早就被LRU淘汰了一旦失败需要回溯到源头重新计算这时候启动恢复可能会比MapReduce还要慢。所以在生产环境里我一般建议对重要的、会被反复引用的数据用persist配合StorageLevel选MEMORY_AND_DISK不要只图省内存选MEMORY_ONLY。曾经某团队在跑实时特征计算任务时只做了内存缓存结果Executor节点一重建整个上游的几百个RDD全被释放触发一连串重算把集群IO打得几乎不可用。后来改成MEMORY_AND_DISK策略加上Checkpoint机制才解决了恢复链过长的隐患。这种细节很少出现在官方文档的对比章节里但它在生产环境中的重要性往往比理论性能指标还要高。3.3 资源参数和并行度两个框架调优思路的差别MapReduce调优的核心通常围绕mapreduce.map.memory.mb、mapreduce.reduce.memory.mb、mapreduce.reduce.shuffle.parallelcopies这几个参数调整思路相对简单跟着阶段走就行。Spark的调优则复杂得多常见参数包括num-executors、executor-cores、executor-memory、spark.sql.shuffle.partitions、spark.default.parallelism、spark.memory.fraction、spark.shuffle.file.buffer等。每个参数之间还有关联比如Executor数量和每个Executor的内存是成反比的设得不好就会出现“Executor多但个个内存小任务依然OOM”的尴尬。实际工作中我建议先把并行度拿捏准Spark SQL的Shuffle分区数默认是200对于单次处理几十GB数据的任务来说通常偏小容易出现单个分区数据量太大导致的倾斜。把spark.sql.shuffle.partitions调到数据量除以目标分区大小再乘一个系数往往比堆一堆Executor内存更有效。MapReduce那边则更多是设置好Mapper和Reducer数量尽量让每个任务量落在合理区间。这些差异的背后本质上是两套截然不同的调度哲学MapReduce按阶段组织资源Spark按DAG流水线组织资源。理解了这个区别才能在不同场景里做出更合理的调整。4. 生态与运维你选的不只是框架而是整个数据平台的底座4.1 Spark SQL、Streaming、MLlib真的好用吗——我的实际使用感受很多团队选择Spark是被它“一站式”的生态吸引批处理用Spark SQL流处理用Spark Streaming或Structured Streaming机器学习用MLlib图计算用GraphX一套API通吃。实际用下来我的感受是有利有弊。Spark SQL确实比写MapReduce程序友好太多SQL化的分析逻辑让业务分析师都能上手我见过不少原本只会写Hive QL的同事在切换到Spark SQL后几乎无缝衔接。Structured Streaming在微批模式下比较成熟但要做真正的毫秒级事件流处理还是得靠专职流处理引擎Spark的流处理更像“准实时”在延迟容忍度较高的场景里完全够用但别把它神化。MLlib则适合调用现成算法做离线训练真要跑到生产级的深度学习还是得配合其他专用框架。换句话说Spark生态在“批处理加简单的流处理加常规机器学习”这个范围内足够好用但如果你想让它承担所有场景、替代所有专用组件那是在给自己埋坑。选型时可以拥抱Spark的一体化但要对每个子模块的能力边界保持清醒。4.2 成本、运维、团队技术栈这些软因素往往比性能更致命讲一个比较扎心的现实很多选型项目最后放弃Spark不是因为Spark不够快而是因为团队没有人能把它玩稳。Spark的参数体系非常灵活同时也意味着踩坑空间巨大一个默认分区数、一段不合理的缓存策略就能让性能从“快好几倍”跌回“和MapReduce差不多”。相反MapReduce虽然慢但它的行为模式直白问题排查路径清晰运维团队不需要理解太多内存模型就能维护下去。另一块是成本。Spark对内存的胃口明显更大同样跑一批离线任务内存开销往往比跑MapReduce高出一截。私有化部署的集群如果机器配置有限扩容不是加几台机器那么简单——网络、磁盘、内存都要配套。某金融行业的平台团队跟我聊过他们明知道Spark在某个报表场景能提速三倍以上但因为监管环境对私有化部署要求很高新增带大内存的机器需要走很长的预算和审批流程最终选择继续用Hive跑批只在局部把部分任务迁到Spark。这个例子说明选择哪个框架从来不只是技术问题成本模型和运维能力才是真正的胜负手。4.3 什么时候该用Hive on Spark、什么时候直接用Spark还有一个经常被忽略的中间选项用Hive作为SQL层底下的执行引擎从MapReduce换成Spark也就是所谓的Hive on Spark。这个组合能让团队继续使用熟悉的Hive表结构、元数据管理和HQL语句同时享受Spark的计算速度迁移成本比把所有任务都重写成Spark作业要低得多。对于以SQL分析为主、不涉及复杂自定义算子的团队我比较推荐这个折中方案这也是很多大团队在演进过程中实际采用的路径。反过来说如果业务中有大量需要精细控制的计算逻辑、复杂的UDF、流批一体需求或者希望用DataFrame API做代码级别的优化那就应该直接上手Spark项目。这里的判断标准不是“哪个引擎更强”而是“你的团队更擅长用哪种方式表达业务逻辑”。工具链的统一性也很重要——如果团队一边写Hive QL一边又要维护一套Spark应用长期来看维护负担会翻倍这时候做一次彻底切换反而更省心。5. 结合项目实践的选型路线什么时候拥抱Spark什么时候坚守Hadoop5.1 按业务场景画一条分界线根据我多年的落地经验可以画一条比较粗的分界线数据量超大、作业运行时间长、但迭代轮次少、对实时性要求不高的场景比如T1全量数仓构建、离线报表Hadoop的MapReduce或Hive仍然能稳定扛住。如果现有系统已经运行得非常稳定不必为了追新而折腾这种“不动”本身就是一种省成本的选择。需要多轮迭代、交互式查询、分钟级延迟要求的场景比如推荐模型训练、数据探索、临时Ad Hoc分析Spark几乎是更优选。同时有批处理和准实时流处理需求、希望统一入口的团队Spark的Structured Streaming可以大大降低架构复杂度。对延迟要求达到毫秒级、需要严格事件时间处理的场景就别拿Spark硬扛了建议考虑专职流处理引擎或让Spark与流引擎各司其职。这条分界线不是死的它更多代表一种思维框架先看业务的计算模式再看团队的技术底座最后才去对比两个框架的API和性能数据。很多选型报告之所以“看起来很专业、落不了地”就是因为跳过了中间层直接拿引擎特性去套业务结果自然失真。5.2 一个“先用Hadoop跑批、再上Spark提速”的过渡案例我参与过某公司一个比较典型的过渡项目。早期他们的数仓体系完全建立在Hive on MapReduce上几十张宽表每天凌晨调度作业链路长的时候从源头数据落地到下游出报表要到第二天早上十点多才能跑完。业务部门抱怨数据时效性太差但没有一个人敢直接喊出“全量迁Spark”因为风险太大、改造量也不小。我们采取的路线是分步切流。第一周先选择两类最耗时的作业一类是全量表更新一类是多轮Join的报表任务把它们从Hive on MapReduce切到Hive on Spark改的只是执行引擎配置SQL几乎不用动。第二周观察到运行时间从五小时缩到约两小时集群资源和稳定性都没有异常于是继续扩大范围。第三周再把部分需要做复杂特征加工的作业重写为Spark作业配合DataFrame API做列裁剪和过滤下推。整个过程大概花了一个月集群整体资源利用率反而下降了因为任务跑得快占用的时间窗口就短了留给别的任务的空间反而更多。这个案例我想说明一个很实际的点Hadoop和Spark的迁移不一定是“推翻重来”的二选一。在HDFS和YARN之上Spark可以无缝接入完全能把改造做成一个渐进、可回滚的过程。很多团队迟迟不动手是害怕“全量迁移”的工程量但实际上谁也没有规定必须一步到位。5.3 个人实际使用中的几点经验和避坑建议最后聊几点我在真实环境里反复验证过的经验。第一不要迷信默认配置。Spark的不少默认值是为通用场景设计的比如shuffle分区数200在几百GB的数据集上可能完全不够一定要按实际数据规模去调整。MapReduce的默认内存配置在小集群上也经常偏小跑大任务前先看历史任务的平均资源消耗比自己拍脑袋设参数靠谱。第二Shuffle是最大的敌人。不管是MapReduce还是SparkShuffle阶段都是最容易出问题的地方数据倾斜、小文件爆炸、网络抖动都会在这里集中爆发。排查问题的时候优先看Shuffle读写量、任务倾斜分布别一上来就怀疑框架本身。我见过不少线上事故最终定位都是某个Join键分布极度不均导致的跟用哪个引擎关系不大。第三别让“对比”绑架了架构。很多团队在选型时非要分出个高下然后整个平台只All in一个框架。真实业务往往是混合的批处理、流处理、迭代计算、即席查询各有各的合适工具。Hadoop生态里的存储层和调度层在很多场景下依然是Spark的最佳搭档这才是两者关系的正解。如果能让Hadoop和Spark在同一个平台上协同工作让MapReduce继续负责足够稳定的大批量粗粒度计算让Spark承担需要速度和迭代的场景这通常比在论坛上争论“谁取代谁”更有价值。数据平台的建设不是选美最终目标始终是让业务在合适的时间拿到合适的数据。

相关新闻

5 分钟快速上手 InternVL2.5-26B-MPO-AWQ:LMDeploy 推理环境搭建与第一条图片问答

5 分钟快速上手 InternVL2.5-26B-MPO-AWQ:LMDeploy 推理环境搭建与第一条图片问答

【免费下载链接】InternVL2_5-26B-MPO-AWQ 项目地址: https://ai.gitcode.com/OpenGVLab/InternVL2_5-26B-MPO-AWQ 点击查看 免费下载 InternVL2.5-26B-MPO-AWQ 是上海 AI Lab 开源的多模态大模型 InternVL2.5-26B-MPO 的 AWQ 4-bit 量化版本,配合 LMDe…

2026/10/16 7:00:59 阅读更多 →
Windows下claude-code报错无法识别cmdlet的排查与解决

Windows下claude-code报错无法识别cmdlet的排查与解决

遇到“无法将f:\nvm\nodejs/node_modules/anthropic-ai/claude-code/bin/claude.exe识别为 cmdlet、函数、脚本文件或可运行程序的名称”这个报错,说明你已经在Windows上用nvm装好了Node.js,也把anthropic-ai/claude-code这个npm包全局安装上了&#xff…

2026/10/16 7:00:59 阅读更多 →
Claude Code Agent 开发:告别上下文爆炸,用按需技能加载替代巨型系统提示

Claude Code Agent 开发:告别上下文爆炸,用按需技能加载替代巨型系统提示

做 Agent 开发的人大概都经历过这样一个阶段:为了让模型"懂行",我们把能想到的领域知识全部塞进系统提示。我第一次做 Claude Code Agent 的时候也是这样,把公司的计费规则、售后流程、常见问题、内部规范整理成一份八千多字的指引…

2026/10/16 7:00:59 阅读更多 →

最新新闻

Claude Opus 4.6与GPT-5.3同日发布:AI编程如何重塑前端开发

Claude Opus 4.6与GPT-5.3同日发布:AI编程如何重塑前端开发

凌晨两点多,手机连着震了好几下。我眯着眼扫了一眼屏幕,差点以为看错了——Claude Opus 4.6 和 GPT-5.3 居然选在同一天凌晨发布。这两个版本在各自的序列里都算是“大版本迭代”,虽然我早就知道两家处于你追我赶的节奏,但这种“同…

2026/10/16 7:50:14 阅读更多 →
储能电站特性分布建模与多时间尺度源储荷协调调度策略

储能电站特性分布建模与多时间尺度源储荷协调调度策略

最近在做一个储能电站并网调度的项目,让我最头疼的并不是机组组合,而是储能电站内部的“状态分化”。传统调度模型习惯把整个电站当成一个大电池,SOC直接用平均值替代,调度员看着总SOC觉得还有富余,实际上电站里几十个…

2026/10/16 7:50:14 阅读更多 →
C++二叉搜索树实战:从插入删除到平衡优化

C++二叉搜索树实战:从插入删除到平衡优化

1. 从一条查询开始:为什么非要“二叉搜索树”拿到“C 二叉搜索树”这个题目,我的第一反应不是节点、指针、递归这些语法细节,而是一个很朴素的问题:在 100 万个数字里找 1 个数,怎么找最快?答案是排序后二分…

2026/10/16 7:50:14 阅读更多 →
Qt雷达图余晖扫描效果实现与实时渲染优化

Qt雷达图余晖扫描效果实现与实时渲染优化

简介:本资源是一套基于Qt 5.9实现雷达图(卫星图)与余晖扫描动态效果的完整C工程,面向具备Qt基础的GUI开发学习者与嵌入式可视化项目实践者,解决多维数据动态展示、雷达风格交互图表开发等实际需求。压缩包共53个文件&a…

2026/10/16 7:50:14 阅读更多 →
二叉搜索树核心原理与工程实践:从插入删除到平衡演进

二叉搜索树核心原理与工程实践:从插入删除到平衡演进

1. 二叉搜索树:数据结构的"折中方案"1.1 先搞清楚它到底是什么二叉搜索树,英文叫 Binary Search Tree,缩写 BST。这个数据结构我估计大家在数据结构课上都听过,但真正能一口气写对、写稳的人真不多。我面试过不少候选人…

2026/10/16 7:50:14 阅读更多 →
两串电池包被动均衡方案:MP2642GR-Z与ATmega324PA联合设计与实现

两串电池包被动均衡方案:MP2642GR-Z与ATmega324PA联合设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 7:49:14 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →