Hive总结:
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。
一、Hive优化总结:
1、通过fetch抓取:针对Hive中对某些情况的查询可以不必使用MapReduce计算,节省申请资源的开销。
eg:select * from table
fetch 抓取配置
hive.fetch.task.conversion 默认值 从1.0版本以上为 more ,在0.x版本是 minimal
可选值:
none : 如果配置了这个参数, 那么所有的查询的SQL 都会执行MR
minimal : 执行 select *|字段 from 表 的时候, 可以不走MR的. 其余全走
more : 执行 select * | 字段 以及在全局查找、字段查找、limit查找等都不走MR
2、 hive的本地模式: 对于数据量较小的情况,执行MR的时候, 让hive不要提交YARN平台, 类似于像在IDEA中执行MR一样
如何开启本地模式:
set hive.exec.mode.local.auto=true; 默认值为false
什么时候会执行本地:
set hive.exec.mode.local.auto.inputbytes.max=51234560; 输入的数据量大小 ,默认大小为 128M
set hive.exec.mode.local.auto.input.files.max=10; 输入的文件数量 默认为 4
在开发中, 测试环境下, 一般要开启本地模式, 在生产环境中正常对数据进行操作, 开不开无所谓了。
3、Join端优化:
动态分区:
场景就是讲一个分区表的数据加载到另一个分区表的情况:不要一个一个分区字段的添加,动态加载分区字段实现。
如果要使用动态分区, 必须先设置一下内容:
set hive.exec.dynamic.partition=true; 开启动态分区, 默认为 true
set hive.exec.dynamic.partition.mode=nonstrict; 打开非严格模式 默认为: strict严格模式
set hive.exec.max.dynamic.partitions=1000;
set hive.exec.max.dynamic.partitions.pernode=100
动态分区的SQL:
insert into table 表 partition (分区字段) select ....分区字段 from 表 ;
注意: 查询的SQL的最后面必须是分区字段
数据倾斜:
行列过滤