HIVE的基本使用05(HSQL调优)

第18届全国大学生智能汽车竞赛四轮车控制策略深度解析:从舵机PID到速度闭环 本文深度解析了第18届全国大学生智能汽车竞赛中四轮车的核心控制策略。从舵机PID方向控制的基础原理与机械校准入手,详细阐述了误差计算、PD控制等关键环节;进而深入探讨了基于编码器的速度闭环控制,包括增量式PI算法与速度决策逻辑。文章结合实战经验,提供了方向环与速度环的协同参思路与避坑指南,旨在帮助参赛者构建稳定、高效的智能车控制系统。 阅读详情

1.fetch抓取

select * from A;这种语句可以直接读取文件,不走MR程序会快很多;

不走MR程序的情况:

在hive-default.xml.template文件中hive.fetch.task.conversion默认是more,老版本hive默认是minimal,该属性修改为more以后,全局查找、字段查找、limit查找都不走mapreduce。

设置conversion参数后再执行sql:

hive (default)> set hive.fetch.task.conversion=none;

2.本地模式

适用于hive的输入量很少的情况,把数据集中到一台最近的机器上处理。小数据集优化效果明显;

开启本地模式:hive (default)> set hive.exec.mode.local.auto=true; 

执行SQL

关闭本地模式:hive (default)> set hive.exec.mode.local.auto=false; 

自适应开启本地模式:

set hive.exec.mode.local.auto=true;  //开启本地mr

//设置local mr的最大输入数据量,当输入数据量小于这个值时采用local  mr的方式,默认为134217728,即128M

set hive.exec.mode.local.auto.inputbytes.max=51234560;

//设置local mr的最大输入文件个数,当输入文件个数小于这个值时采用local mr的方式,默认为4

set hive.exec.mode.local.auto.input.files.max=10;

3.join

小表驱动大表原则;新版本hsql已经被优化;

原因:小表被加载进入内存,大表通过关联条件,跟小表对比;

新版本hive的优化,会通过类似于oracle的表分析数据,自己确定大表还是小表。

4.mapjoin

场景:某张表的某个分区的数据远远高于其他分区,发生数据倾斜;

在map端进行join操作:

首先是Task A,它是一个Local Task(在客户端本地执行的Task),负责扫描小表b的数据,将其转换成一个HashTable的数据结构,并写入本地的文件中,之后将该文件加载到DistributeCache中。

接下来是Task B,该任务是一个没有Reduce的MR,启动MapTasks扫描大表a,在Map阶段,根据a的每一条记录去和DistributeCache中b表对应的HashTable关联,并直接输出结果。

案例实操:

(1)开启Mapjoin功能

set hive.auto.convert.join = true; 默认为true

执行SQL

5.group by

场景:有一个分组的数据量特别大,就会导致一个reduce的数据处理量特别大,拖慢整个MR程序的运行;此时可以开启group by 的负载均衡参数

实际操作:

(1)是否在Map端进行聚合,默认为True

set hive.map.aggr = true;

(2)在Map端进行聚合操作的条目数目

    set hive.groupby.mapaggr.checkinterval = 100000;

(3)有数据倾斜的时候进行负载均衡(默认是false)

    set hive.groupby.skewindata = true;

    当选项设定为 true,生成的查询计划会有两个MR Job。第一个MR Job中,Map的输出结果会随机分布到Reduce中,每个Reduce做部分聚合操作,并输出结果,这样处理的结果是相同的Group By Key有可能被分发到不同的Reduce中,从而达到负载均衡的目的;第二个MR Job再根据预处理的数据结果按照Group By Key分布到Reduce中(这个过程可以保证相同的Group By Key被分布到同一个Reduce中),最后完成最终的聚合操作。

6.count(distinct)

场景:直接count(A) 只用一个reduce,数据量大只有一个reduce会非常慢;

实际使用:

SELECT count(id) FROM (SELECT id FROM bigtable GROUP BY id) a;

子查询MR多个reduce处理完成后的结果再去用一个reduce统计;

7.笛卡尔积

避免出现笛卡尔积;

8.分区裁剪列裁剪

用到哪个分区就只取哪个分区的值,用到哪些字段就只取哪些字段,减少MR程序的输入数据量;

9.动态分区调整(复制分区表的时候会用到,可以方便一些)

场景:一张有分区的表,将源数据按照原来的分区,插入到第二张表里,第二张表不用再建立分区了。

实际操作:

1)开启动态分区参数设置

(1)开启动态分区功能(默认true,开启)

set hive.exec.dynamic.partition=true;

(2)设置为非严格模式(动态分区的模式,默认strict,表示必须指定至少一个分区为静态分区,nonstrict模式表示允许所有的分区字段都可以使用动态分区。)

set hive.exec.dynamic.partition.mode=nonstrict;

(3)在所有执行MR的节点上,最大一共可以创建多少个动态分区。

set  hive.exec.max.dynamic.partitions=1000;

(4)在每个执行MR的节点上,最大可以创建多少个动态分区。该参数需要根据实际的数据来设定。比如:源数据中包含了一年的数据,即day字段有365个值,那么该参数就需要设置成大于365,如果使用默认值100,则会报错。

set hive.exec.max.dynamic.partitions.pernode=100

(5)整个MR Job中,最大可以创建多少个HDFS文件。

linux系统当中,每linux用户最多可以开启1024个进程,每一个进程最多可以打开2048个文件即持有2048个文件句柄,下面这个值越大,就可以打开文件句柄越大

set hive.exec.max.created.files=100000;

(6)当有空分区生成时,是否抛出异常。一般不需要设置。

set hive.error.on.empty.partition=false;

实际操作:

set hive.exec.dynamic.partition = true;

set hive.exec.dynamic.partition.mode = nonstrict;

set hive.exec.max.dynamic.partitions = 1000;

set hive.exec.max.dynamic.partitions.pernode = 100;

set hive.exec.max.created.files = 100000;

set hive.error.on.empty.partition = false;

INSERT overwrite TABLE ori_partitioned_target PARTITION (p_time)

SELECT id, time, uid, keyword, url_rank, click_num, click_url, p_time

FROM ori_partitioned;

注意:在PARTITION (month,day)中指定分区字段名即可;

在SELECT子句的最后几个字段,必须对应前面PARTITION (month,day)中指定的分区字段,包括顺序。

查看分区

hive> show partitions ori_partitioned_target;

10.分桶

11.设置适当的Map数和reduce数(常用记住)

减少map数:

场景:如果一个任务有很多小文件(远远小于块大小128m),则每个小文件也会被当做一个块,用一个map任务来完成,而一个map任务启动和初始化的时间远远大于逻辑处理的时间,就会造成很大的资源浪费。而且,同时可执行的map数是受限的。

1.小文件合并

set mapred.max.split.size=112345600;

set mapred.min.split.size.per.node=112345600;

set mapred.min.split.size.per.rack=112345600;

set hive.input.format= org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;

这个参数表示执行前进行小文件合并,前面三个参数确定合并文件块的大小,大于文件块大小128m的,按照128m来分隔,小于128m,大于100m的,按照100m来分隔,把那些小于100m的(包括小文件和分隔大文件剩下的),进行合并。

增多map数:

场景:如果表a只有一个文件,大小为120M,但包含几千万的记录,如果用1个map去完成这个任务,肯定是比较耗时的,这种情况下,我们要考虑将这一个文件合理的拆分成多个,这样就可以用多个map任务去完成。

set mapreduce.job.reduces =10;

合适的reduce数量:

1调整reduce个数方法一

(1)每个Reduce处理的数据量默认是256MB

hive.exec.reducers.bytes.per.reducer=256123456

(2)每个任务最大的reduce数,默认为1009

hive.exec.reducers.max=1009

(3)计算reducer数的公式

N=min(参数2,总输入数据量/参数1)

2调整reduce个数方法二

在hadoop的mapred-default.xml文件中修改

设置每个job的Reduce个数

set mapreduce.job.reduces = 15;

3reduce个数并不是越多越好

1)过多的启动和初始化reduce也会消耗时间和资源;

2)另外,有多少个reduce,就会有多少个输出文件,如果生成了很多个小文件,那么如果这些小文件作为下一个任务的输入,则也会出现小文件过多的问题;

在设置reduce个数的时候也需要考虑这两个原则:处理大数据量利用合适的reduce数;使单个reduce任务处理数据量大小要合适;

12.根据执行计划进行调优(会看执行计划,判断调优方式)

1)基本语法

EXPLAIN [EXTENDED | DEPENDENCY | AUTHORIZATION] query

2)案例实操

(1)查看下面这条语句的执行计划

hive (default)> explain select * from course;

hive (default)> explain select s_id ,avg(s_score) avgscore from score group by s_id;

(2)查看详细执行计划

hive (default)> explain extended select * from course;

hive (default)> explain extended select s_id ,avg(s_score) avgscore from score group by s_id;

13.并行执行(常用,在资源比较空闲的时候可以开启)

场景:hsql会有执行计划,把一个sql分成多个阶段,默认一阶段一阶段(阶段可以是MapReduce阶段、抽样阶段、合并阶段、limit阶段)执行。开启并行,在可以同时执行的阶段,hsql就会同时执行   比如union all的情况:

select * from (select * from A union all select * from B);

set hive.exec.parallel=true;              //打开任务并行执行

set hive.exec.parallel.thread.number=16;  //同一个sql允许最大并行度,默认为8。 oracle设置这个只能是双数

14.jvm重用(重要,需要掌握)

场景:task数量特别多,且任务执行时间短,频繁的分配资源初始话会浪费大量的时间。

JVM重用可以使得JVM实例在同一个job中重新使用N次。jvm分配的container资源的重用次数设置。通常在10-20之间,具体多少需要根据具体业务场景测试得出。

实际操作:

Hadoop的mapred-site.xml

<property>

  <name>mapreduce.job.jvm.numtasks</name>

  <value>10</value>

  <description>How many tasks to run per jvm. If set to -1, there is

  no limit.

  </description>

</property>

在hive当中:

set  mapred.job.reuse.jvm.num.tasks=10;

【密码专栏】超强进阶:PLONK VS Groth16(上) 前言 前文《天冷了,干了这碗“零知识证明”鸡汤》对「零知识证明学习」作了一个形象化的比喻:炖鸡汤。那么本系列的主要内容可以简单概括为《论高压锅炖鸡汤的一百种方法》之方法二。在学会了“清炖鸡汤”之后,不如来一口“阿胶鸡汤”补补脑细胞吧! 正如鸡汤不同风味之间各具千秋,不同的zk-SNARK方案也各有所长。zk-SNARK方案可以被分为【通用】与【非通用】zk-SNARK,PLONK与Groth16分别是其中的典型代表。通过本系列,我们将对PLONK算法内容作简要介绍,并指出PLONK和Groth16算法思路上 阅读详情

相关推荐

数据仓库-你不知道的HSQL

你不知道的HSQL? 创建demo数据 create table dwd.dwd_order_item ( order_id bigint , goods_id bigint , bctg bigint , bctg_en string , amt double , qty double , load_etl_time timestamp comment 'ETL LOAD TIME' ) comment '' partitioned by (dt stri

数据包工头的博客 251

HSQLDB 文件 变大 优化处理

NULL 博文链接:https://aperise.iteye.com/blog/1695560

Hive性能优化总结

查找性能低下的原因;分析性能低下的根源;从配置及程序角度进行优化

HSQL的一些个人见解

1. order by 全局有序,只有一个reduce(不管reduce task的数量设置成多少个,MR框架都会只设置成1个reduce) 2. sort by 每个reduce内部排序,对全局来说不是排序。 一般要结合distribute by(分区函数)使用。 数据会按distribute by 写出,写成文件?还是写道不同的分区里面??? 如果指定distribute by,那么MR框架使用字段进行hash分区。 3. cluster by...

淡定一生2333的博客 1473

Hsql优化

hiveSQL优化

qq_55827559的博客 520

sql优化的15个小技巧(必知五颗星),面试说出七八个就有了

目录 前言 1 避免使用select * 2 用union all代替union 3 小表驱动大表 4 批量操作 5 多用limit 6 in中值太多 7 增量查询 8 高效的分页 9 用连接查询代替子查询 10 join的表不宜过多 11 join时要注意 12 控制索引的数量 13 选择合理的字段类型 14 提升group by的效率 15 索引优化 前言 sql优化是一个大家都比较关注的热门话题,无论你在面试,还是工作中,都很有可能会遇到。 如果某天你负责的某

GQ_666的博客 10万+

SQL优化大全:详细总结30个超级实用的SQL优化技巧

在数据库管理和应用开发中,SQL查询的性能优化至关重要。高效的SQL查询不仅可以提高应用的响应速度,还能降低服务器负载,提升用户体验。本文详细总结了30个实用的SQL优化技巧,并附带示例代码,帮助各位大大构建高效、稳定的数据库应用。

勤于笔记,成于点滴。 1万+

如何对 SQL 语句进行优化

当我们在设计一个项目时,开发阶段的业务数据量相对较少,一些 SQL 语句的执行效率对程序运行效率的影响不太明显,所以对于开发或运维人员来说不会注重对 SQL 语句的优化。但是,随着时间的积累,业务数据量会越来越多,SQL 的执行效率对程序的运行效率的影响逐渐增大,此时对SQL的优化就很有必要。 本篇章主要从以下几个方面对 SQL 语句的优化进行介绍: 插入数据优化 主键优化 order by 优化 group by 优化 limit 优化 count 优化 update 优化

S mile0804的博客 4140

Hive教程(05)- Hive命令汇总

文章目录01 引言02 命令汇总2.1 基础命令2.1.1 启动2.1.2 退出2.1.3 数据导入导出2.1.3.1 数据导入2.1.3.2 数据导出2.1.4 HSql文件执行2.1.4.1 控制台执行2.1.4.2 hive shell 执行2.1.4.3 一次使用命令2.1.5 配合nohup使用2.2 DDL命令2.2.1 数据库2.2.1.1 创建数据库2.2.1.2 删除数据库2.2.1.3 修改数据库2.2.1.4 查看数据库2.2.1.5 使用数据库2.2.2 表2.2.2.

阿甘兄 5737

hive函数与

函数 last_day() 是每个月月末最后一天; 例如: SELECT day, – 时间 DATE_ADD(day, 1 - DAYOFWEEK(day)) AS week_first_day, – 本周第一天_周日 DATE_ADD(day, 7 - DAYOFWEEK(day)) AS week_last_day, – 本周最后一天_周六 DATE_ADD(day, 1 - CASE WHEN DAYOFWEEK(day) = 1 THEN 7 ELSE DAYOFWEEK(day) - 1 END

weixin_43173073的博客 148

Hive教程(09)- 彻底解决小文件的问题

文章目录01 引言02 小文件概述2.1 小文件的缘由2.1 小文件的危害03 小文件解决方案3.1 方式一:处理已有的小文件3.1.1 distribute by 命令3.1.2 concatenate 命令3.1.3 定时方案3.1.3.1 Linux crontab 控制3.1.3.2 Java代码控制(推荐)3.2 方式二:预防小文件3.3 方式三:使用HAR归档文件04 案例讲解4.1 模拟插入大量小文件4.2 使用distribute by 命令控制 01 引言 在前面的教程,我们知道了HDFS

阿甘兄 4050

Hive总结

1.在运行select count(1) from tab时,会启动hadoop的job,需要对 hdfs/tmp设置 组写权限 hadoop fs -chmod g+w /tmp 原因:HiveHSQL解析成Hadoop的job,job在中间运行会对 hdfs/tmp操作写入操作 (2012-05-07) 转载于:https://www.cnblogs.com/b...

weixin_34397291的博客 84

group by在mysql和hive中的区别

id name date sex 1 赵雷 1990-01-01 男 2 钱电 1990-12-21 男 3 孙风 1990-05-20 男 4 李云 1990-08-06 男 5 周梅 1991-12-01 女 6 吴兰 1992-03-01 女 7 郑竹 1989-07-01

m0_48714980的博客 852

hive sql 实现连续登录查询

一.问题描述 获取登录日志,怎样查询一个人是否连续几天登录? 二..数据 张三,2021-11-28 10:30:00 李四,2021-11-28 10:30:00 王五,2021-11-28 10:30:00 张三,2021-11-28 10:40:00 赵六,2021-11-28 10:30:00 田七,2021-11-28 10:30:00 张三,2021-11-29 10:30:00 张三,2021-11-29 10:40:00 张三,2021-11-30 10:30:00 张三,2021-1

qq_63720568的博客 2094

Pig、Hive、MapReduce 解决分组 Top K 问题

问题: 有如下数据文件 city.txt (id, city, value) cat city.txt  1 wh 500 2 bj 600 3 wh 100 4 sh 400 5 wh 200 6 bj 100 7 sh 200 8 bj 300 9 sh 900 需要按 city 分组聚合,然后从每组数据中取出前两条value最大的记录。 1、这是实际业务

godspeedlaile9的专栏 689

SQL优化(手把手详解)

SQL优化

1026

Hive的十四种方式:

参考:https://www.cnblogs.com/smartloli/p/4356660.htmlHive性能优化 https://blog.csdn.net/l1028386804/article/details/80629279?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribut...

a1272899331的博客 1935

一条sql语句执行很慢的原因有哪些

一条sql语句执行的很慢的话,可以大体上分两种情况,一种是偶尔执行的慢,一种是总是执行的慢。 偶尔执行的慢 可能是数据库此时在刷脏页。脏页就是内存中的数据跟磁盘上的数据不一致,数据库先写内存,并把修改操作记录到redo log,等空闲的时候再将redo log中的数据刷新到磁盘上,如果此时redo log 已经满了,那就不得不刷脏页了,或者内存不够,就得需要清除部分内存,如果清除的是干净页,那就可以直接清除,如果是脏页,就得先刷新到磁盘中才能清除。 可能是我们要查询的数据表加了锁,此时锁已经被占有,我们拿

Mainhxj的博客 448

Hive中数据库和表的操作(HSQL)

数仓管理工具Hive可以将HDFS文件中的结构化数据映射成表,利用HSQL对表进行分析,HSQL的底层运行机制,默认是MapReduce计算,也可以替换成Spark、Tez、Flink计算结果存储在HDFS,像Hive中的库、表、字段、表所属库、表的数据所在目录、分区等信息称为元数据,元数据默认存储在自带的derBy数据库,也可以切换MySQL、Postgres、Oracle、MS SQL Server存储元数据,对应的库为hive数据库实例,对应的元数据表为hive数据库实例下的表。

weixin_37536020的博客 2029

微信小程序滑块验证代码.zip

代码仅供参考,不可运行,有疑问私我

上一篇: HIVE的基本使用05(指定存储格式,在hive创建表那里提过,此处详细解释)
下一篇: Flume的配置和使用
RZH_long
博客等级 码龄6年 17粉丝 51原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值