hive 成本优化器 (CBO - Cost-Based Optimizer) 原理

Spark SQL Catalyst CBO 为了把逻辑计划转换为可以交付执行的物理计划,Spark SQL 物理优化阶段包含两个环节:优化 Spark Plan 和生成 Physical Plan。在优化 Spark Plan 这个环节,Catalyst 基于既定的策略把逻辑计划平行映射为 Spark Plan。策略很多,我们重点掌握 JoinSelection 策略就可以,它被用来在运行时选择最佳的 Join 策略。 阅读详情

Hive 的 成本优化器(CBO, Cost-Based Optimizer) 是 Hive 从 规则驱动(RBO) 向 数据驱动 转型的关键组件,它通过统计信息估算执行计划的成本,从而选择最优的物理执行计划,显著提升复杂查询(尤其是多表 Join、子查询)的性能。


一、为什么需要 CBO?

在 CBO 出现前,Hive 仅使用 RBO(Rule-Based Optimizer),依赖固定规则优化(如谓词下推、列裁剪),但无法回答:

  • 哪张表更小?应该作为 MapJoin 的小表?
  • Join 顺序如何安排才能减少中间数据量?
  • 是否值得对某个子查询物化?

✅ CBO 的核心思想:用数据说话,选择“代价最低”的执行路径。


二、CBO 的工作原理

1. 依赖统计信息(Statistics)

CBO 需要以下元数据来估算成本:

统计项说明获取方式
表行数(numRows)表总记录数ANALYZE TABLE ... COMPUTE STATISTICS
列基数(cardinality)列去重值数量... FOR COLUMNS col1, col2
列最小/最大值用于范围查询估算同上
列空值比例(numNulls)影响过滤效率同上
表大小(totalSize)估算 I/O 成本自动收集或手动分析

📌 统计信息存储在 Metastore 中(TAB_COL_STATS, PART_COL_STATS 表)。


2. 优化流程

SQL → AST → Logical Plan 
       ↓
   [RBO 优化](谓词下推、列裁剪等)
       ↓
   收集统计信息 → 估算各算子成本
       ↓
   [CBO 优化](基于成本重排 Join 顺序、选择 Join 策略等)
       ↓
Physical Plan → 执行引擎

三、CBO 能优化哪些场景?

✅ 1. Join 顺序重排(Join Reordering)

  • 问题:A JOIN B JOIN C,不同顺序产生中间结果大小差异巨大。
  • CBO 决策:根据表大小和过滤率,选择 (A ⋈ B) ⋈ C 还是 A ⋈ (B ⋈ C)。
  • 效果:减少 Shuffle 数据量,避免数据倾斜。

✅ 2. 自动选择 Join 策略

  • 根据表大小决定使用:
    • MapJoin(小表广播)
    • Common Join(Shuffle + Reduce)
    • SMB Join(分桶表合并)
  • 无需手动写 /*+ MAPJOIN */!

✅ 3. 子查询优化(Subquery Decorrelation)

  • 将相关子查询转为 Join:
    -- 相关子查询
    SELECT * FROM orders o 
    WHERE o.amount > (SELECT AVG(amount) FROM orders WHERE user_id = o.user_id);
    
    -- CBO 可能转为:
    SELECT o.* 
    FROM orders o
    JOIN (SELECT user_id, AVG(amount) AS avg_amt FROM orders GROUP BY user_id) t
      ON o.user_id = t.user_id
    WHERE o.amount > t.avg_amt;
    

✅ 4. 分区裁剪增强

  • 结合统计信息,更精准地跳过无关分区。

四、如何启用 CBO?

步骤 1️⃣:开启 CBO 参数

-- 启用 CBO(Hive 0.14+ 默认开启,但需确认)
SET hive.cbo.enable = true;

-- 启用 Join 重排(关键!)
SET hive.join.reorder = true;          -- Hive 2.x+
SET hive.optimize.joinreorder = true;  -- Hive 1.x(旧参数)

-- 启用基于成本的 MapJoin 转换
SET hive.auto.convert.join = true;
SET hive.auto.convert.join.noconditionaltask = true;
SET hive.auto.convert.join.noconditionaltask.size = 20971520; -- 20MB

步骤 2️⃣:收集统计信息(最关键!)

-- 全表统计(行数、文件大小)
ANALYZE TABLE sales COMPUTE STATISTICS;

-- 列级统计(基数、空值、min/max)
ANALYZE TABLE sales COMPUTE STATISTICS FOR COLUMNS product_id, region, amount;

-- 分区表(需指定分区)
ANALYZE TABLE sales PARTITION(dt='2023-01-01') COMPUTE STATISTICS;
ANALYZE TABLE sales PARTITION(dt='2023-01-01') COMPUTE STATISTICS FOR COLUMNS ...;

⚠️ 没有统计信息,CBO 会退化为 RBO!


五、验证 CBO 是否生效

方法 1:查看执行计划

EXPLAIN FORMATTED SELECT ...;
  • 检查是否有 Cost: xxx 字段;
  • 观察 Join 顺序是否合理。

方法 2:查看日志

  • 开启 debug 日志:
    SET hive.log.level=DEBUG;
    
  • 搜索 Cost-based optimizer 相关日志。

方法 3:对比优化前后

  • 关闭 CBO 执行一次,再开启执行一次,对比耗时。

六、CBO 的局限性与注意事项

限制说明
依赖统计信息质量过期/缺失统计信息会导致错误决策
不支持所有操作符如窗口函数、复杂 UDF 可能跳过 CBO
动态分区统计难维护需定期增量更新统计信息
大表全列统计开销大可只对 Join/Where 涉及的列收集
Hive 版本差异Hive 2.x+ CBO 更成熟,1.x 功能有限

七、最佳实践

  1. 定期更新统计信息(尤其高频更新的表):

    -- 增量收集(Hive 3.0+)
    ANALYZE TABLE sales UPDATE STATISTICS FOR COLUMNS ...;
    
  2. 只收集关键列的统计信息,避免全表全列分析;

  3. 结合分区设计,对热点分区重点收集;

  4. 监控 CBO 决策,发现异常时可临时关闭:

    SET hive.cbo.enable = false; -- 用于调试
    
  5. 生产环境建议开启,但需配套统计信息管理流程。


八、总结

特性说明
核心价值基于数据分布智能选择最优执行计划
关键前提准确、及时的统计信息
主要收益Join 性能提升 2~10 倍,减少资源浪费
适用场景多表关联、复杂子查询、大表 Join
推荐指数⭐⭐⭐⭐☆(需配套统计信息管理)

💡 CBO 不是“银弹”,而是“数据驱动优化”的基础设施。
当你的 Hive 数仓进入中大规模阶段,建立统计信息收集机制 + 启用 CBO 是性能调优的必经之路。

通过合理使用 CBO,你可以让 Hive 从“被动执行 SQL”升级为“主动优化查询”,真正释放大数据分析的性能潜力。

【大数据笔记】SQL Optimizer 解析 大数据课程相关笔记。 阅读详情

相关推荐

Hive性能优化实战:从慢查询定位到SQL调优的完整指南

大数据计算任务中,查询性能常受制于存储模型与计算引擎的协同效率。数据仓库工具Hive通过将SQL转化为分布式作业,实现了海量数据的批处理,但作业运行中的资源争抢、数据读写放大等问题往往导致查询延迟。其中,数据倾斜是任务卡滞的常见根因,而分区裁剪、分桶预分组及ORC列式存储的谓词下推机制,则能从数据组织层面减少无效扫描。优化SQL执行逻辑(如Join策略、聚合方式)与调整引擎参数(内存、并行度、矢量化)也是降低调度开销的关键。在典型数仓场景中,从基线测量入手,结合动态分区控制与小文件合并,可系统性地提升Hiv

weixin_34408624的博客 329

【大数据之Hive】二十六、HQL之CBO优化、谓词下推、矢量化查询

CBO是指Cost based Optimizer,即基于计算成本的优化。在Hive中,计算成本模型考虑到了:数据的行数、CPU、本地IO、HDFS IO、网络IO等方面。Hive会计算同一SQL语句的不同执行计划的计算成本,并选出成本最低的执行计划。目前CBO在hive的MR引擎下主要用于join的优化,例如多表join的join顺序。1、示例SQL语句2、关闭CBO优化根据执行计划,三张表的join顺序如下:3、开启CBO优化根据执行计划,三张表的join顺序如下:4、总结。

阿宁的博客 1786

Spark核心知识点和面试高频考点

Apache Spark 是一个开源的统一分布式计算引擎,它以内存计算为核心,提供了 Java、Scala、Python、R 等高级 API,并提供以下功能:Spark Core(核心基础):负责分布式任务调度、内存管理、容错、存储交互等基础功能。它引入了 RDD(弹性分布式数据集) 这一核心抽象,是所有其他组件的基石。Spark SQL(结构化数据处理):用于处理结构化与半结构化数据,提供了DataFrame、Dataset,以及SQL查询引擎。底层也是基于RDD进行了封装优化。Spark Streami

qq_37771475的博客 780

Hive 通过关闭CBO (Cost based Optimizer) 来优化特定的SQL执行

Hive 自0.14.0开始,加入了一项”Cost based Optimizer”来对HQL执行计划进行优化,这个功能通过”hive.cbo.enable”来开启。在Hive 1.1.0之后,这个feature是默认开启的,它可以自动优化HQL中多个JOIN的顺序,并选择合适的JOIN算法 Join reordering and join algorithm selection are

Harper 1万+

数据工程工具链实战地图:20个核心工具分层解析与选型指南

数据工程工具链是支撑现代企业数据能力的基础设施,其本质是围绕数据生命周期——接入、存储、计算、治理与消费——构建的协同系统。理解各工具的技术原理(如Airflow的DAG编排、dbt的Transformation-as-Code、Flink的Event Time语义)是避免选型失当的前提;其技术价值在于将数据可靠性、模型可信度、实时准确性、质量可预防性及跨源可分析性从理想变为可落地的工程实践。典型应用场景包括金融实时风控、电商T+1报表、SaaS多源BI分析等。本文聚焦真实生产验证的20个高价值工具,尤其深

闲谈 449

大数据之路、阿里巴巴大数据实践读书笔记 --- 第十三章、计算管理

目前内部MaxCompute集群上有200多万个任务,每天存储资源、计算资源消耗都很大。如何降低资源的消耗,提高任务执行的性能,提升任务产出时间,是计算平台和ETL开发工程师孜孜追求的目标; 一、系统优化 Hadoop等分布式计算系统评估资源的方式,一般是根据输入数据量静态评估,Map任务用于处理输入,对于普通的Map任务,评估一般符合预期; 而对于Reduce任务,...

杨鑫newlife的专栏 827

Hive3 - 性能优化

此时我们可以先通过子查询查出所有A表的所有的去重的。计算处理,造成资源的浪费,尽管上面的方式可以进行文件的合并,但是有可能因为场景的不同还是产品小文件,因此在读取时就需要进行小文件的合并,在。文件的性能,当用户写入数据时,可以指定构建索引,当用户查询数据时,可以根据索引提前对数据进行过滤,避免不必要的数据扫描。分布式计算中最常见的,最容易遇到的问题就是数据倾斜,数据倾斜的现象是,当我们提交运行一个程序时,这个程序的大多数的。有效利用,向表中加载数据时,必须对需要使用索引的字段进行排序,否则,

小毕超博客 1066

ADS中HB仿真自动优化报错问题解决心得

在ADS HB仿真中自动优化出现报错被强制暂停,解决方法如下

yyyyyyyyyyjy的博客 6537

Hive SQL 及 hive参数 优化

Hive的优化 主要分为:配置优化、SQL语句优化、任务优化等方案。其中在开发过程中主要涉及到的可能是SQL优化这块。 优化的核心思想是: 减少数据量(例如分区、列剪裁) 避免数据倾斜(例如加参数、Key打散) 避免全表扫描(例如on添加加上分区等) 减少job数(例如相同的on条件的join放在一起作为一个任务) 1. 使用分区剪裁、列剪裁 在分区剪裁中,当使用外关联时,如果将副表的过滤条件写在Where后面,那么就会先全表关联,之后再过滤。 select a.* from a left join

m0_47668312的博客 1047

模电学习笔记(十二)——跨阻放大器

模电学习笔记(十二) 跨阻放大器 跨组运算放大器是将电流信号转换成为电压信号,电流到电压增益基于反馈电阻。 设计目标: 输入 输出 带宽 电源 0A 100uA 0V 7V 20kHz 15V -15V 1.计算R1的值(增益电阻器) 2.计算C1的值满足电路带宽 ...

tang11081023的博客 2万+

常用的集成TTL门电路

本篇主要分析了常用的逻辑门电路与非门,详细分析了电源原理。值得收藏。

ManagerUser的博客 5086

Hive常用参数调优

以下参数值不是固定值,可结合集群情况适当调整 1、并行执行job 一个hql可能会转化为多个MR job来执行,如果有些job间没有依赖关系,可以让多个job同时运行,提升执行效率,但如果集群资源较少,不建议开启,否则会导致多个job相互抢占资源,降低整体运行效率 set hive.exec.parallel=true; set hive.exec.parallel.thread.number...

剁椒鱼不要头的博客 644

半导体测试(一)

探针台是一种用于在晶圆上进行配合探针卡进行电路量测的设备,在测试过程中,探针工作站会将探针与晶圆上的每个die进行接触,以进行电性测量。在这个过程中,每个die都被测试以确保它能基本满足器件的特征或设计规格书(Specification),通常包括电压、电流、时序和功能的验证。晶圆是一个圆形的硅片,在这个半导体的基础之上,建立了许多独立的单个的电路;在所有的die都被探测(Probed)之后,晶圆被切割成独立的dice,这就是常说的die saw,所有被标示为失效的die都被报废,。

m0_37606066的博客 8424

Presto 基于成本的优化(Cost-Based Optimizations):Join 枚举、Join 分布选择与广播表大小上限实战指南

本文围绕 Presto 查询优化器中的**基于成本的优化(Cost-Based Optimizations, CBO)**能力展开,重点讲解三大核心机制:**Join 枚举(Join Enumeration)**、**Join 分布选择(Join Distribution Selection)**与**复制表大小上限(Capping Replicated Table Size)**。你将掌握如何通

gitblog_00910的博客 648

PCB布局规范及其注意事项(纯干货)

这样做的好处是信号1,3层不会有串扰,4和5作为电源有紧密的耦合,3个信号层都有GND平面可以参考,且不会互相产生串扰,唯一的缺点是布线的层面只有3个信号层(信号03的是最适合来传输高速信号,因为该层的二面都有屏蔽,防止干扰传出,也防止干扰传入)33、影响阻抗匹配的参数(ER介电常数(1GHZ以下默认为4.2,以上的话问板厂),H介质厚度(就是内层压合的PP片厚度),W走线的线宽,T走线的厚度(铜厚/减小线的厚度可以增大阻抗))我这里使用的是CITS25来计算阻抗。

qq_42379138的博客 8842

【Jlink & C#】通过C#实现Jlink RTT上位机的功能

某天看到安富莱家的自己开发的调试器可以实现输出中文调试信息到自己编写的Jlink RTT上位机上,觉得无比神奇,略好奇到底是如何做的,找了很久,发现其上位机的对应的实现好像也没有完全开源出来。后来经过很多搜索确认,知道了几个事实:那么有没有可能用C#来控制Jlink呢?答案是,有!!! 解决思路在于,C#调用JLinkARM.dll里面的函数 这里转载下我认为很有意义的发现结合以上的几个发现,加上我自己的测试,我把我对接JLinkARM.dll的C#接口分享出来,不保证都能用,我只是测试了几个常用的功能,R

一只爱做笔记的码农 9144

Presto 查询优化器(Query Optimizer)完全指南:统计、成本优化、HBO 与逻辑属性

Presto 是面向大数据场景的分布式 SQL 查询引擎,其查询优化器(Query Optimizer)决定了 SQL 最终以何种物理执行计划运行。本文以 [presto-docs/src/main/sphinx/optimizer.rst](https://link.gitcode.com/i/9ddbf67c9450db2138eeb3a1e9f19db2) 及 [optimizer/](ht

gitblog_00250的博客 428

Python爬虫实战:基于Scrapy与Playwright的搜狐新闻高效爬取

在当今信息爆炸的时代,网络爬虫技术已成为数据获取和分析的重要工具。作为国内领先的新闻门户网站,搜狐新闻包含了大量有价值的新闻数据,这些数据对于舆情分析、市场研究等领域具有重要意义。本文将详细介绍如何使用Python最新的爬虫技术栈(Scrapy框架结合Playwright浏览器自动化工具)来高效爬取搜狐新闻数据。pythontitle = scrapy.Field() # 新闻标题url = scrapy.Field() # 新闻链接。

2201_76125261的博客 1552

Hive 入门学习

Apache Hive是一款分布式SQL计算的工具,其主要功能是:将SQL语句翻译成MapReduce程序运行,处理位于HDFS上的结构化数据。基于MapReduce构建分布式SOL执行引擎,主要需要两个功能组件:元数据管理和SQL解析器。元数据管理:记录数据存储位置,数据结构以及数据描述等。SQL解析器:其功能包括SQL分析,SQL到MapReduce程序的转换,提交MapReduce程序运行并收集执行结果。

weixin_44361163的博客 1821

软件崩溃时Visual Studio中看不到有效的调用堆栈,使用Windbg动态调试去分析定位

当在Visual Studio中遇到软件崩溃且无法查看详细调用堆栈时,可以使用Windbg进行动态调试去分析定位问题。

dvlinker的技术专栏 1万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

大数据之路读书笔记-13计算管理

目前内部MaxCompute集群上有200多万个任务,每天存储资源、计算资源消耗都很大。如何降低计算资源的消耗,提高任务执行的性能,提升任务产出的时间,是计算平台和ETL开发工程师孜孜追求的目标。本章分别从系统优化和任务优化面介绍计算优化。...

数字人生 1091

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Oracle的优化器有两种优化方式(一)

Oracle的优化器有两种优化方式(一) Oracle的优化器有两种优化方式(整理), 2010-04-13 RBO方式:基于规则的优化方式(Rule-Based Optimization,简称为RBO)   优化器在分析SQL语句时,所遵循的是Oracle内部预定的一些规则。比如我们常见的,当一个where子句中的一列有索引时去走索引。 CBO方式:基于代价的优化方式(Cos

zdy0_2004的专栏 578

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Presto 表统计机制(Table Statistics)完整指南:从 SHOW STATS 到成本驱动优化

本篇技术指南围绕 Presto(当前仓库即 Facebook 版 Presto 的官方源码)的表统计(Table Statistics)机制展开,系统讲解统计信息如何通过连接器提供给查询规划器、Presto 支持哪些表级与列级统计项、如何使用 `SHOW STATS` 查看与 `ANALYZE` 更新统计,并结合仓库源码剖析统计信息在成本优化(CBO)、Hive 与 Iceberg 连接器中的落地

gitblog_00959的博客 468

Hive参数调优实战:从执行引擎到SQL优化的完整指南

在大数据离线计算中,Hive作为数据仓库的核心工具,其执行效率直接决定业务分析的速度。Hive本身并不直接计算,而是将SQL翻译为分布式任务提交给底层引擎执行,因此调优的关键在于理解参数在SQL解析、计划生成与引擎执行等不同阶段的作用。合理配置执行引擎、CBO优化、并行度与内存参数,能显著减少IO开销和资源浪费。针对常见的MapJoin小表关联、Group By数据倾斜、动态分区写入过多以及小文件累积等场景,通过参数组合与SQL改写可以有效缓解性能瓶颈。掌握参数背后的原理与排查方法,建立观测与基线对比习惯,

weixin_34075268的博客 986

Hive存储格式深度解析:从TextFile到ORC/Parquet的性能演进与实战选型

在大数据生态中,数据存储格式是决定查询性能和存储效率的基石。其核心原理在于数据在磁盘上的组织方式,主要分为行式存储和列式存储两大阵营。行式存储(如TextFile)将整行数据连续存放,适合频繁的整行读写,但在分析场景下会因读取无关列而产生大量I/O浪费。列式存储(如ORC、Parquet)将同一列的数据聚集存放,实现了高效的列裁剪和压缩,特别适合分析型查询。这项技术的核心价值在于,它能将存储空间压缩至原始文本的10%-30%,并通过谓词下推、向量化执行等机制,将查询性能提升数倍乃至数十倍。其典型应用场景包括

weixin_33736048的博客 394

Presto Release 0.183 深度解读:内存治理、聚合 Spill 重设计、Hive/ORC 健壮性与 SPI 统计接口演进

本篇技术指南以 Presto 官方 Release 0.183 发布说明为主体,系统梳理该版本在查询规划、内存与聚合 Spill、Hive/ORC 读取、Web UI、TPCH/TPCDS 以及 SPI 接口层面的全部变更,并结合当前仓库源码逐一佐证实现细节。读完本文,你将掌握 0.183 中新增的 `map_from_entries`/`map_entries` 函数语义、聚合 Spill 新配

gitblog_01010的博客 234
上一篇: 02 | Hive SMB Join 原理
下一篇: 03 | Hive 如何处理小文件
走过冬季
博客等级 码龄9年 1609粉丝 341原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

走过冬季

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值