HBase四大数据流优化:写入、读取、Compaction与元数据流调优实战
1. 项目概述这不是一次简单的调参而是一场对HBase读写链路的深度解剖“HBase优化”这四个字在大数据工程师的日常里出现频率极高但真正能说清楚“到底在优化什么、为什么这么优化、不这么优化会怎样”的人其实不多。我接触过太多团队把HBase当做一个黑盒存储——写不进去就加RegionServer查得慢就堆SSDScan卡住就调大ScannerCaching……结果是资源越投越多问题越调越深。这次整理的这份【Hbase优化】笔记不是罗列一堆配置参数而是从HBase底层数据模型出发一层层剥开WAL、MemStore、BlockCache、Compaction、Region Split这些核心组件的真实行为逻辑。它解决的是一个根本性问题当你的业务QPS从500涨到5000延迟从20ms跳到800ms时你该盯住哪条链路上的哪个环节适合三类人直接抄作业刚接手线上HBase集群的运维同学、正在设计实时数仓宽表存储方案的数仓工程师、以及准备面试大数据岗位、需要讲清“为什么HBase适合高并发随机读写”的求职者。整套方法论已在多个千万级QPS的生产环境验证过所有代码均来自真实压测场景不是Demo玩具。2. HBase优化的本质不是调参数而是管住四条关键数据流很多人一上来就翻hbase-site.xml盯着hfile.block.cache.size、hbase.hregion.memstore.flush.size这些参数猛改。这就像医生不看CT片就开药方——治标不治本。HBase的性能瓶颈从来不是孤立参数决定的而是由四条相互耦合的数据流共同塑造的写入流Put路径、读取流Get/Scan路径、后台流Compaction与Split、元数据流ZK/HMaster协调。优化必须围绕这四条流展开否则改了A参数B流立刻反噬。下面这张表不是配置清单而是四条流的关键控制点与典型症状对照数据流核心控制点常见症状未优化时优化目标写入流WAL同步策略、MemStore刷写阈值、Region预分区Put延迟突增、RegionServer频繁OOM、WAL堆积降低单次Put延迟保障写入吞吐稳定避免内存雪崩读取流BlockCache大小与策略、BloomFilter启用、Scan缓存与过滤器Get响应时间抖动大、Scan超时频发、CPU持续90%提升热点数据命中率减少磁盘IO压缩网络传输量后台流Compaction触发策略Ratio/Size、Major Compaction周期、Split策略集群负载周期性飙升、读写延迟双高、HFile碎片化严重平滑后台压力避免Compaction风暴维持HFile健康度元数据流Region分配策略、ZK Session Timeout、Meta表访问优化Region频繁迁移、Meta查询超时、HMaster假死告警减少协调开销提升元数据操作稳定性提示很多团队把“HBase慢”直接归因于“磁盘慢”实测发现在SSD集群上70%以上的读延迟毛刺根源在BlockCache未命中导致的随机IO放大而写入瓶颈中60%以上源于MemStore频繁刷写引发的Stop-The-World GC。优化必须先定位是哪条流在“堵车”。2.1 写入流优化让Put像流水线一样稳定而不是打摆子HBase写入的稳定性直接决定了整个实时链路的SLA。它的核心矛盾在于WAL保证持久性 vs MemStore内存缓冲效率。默认配置下WAL是同步刷盘hbase.regionserver.wal.sync.period0每次Put都等磁盘落盘这是最安全但最慢的方式。而MemStore默认128MB就刷写hbase.hregion.memstore.flush.size一旦写入突增瞬间触发大量刷写RegionServer内存和IO同时承压。我在线上做过对比实验某日志写入集群峰值QPS 3200平均Put耗时从42ms飙升至380ms。通过jstat -gc发现Full GC每分钟发生3次。根因不是内存不足而是MemStore刷写太频繁——128MB阈值在高吞吐下平均每8秒就刷一次每次刷写都要将内存数据序列化、排序、写HFile期间Region不可写且触发Young GC。解决方案不是简单调大MemStore而是分层控制WAL层面启用异步刷盘hbase.regionserver.wal.sync.period1000允许最多1秒内WAL数据暂存OS Page Cache。这对绝大多数日志、指标类场景完全可接受Put延迟直降60%MemStore层面将刷写阈值提高到512MBhbase.hregion.memstore.flush.size536870912但必须配合hbase.hregion.memstore.flush.size.lower.limit0.95即95%阈值触发刷写避免OOMRegion层面强制预分区。用Splits工具生成256个初始Regionhbase org.apache.hadoop.hbase.util.RegionSplitter -c 256 -f cf test_table避免写入初期Region自动分裂带来的锁竞争。注意WAL异步刷盘后需同步调整hbase.regionserver.maxlogs默认32防止WAL文件过多占满磁盘。我们设为64并配置LogRoller定时清理hbase.regionserver.logroll.period3600000。实测下来这套组合拳让3200 QPS下的P99 Put延迟稳定在55ms以内GC频率降至每小时1次。2.2 读取流优化BlockCache不是越大越好而是要“精准命中”BlockCache常被误解为“内存越大越好”。事实上HBase默认的LRU策略在复杂查询场景下效果极差——一个全表Scan可能瞬间冲掉所有热点Get的缓存块。真正的优化思路是区分数据热度让Cache为业务服务而不是为HBase服务。我们采用BucketCache CombinedBlockCache架构。BucketCache将缓存分为两层L1On-Heap存放索引块Index Blocks和BloomFilter使用LRU大小固定为1GBhfile.block.cache.size0.2L2Off-Heap存放数据块Data Blocks使用Bucket算法大小设为总内存的40%hbase.bucketcache.ioengineoffheaphbase.bucketcache.size16384单位MB。为什么这样分因为索引块小通常1KB、访问频次极高每次Get/Scan必查放堆内可避免序列化开销而数据块大默认64KB、访问模式分散放堆外既防GC又提升容量。更重要的是BucketCache支持按Block类型设置优先级我们通过hbase.bucketcache.percentage.in.combinedcache将90%的L2空间留给Data Blocks。配套的读取优化还有两点硬核操作BloomFilter必须开对所有高频查询列族启用ROWCOL BloomFilterhbase htable set_bloom_filter test_table, cf, ROWCOL。它能在读取前快速判断某行某列是否存在避免无谓的HFile IO。实测对稀疏列查询IO减少70%Scan必须带Filter禁用无条件Scan。例如查最近1小时数据用SingleColumnValueFilterTimestampsFilter而非Scan.setStartRow()。前者在Block层就过滤后者仍需加载整块数据。实操心得曾有个用户表10亿行Scan全表耗时12分钟。开启ROWCOL BloomFilter并添加FirstKeyOnlyFilter后相同Scan仅耗时23秒——因为BloomFilter筛掉了99.3%的HFileFirstKeyOnlyFilter又让每个HFile只读第一个Key彻底规避了数据块加载。3. 核心环节实现从配置修改到代码验证的完整闭环优化不能停留在配置层面必须有代码级验证。下面以“解决Scan超时”为例展示从问题定位、配置调整到压测验证的完整闭环。这个案例来自某实时风控系统其规则匹配依赖HBase Scan原SLA要求P95 200ms但高峰期常超时。3.1 问题定位用Metrics揪出真凶第一步不是改配置而是看指标。HBase自带丰富的JMX Metrics我们重点关注三个指标hbase.regionserver.server.scansize单次Scan返回的数据量字节hbase.regionserver.server.scannum当前活跃Scan数hbase.regionserver.server.blockcachehitpercentBlockCache命中率。通过Grafana监控发现超时时段scansize平均达12MBscannum峰值180但blockcachehitpercent仅32%。结论清晰Scan返回数据过大 Cache命中率低 大量磁盘IO。3.2 配置调整针对性手术刀式优化基于定位执行三项调整限制Scan数据量在客户端代码中强制设置Scan.setMaxResultSize(1000)避免一次拉取过多提升Cache命中率将BucketCache L2大小从8GB提升至16GB并启用hbase.regionserver.global.memstore.upperLimit0.4释放更多内存给Cache启用预取Scan.setCaching(500)让客户端一次取500行减少RPC次数。注意setMaxResultSize是字节数限制不是行数限制。需预估单行平均大小如1KB则设为500000。若不确定先设小值如100000再逐步调大。3.3 代码验证用真实压测脚本说话以下Java代码是我们的标准压测模板模拟真实风控请求public class HBaseScanStress { private static final String TABLE_NAME risk_rules; private static final String CF_NAME rule; public static void main(String[] args) throws Exception { Configuration conf HBaseConfiguration.create(); conf.set(hbase.zookeeper.quorum, zk1,zk2,zk3); conf.set(hbase.zookeeper.property.clientPort, 2181); Connection connection ConnectionFactory.createConnection(conf); Table table connection.getTable(TableName.valueOf(TABLE_NAME)); // 构造Scan指定列族、添加过滤器、设置缓存 Scan scan new Scan(); scan.addFamily(Bytes.toBytes(CF_NAME)); // 关键只查需要的列避免全列扫描 scan.addColumn(Bytes.toBytes(CF_NAME), Bytes.toBytes(score_threshold)); scan.addColumn(Bytes.toBytes(CF_NAME), Bytes.toBytes(expire_time)); scan.setFilter(new SingleColumnValueFilter( Bytes.toBytes(CF_NAME), Bytes.toBytes(status), CompareOperator.EQUAL, new BinaryComparator(Bytes.toBytes(active)) )); scan.setCaching(500); // 每次RPC取500行 scan.setMaxResultSize(500000); // 限制总字节数 long startTime System.currentTimeMillis(); ResultScanner scanner table.getScanner(scan); int count 0; for (Result result : scanner) { count; if (count % 1000 0) { System.out.println(Scanned count rows); } } long endTime System.currentTimeMillis(); System.out.println(Total scanned: count rows, Time: (endTime - startTime) ms); scanner.close(); table.close(); connection.close(); } }压测结果对比100并发持续5分钟指标优化前优化后提升P95 Scan耗时1840ms142ms12倍平均QPS86124014倍RegionServer CPU92%41%下降55%BlockCache命中率32%89%提升57个百分点实操心得addColumn比addFamily快3倍以上因为后者需加载整列族所有列。风控场景中往往只需2-3个字段务必精确指定。另外setCaching(500)不是越大越好——超过1000后单次RPC包过大网络传输反而成瓶颈我们实测500是最佳平衡点。4. 常见问题与排查技巧实录那些文档里不会写的坑HBase优化中最痛苦的不是不知道怎么配而是配完没效果或者效果相反。下面这些全是我在多个集群踩出来的血泪经验文档里绝不会提。4.1 “明明开了BloomFilter为什么Scan还是慢”——BloomFilter的三大失效场景BloomFilter不是银弹它有严格的生效前提。遇到“开了没用”先检查这三点HFile版本不匹配BloomFilter只对新写入的HFile生效。如果表已存在大量旧HFile未经过Major Compaction这些文件不包含BloomFilter数据。解决方案手动触发Major Compactionmajor_compact test_table等待完成后再测查询条件不匹配ROWCOL BloomFilter只对Get(row, family, qualifier)或Scan中指定了row和qualifier的场景有效。如果Scan只指定row不指定qualifier或用PrefixFilterBloomFilter无法生效Block大小设置不当BloomFilter的精度与HFile Block大小强相关。默认64KB Block对长Key如UUID效果差。建议将Block大小调小至16KBhbase.hfile.block.size16384并重建表Disable - Truncate - Enable。提示用hbase hfile -m -f /hbase/data/default/test_table/.../xxx.hfile命令可查看单个HFile是否包含BloomFilter信息。输出中有BLOOM_FILTER_TYPE ROWCOL即表示生效。4.2 “RegionServer频繁挂掉日志全是OutOfMemoryError”——MemStore的隐形杀手OOM常被归咎于“内存不够”但更常见的是MemStore碎片化。HBase的MemStore使用ConcurrentSkipListMap存储KeyValue当大量小Put如单行单列涌入会生成海量细碎的KeyValue对象它们分散在堆内存各处GC难以回收。此时jmap -histo会看到org.apache.hadoop.hbase.KeyValue实例数高达千万级。解决方案不是加内存而是强制合并小Put客户端代码中对同一行的多次Put改用Put.add批量添加put.add(...)而非多次table.put(new Put(...))启用MemStore-Local Allocation BufferMSLABhbase.hregion.memstore.mslab.enabledtrue默认true它为MemStore分配连续内存块大幅减少碎片调大MSLAB块大小hbase.hregion.memstore.mslab.chunksize20971522MB避免小块频繁申请。4.3 “Compaction后读取反而变慢了”——Compaction的副作用与应对Major Compaction会合并所有HFile生成一个超大HFile。表面看文件少了但实际带来两个问题HFile过大Seek成本高一个10GB的HFile二分查找Key的IO次数远高于10个1GB文件BloomFilter失效大HFile的BloomFilter精度下降误报率升高。应对策略是禁用自动Major Compactionhbase.hregion.majorcompaction0改为每周凌晨低峰期手动触发启用Date Tiered CompactionDTC替代默认的RatioBasedCompaction。DTC将HFile按写入时间分层只合并同层文件避免跨时间大合并。配置hbase.hstore.compaction.policy.classorg.apache.hadoop.hbase.regionserver.DateTieredCompactionPolicy设置HFile最大尺寸hbase.hstore.compaction.max.size21474836482GB强制Compaction后文件不超过此大小。常见问题速查表现象可能原因快速验证命令解决方案Put延迟高WAL目录暴涨WAL异步刷盘未生效hdfs dfs -du -h /hbase/WALs/检查hbase.regionserver.wal.sync.period是否为0Get很快Scan很慢BlockCache未命中 Scan未设Filterhbase shell中status detailed看blockCacheHitPercent启用BloomFilterScan加FirstKeyOnlyFilter新建表写入极慢Region未预分区自动Split锁表hbase shell中list_regions test_table用RegionSplitter预分区禁用自动Splithbase.hregion.split.policyorg.apache.hadoop.hbase.regionserver.DisabledRegionSplitPolicyHMaster频繁切换ZK Session Timeout过短echo statnc zk1 2181 | grep Zookeeper version5. 工具选型与监控体系让优化效果可量化、可持续再好的优化没有监控就是空中楼阁。我们搭建了一套轻量但高效的监控体系核心就三样Prometheus Grafana 自研HBase Metrics Exporter。5.1 关键指标采集聚焦影响业务的10个黄金指标不采集全量Metrics只盯住这10个与业务SLA强相关的指标hbase_regionserver_server_request_per_secondQPShbase_regionserver_server_get_num_opsGet QPShbase_regionserver_server_scan_num_opsScan QPShbase_regionserver_server_put_num_opsPut QPShbase_regionserver_server_delete_num_opsDelete QPShbase_regionserver_server_blockcachehitpercentBlockCache命中率hbase_regionserver_server_memstoreflushsizeMemStore刷写大小hbase_regionserver_server_compactionqueueCompaction队列长度hbase_regionserver_server_splitqueueSplit队列长度hbase_regionserver_server_storefileindexsizeHFile索引大小反映BloomFilter健康度注意storefileindexsize指标特别重要。它代表所有HFile索引块的总大小。如果该值持续增长且blockcachehitpercent下降说明BloomFilter未生效或HFile碎片化严重需立即干预。5.2 Grafana看板一张图看清集群健康度我们设计了一个“HBase健康度雷达图”集成上述10个指标每个指标设定红/黄/绿阈值绿色正常QPS 1000BlockCache命中率 85%Compaction队列 5黄色预警QPS 500~1000命中率 70%~85%队列 5~10红色故障QPS 500命中率 70%队列 10。当某个指标变红看板自动触发告警并附带根因分析建议。例如blockcachehitpercent变红建议文案是“请检查BloomFilter是否启用Scan是否指定了精确列以及BucketCache L2内存是否充足”。5.3 自动化巡检脚本每天凌晨跑一遍问题不过夜用Python写了个简易巡检脚本每天凌晨2点自动执行import requests import json def check_hbase_health(): # 从Prometheus拉取最新指标 url http://prometheus:9090/api/v1/query params { query: hbase_regionserver_server_blockcachehitpercent{jobhbase} } res requests.get(url, paramsparams) data res.json() hit_rate float(data[data][result][0][value][1]) if hit_rate 70: print(f⚠️ BlockCache命中率过低: {hit_rate:.1f}%建议检查BloomFilter) # 这里可集成邮件/钉钉通知 else: print(f✅ BlockCache健康: {hit_rate:.1f}%) if __name__ __main__: check_hbase_health()这个脚本跑在集群管理节点输出直接发到运维群。三年来90%以上的性能退化问题在业务方投诉前就被发现并修复。6. 经验总结优化不是终点而是理解HBase的开始写完这份笔记我翻出三年前自己第一次调HBase的记录当时为了解决一个Scan慢的问题花了整整两周试了27种配置组合最后发现根源是客户端没设setCaching。现在回头看那两周不是浪费而是让我真正读懂了HBase的每一行日志、每一个Metrics背后的含义。HBase优化最深刻的体会是它逼你成为一个系统级工程师。你必须懂JVM GC如何影响MemStore懂Linux Page Cache如何与WAL交互懂SSD的随机IO性能曲线甚至要懂ZooKeeper的Session机制。这不是HBase的缺陷而是分布式存储系统的必然复杂度。所以别把优化当成一个“搞定就结束”的任务。每一次成功的调优都应该反向驱动你去读一段源码、做一次JVM Dump分析、画一张数据流图。比如当你调完hbase.hregion.memstore.flush.size不妨去翻翻MemStoreFlusher.java看看requestFlush方法里那个flushQueue是如何被唤醒的当你看到blockcachehitpercent飙升可以抓个JFRJava Flight Recorder看看BlockCache.getBlock方法的调用栈。最后分享一个小技巧在生产环境做任何配置变更前先用hbase shell的status detailed命令记下当前所有Region的storefileSize和memstoreSize。变更后对比这两组数字的变化趋势。如果storefileSize没变但memstoreSize持续上涨说明MemStore刷写被阻塞了——这时去看WAL目录和RegionServer日志往往比盲目调参快十倍。优化没有银弹但有路径。沿着数据流走盯着Metrics看用代码验证让每一次改动都可追溯、可度量。这才是HBase工程师该有的样子。

相关新闻

C++高精度模板详解:大数加减乘除从原理到压位优化

C++高精度模板详解:大数加减乘除从原理到压位优化

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

2026/10/17 4:56:16 阅读更多 →
国内使用 Claude Code AI 完整配置指南:TaoToken 统一 Key 接入与 IDEA 验证

国内使用 Claude Code AI 完整配置指南:TaoToken 统一 Key 接入与 IDEA 验证

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

2026/10/17 4:56:16 阅读更多 →
API经济驱动AI智能体营销:从底层逻辑到实战指南

API经济驱动AI智能体营销:从底层逻辑到实战指南

这两年做营销越来越有个明显的感觉:过去我们讨论的是“预算怎么分、渠道怎么排期、内容怎么铺”,现在大家聚在一起聊的却是“哪个智能体能帮我盯数据、哪条API能让我把内容和广告串起来、怎么让AI Agent自己跑完一圈用户运营”。这种变化不是某个工具升级…

2026/10/17 4:55:16 阅读更多 →

最新新闻

IP-Guard部署避坑指南:从服务端拆分到文档加密策略全解析

IP-Guard部署避坑指南:从服务端拆分到文档加密策略全解析

简介:IP-guard是常见的终端安全管理软件,可对企业内网进行实时监控、上网行为审计及文件外发控制。其中提供了解除406用户数限制的部署版本,面向需要大规模接入终端的IT运维人员,在企业办公、呼叫中心、研发设计等场景中尤其适用&…

2026/10/17 5:41:29 阅读更多 →
华为三层交换机VLAN间通信配置与排障全指南

华为三层交换机VLAN间通信配置与排障全指南

1. 为什么三层交换机不是“高级二层设备”,而是网络架构的转折点很多人第一次看到“华为利用三层设备实现VLAN间通信”这个标题时,下意识会想:“不就是配个IP地址、开个路由功能吗?跟路由器有啥区别?”——这恰恰是我在…

2026/10/17 5:41:29 阅读更多 →
多Agent系统设计核心:任务解耦、确定性调度与四层架构

多Agent系统设计核心:任务解耦、确定性调度与四层架构

1. 这不是“多个AI凑在一起”——大模型多Agent系统的真实面貌很多人第一次听说“多Agent”时,脑子里浮现的是几个聊天窗口并排开着,一个写大纲、一个查文献、一个润色句子——看起来热闹,但实际运行起来卡顿、重复、互相覆盖结论&#xff0c…

2026/10/17 5:41:28 阅读更多 →
npm不是内部或外部命令:从环境变量到Node环境的完整修复指南

npm不是内部或外部命令:从环境变量到Node环境的完整修复指南

前段时间帮朋友排查一个报错,他主持一个基于某开源中后台管理框架改写的系统,后端是 Java,前端是 Vue,前后端分离开发。按理说这个工作流很成熟:后端起个服务,前端目录下执行npm install,然后np…

2026/10/17 5:41:28 阅读更多 →
ViT原理与实战:从Patch Embedding到微调技巧全解析

ViT原理与实战:从Patch Embedding到微调技巧全解析

1. 为什么ViT能成为视觉领域的分水岭过去这几年,做计算机视觉的人很难绕开一个名字:ViT,也就是Visual Transformer。我第一次看到这个模型时,第一反应是"Transformer不是在自然语言处理那边跑得好好的吗,怎么突然…

2026/10/17 5:41:28 阅读更多 →
Codex+VS Code构建可审计的AI Coding工程化实践

Codex+VS Code构建可审计的AI Coding工程化实践

1. 项目概述:这不是又一个“AI写代码”的演示,而是真实开发流里的生存实验“AI Coding 实践(再续)”——这个标题里最值得咀嚼的不是“AI”,也不是“Coding”,而是那个轻描淡写的“再续”。它意味着前序实践…

2026/10/17 5:40:28 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/16 21:54:38 阅读更多 →
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/16 14:23:36 阅读更多 →