Hive调优总结

参数设置

概述:hive的参数配置, 就是在那里配置hive的参数信息, 根据配置地方不同, 作用范围也不一样.
配置方式:
        1. set方式进行设置.
        2. 命令行方式进行设置.
        3. 配置文件方式进行设置.

优先级问题:
        set方式 > 命令行方式 > 配置文件方式
作用范围:
        set方式 < 命令行方式 < 配置文件方式
细节:
        1. set方式, 格式为:   set 属性名=属性值;
            例如: set mapreduce.job.reduces=n;
        2. 命令行方式, 就是在启动 hiveserver2服务的时候, 设置的参数.
            nohup hive --service hiveserver2 --hiveconf hive.root.logger=DEBUG,console &
        3. 配置文件方式.
            修改hive-default.xml文件
        4. 实际开发中, 推荐使用 set方式进行临时设置.

存储和压缩方式

1. Hive压缩方式:
    概述:
        压缩方式就类似于windows的压缩包, 可以降低传输, 提高磁盘利用率.
    区分压缩协议好坏的参考维度:
        1. 压缩比, 即: 压缩后文件大小.
        2. 解压速度, 即: 读的速度.
        3. 压缩速度, 即: 写的速度.
    推荐使用:
        GZIP:       压缩后文件相对较小, 压缩 和 解压速度相对较慢.
        Snappy:     压缩后文件相对大一点, 压缩 和 解压速度非常快.
2. Hive表存储方式
    概述:
        分为 行存储 和 列存储两种.
    具体划分:
        行存储: TextFile(默认), SequenceFile
        列存储: ORC(推荐), Parquet
    面试题: 行存储 和 列存储的区别?
        行存储:
            优点:  select * 效率高.
            缺点:  select 列 效率低,  每列数据类型不一致, 密集度较低, 占用资源较多(CPU, 磁盘, 内存)
        列存储:
            优点: select 列 效率高,  每列数据类型一致, 密集度较高, 占用资源较少(CPU, 磁盘, 内存)
            缺点: select * 效率低.
    结论:
        以后建表, 推荐: orc(列存储) + snappy(压缩协议)

Fetch抓取

核心点:
    在执行HiveSQL的时候, 能不转MR, 就不转MR.
设置方式:
    set hive.fetch.task.conversion=fetch抓取的模式;
Fetch抓取模式介绍:
    more:  默认的, 全表扫描, 查询指定的列, limit分页查询, 简单查询不走MR, 其它的要转MR任务.
    minimal:  全表扫描, 查询指定的列, limit分页查询不走MR, 其它的要转MR任务.
    none:    所有的HiveSQL, 底层都要转MR.

本地模式

核心点:
    如果HiveSQL必须要转成MR任务来执行, 则尽量在本机(本地)直接执行, 而不是交由Yarn来调度执行, 针对于数据量比较小的需求, 可以提高效率.
相关设置:
    --开启本地mr
    set hive.exec.mode.local.auto=true;
    --设置local mr的最大输入数据量,当输入数据量小于这个值时采用local  mr的方式,默认为134217728,即128M
    set hive.exec.mode.local.auto.inputbytes.max=134217728;
    --设置local mr的最大输入文件个数,当输入文件个数小于这个值时采用local mr的方式, 默认为4
    set hive.exec.mode.local.auto.input.files.max=4;

join优化

小表join大表:
    开启Map段的join, 在内存中完成处理, 避免把join的动作交给ReduceTask段来处理, 出现数据倾斜的情况.
    参考如下配置, 即: 设置map端join
        set hive.auto.convert.join = true;              
        set hive.mapjoin.smalltable.filesize= 25000000; 
大表join大表:
    思路1: 空key过滤, 降低处理的数据量.
    思路2: 空key转换, 必须大量的null值, 提高数据的处理数据.

SQL优化

1. 列裁剪.
    能写 select 列1, 列2... 就不要写 select *
2. 分区裁剪
    编写SQL的时候, 能使用分区条件, 建立一定要写分区字段.
3. 开启负载均衡.
    如果key分布不均, 就可能导致数据倾斜的问题(Group by数据倾斜), 可以通过 开启负载均衡解决.
    开启负载均衡之后, 如果遇到了GroupBy数据倾斜问题, 程序的底层会开启两个MR任务,
    第1个MR负责将(发生数据倾斜的)数据随机打散, 交由不同的ReduceTask任务来处理, 获取结果.
    第2个MR会将 第1个MR的结果当做数据源来处理, 进行最终的合并动作, 获取最终结果.
    开启负载均衡的代码如下:set hive.groupby.skewindata=true;
4.关于去重统计的问题.
    如果数据量相对较小, 可以直接写: select count(distinct id列) from 表名; 去重统计, 底层会转成1个MR任务.
    如果数据量相对较大, 上述的SQL语句, 可能会执行失败, 就可以通过 group by + count的思路来解决, 具体如下:
        select count(id列) from (select id from 表名 group by id) t1; 底层会转2个MR任务.
5.关于笛卡尔积.
    实际开发中, 尽量避免出现笛卡尔积的情况, 可以节约资源, 提高查询效率.
    例如:
        1. 写join连接的时候, 别忘记写关联条件, 且关联条件别写错.
        2. 关联条件尽量写到on中, 而不是where中, 即: 尽量使用显式连接, 而不是隐式内连接.
        3. 如果join的时候, 关联字段不清楚, 记得找 业务人员, 需求方, 数据库管理员对接.

动态分区

建议动态分区的时候, 关闭严格模式(默认开启), 严格模式要求: 动态分区的时候, 至少指定1个静态分区.
格式:
    动态分区: partition(分区字段)
    静态分区: partition(分区字段=值)
重点参数:
    set hive.exec.dynamic.partition.mode=nonstrict; 
    set hive.exec.dynamic.partition=true;  
可选参数:
    set  hive.exec.max.dynamic.partitions=1000;         
    set hive.exec.max.dynamic.partitions.pernode=100;   
    set hive.exec.max.created.files=100000;        

并行度和并行执行机制

并行度:
    即: 根据业务要求, 增大或者减少MapTask 和 ReduceTask的任务数.
    例如: 大量的小文件, 就会有大量的Block块, 就有大量的MapTask任务, 针对于这种情况: 我们可以使用归档技术, 把多个小文件合并成1个大文件, 降低MapTask任务数.
    例如: 1个Block块 = 1个MapTask任务, 但是业务逻辑较复杂, 1个MapTask处理速度肯定较慢, 可以增大MapTask任务数.
    例如: 1个ReduceTask任务 = 1个最终的结果文件, 增大或者减少ReduceTask任务数, 可以调整最终落盘到磁盘上的结果文件数.
并行执行:
    默认Hive同一时间只能执行1个阶段, 如果多个阶段之间的依赖度比较低, 就可以开启并行执行, 让多个阶段同时执行, 降低MR job任务的执行时间.
        set hive.exec.parallel=true;                
        set hive.exec.parallel.thread.number=16;   

严格模式

核心点:
    禁用低效的SQL.
设置方式:
    set hive.mapred.mode=strict | nonstrict;
细节:
    1. 这个严格模式是禁用低效的SQL, 和动态分区的严格模式没有任何关系.
    2. 严格模式是禁用低效的SQL, 例如, 如下的SQL是禁止执行的:
        (1)分区表, 查询时, 没有写分区字段.
        (2)order by全局排序时, 没有写limit
        (3)禁用笛卡尔积.

JVM重用

核心点:
    当MR任务执行结束后, Yarn创建的Container资源容器不会立即销毁, 而是可以重复使用.
原因:
    如果遇到大量生命周期短的MR任务时, 频繁的创建和销毁Container资源容器是非常消耗资源的.

推测执行

核心点:
    类似于木桶效应(装多少水取决于最短的哪个木板), job任务执行多长时间, 取决于执行最慢的哪个任务.
    针对于这种情况, 可以基于哪些"拖后腿"(执行速度过于慢)的任务, 可以搞1个它的备份任务, 让这个备份任务,
    和它处理同一份数据, 谁先执行完毕, 就将其结果作为最终结果.
建议:
    默认是开启的, 建议关闭, 具体: 看需求.

explain执行计划

格式:explain HiveSQL语句
作用:可以查看HiveSQL语句的执行计划, 即: 把该SQL分成了几个阶段来执行, 阶段越少, 相对执行速度越快.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/752075.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Day67:WEB攻防-Java安全JNDIRMILDAP五大不安全组件RCE执行不出网

知识点&#xff1a; 1、Java安全-RCE执行-5大类函数调用 2、Java安全-JNDI注入-RMI&LDAP&高版本 3、Java安全-不安全组件-Shiro&FastJson&JackJson&XStream&Log4j Java安全-RCE执行-5大类函数调用 Java中代码执行的类&#xff1a; GroovyRuntimeExecPr…

Dockerfile 语法详解

Dockerfile 是一种文本文件&#xff0c;用于定义如何构建 Docker 镜像。它包含一系列指令&#xff0c;用于创建镜像的各个层&#xff0c;最终生成一个可运行的容器。 语法格式 Dockerfile 的语法遵循以下格式&#xff1a; INSTRUCTION [ARGUMENTS]其中&#xff1a; INSTRUC…

如何使用机器学习构建自己的推荐系统?

一、说明 在广阔的电子商务领域&#xff0c;众多产品和服务都在争夺我们的注意力&#xff0c;推荐系统的作用变得至关重要。这些智能系统彻底改变了我们在线发现和接触产品的方式&#xff0c;使其成为现代电子商务平台成功的基石。 推荐系统&#xff0c;通常称为推荐引擎或简称…

机器学习入门:探索智能算法的世界 (上)

引言 在信息时代,数据与算法构成了新的基石,而机器学习则是连接它们的桥梁。机器学习,一门让计算机通过数据学习并做出决策的科学,正逐渐成为现代技术不可或缺的一部分。从个性化推荐系统、自动驾驶汽车到高级数据分析和预测模型,机器学习的应用几乎遍及每一个领域,它不…

谈谈对数据库索引的认识

索引的概念 索引是一种特殊的文件&#xff0c;包含着对数据表里所有记录的引用指针。 可以对表中的一列或多列创建索引&#xff0c;并指定索引的类型&#xff0c;各类索引有各自的数据结构实现。 索引的作用 默认情况下&#xff0c;进行条件查询操作&#xff0c;就是遍历表&a…

清理ubuntu空间

最近ubuntu空间告急&#xff0c;急需清理一下。 首先是apt的清理&#xff0c;apt中会留存很多的下载和安装文件&#xff0c;此时就需要&#xff1a; 先查看&#xff1a; du -sh /var/cache/apt/archives然后清理&#xff1a; sudo apt-get clean清理不需要的内核&#xff1a;…

企业数据流动安全管理软件(深度解析文章)

企业数据重要性不言而喻&#xff0c;而同时数据的流动和共享也带来了安全风险&#xff0c;如何确保企业数据在流动过程中的安全性&#xff0c;也成为了企业需要面临的重要问题。 企业数据流动安全管理软件的主要功能是监控和管理企业数据的流动过程。 它能够对企业内部的数据…

launchctl及其配置、使用、示例

文章目录 launchctl 是什么Unix / Linux类似的工具有什么哪个更常用配置使用常用子命令示例加载一个 launch agent:卸载一个 launch daemon:列出所有已加载的服务:启动一个服务:停止一个服务:禁用一个服务:启用一个服务: 附com.example.myagent.plist内容有趣的例子参考 launch…

vb.net+zxing.net随机彩色二维码、条形码

需要zxing库支持ZXing.NET Generate QR Code & Barcode in C# Alternatives | IronBarcode 效果图&#xff1a; 思路&#xff1a;先生成1个单位的二维码&#xff0c;然后再通过像素填充颜色&#xff0c;颜色数组要通过洗牌算法 洗牌算法 Dim shuffledCards As New List(…

牛客NC278 删除链表中重复的结点【中等 链表 Java,Go,PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/fc533c45b73a41b0b44ccba763f866ef 这题有一次面试某团的第一道题 思考 链表的基本操作参考答案Java import java.util.*; /*public class ListNode {int val;ListNode next null;ListNode(int val) {this.v…

【Linux杂货铺】进程的基本概念

目录 &#x1f308;前言&#x1f308; &#x1f4c1;进程的概念 &#x1f4c2;描述进程-PCB &#x1f4c2; 查看进程 &#x1f4c2; 查看正在运行的程序 &#x1f4c2;杀死进程 &#x1f4c2;通过系统调用获取进程标识符 &#x1f4c2;通过系统调用创建进程 &#x1f…

MongoDB聚合运算符:$first

文章目录 语法使用定义文档顺序数组操作缺失值的处理 举例数据缺失的情况在$setWindowFields阶段中使用 $first聚合运算符返回分组中第一个文档指定表达式的结果&#xff0c;只有分组文档是有序的情况下才有意义。 $first可用于下列阶段&#xff1a; $bucket$bucketAuto$grou…

初阶结构体

在这篇文章中我们只讲一些结构体的一些基础的知识&#xff0c;后续会继续补充关于结构体的高阶知识。 1.结构体声明 1.1结构体的基本知识 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 结构可以用来描述复杂对象&#xff0c;在…

day10-SpringBootWeb案例-1

一、准备工作 1 需求&环境搭建 步骤&#xff1a; 准备数据库表(dept、emp)创建 springboot 工程&#xff0c;引入对应的起步依赖&#xff08;web、mybatis、mysql 驱动、lombok&#xff09;配置文件 application.properties 中引入 mybatis 的配置信息&#xff0c;准备对应…

CI/CD实战-gitlab代码仓库 2

gitlab安装部署 实验虚拟机最小需求&#xff1a;4g内存&#xff0c;4核cpu 下载源&#xff1a;Index of /gitlab-ce/yum/el7/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 安装依赖性&#xff1a; 安装软件&#xff1a; 修改依赖性配置文件 重新自动化配置 登录…

如何在 iPhone 上使用蓝牙鼠标

iPhone 不支持使用传统的鼠标指针。 然而&#xff0c;有一个名为“AssistiveTouch”的功能可以在屏幕上模拟类似光标的指针。 启用它的方法如下&#xff1a; 打开 iPhone 上的“设置”应用程序。转到“辅助功能”。向下滚动并选择“触摸”。点击“辅助触控”。切换开关以打开 …

Rust 01.变量、类型、函数

转义输出&#xff1a; fn main() {let a 12;println!("a {{{}}}", a); } //a {12}type let is_true: bool true;println!("is_true {}", is_true);let is_false false;println!("is_false {}, {}", is_false, is_true);//char 在rust里面…

快速排序(数据结构)

1. 前言&#xff1a; 这两种排序经常使用&#xff0c;且在算法题中经常遇见。 这里我们简单分析讨论一下。 1. 快速排序 平均时间复杂度&#xff1a;O&#xff08;nlogn&#xff09; 最坏时间复杂度&#xff1a; O&#xff08;n^2&#xff09; 1.1. 左右向中遍历: 取最右侧4…

MiniGPT-5: 通过生成性视觉标记实现交错式视觉与语言生成

MiniGPT-5: Interleaved Vision-And-Language Generation via Generative Vokens 摘要 近年来&#xff0c;大型语言模型(LLM)在自然语言处理(NLP)领域的突破性进展引起了全球AI开发者的关注。这些模型在文本生成和理解方面设定了新的基准。然而&#xff0c;尽管在文本生成方面…

HarmonyOS NEXT应用开发—发布图片评论

介绍 本示例将通过发布图片评论场景&#xff0c;介绍如何使用startAbilityForResult接口拉起相机拍照&#xff0c;并获取相机返回的数据。 效果图预览 使用说明 通过startAbilityForResult接口拉起相机&#xff0c;拍照后获取图片地址。 实现思路 创建CommentData类&#…