hive相关操作

文章详细介绍了Hive的各种配置方法,包括设置表头、查看历史命令,以及Hive的事务处理。还探讨了Beeline的使用和Hive的性能优化策略,如事务、并行执行、MapJoin、排序和聚合操作,以及小文件管理和JVM重用等。
摘要由CSDN通过智能技术生成

在这里插入图片描述

hive命令终端

设置表头

  • 方式一:
在配置文件hive-site.xml中设置
  • 方式二:
hive --hiveconf hive.cli.print.header=true
  • 方式三:
1、在进行终端后通过set;查看可以设置的所有配置;
2、通过 set hive.cli.print.header; 查看默认配置;
3、通过 set hive.cli.print.header=true; 设置新的配置值
  • 方式四:
在家目录中的.hiverc文件(如没有可以自行创建)中键入
set hive.cli.print.header=true
之后只需输入hive命令便可以读取相应的配置

hive历史命令查看

在用户家目录中有一个.hivehisotry的文件,此文件中存放着该用户所有执行过的hive命令

hive 命令

hive等同于 hive --service cli
可以通过hive --service cli --help查看可以设置的选项
eg: 通过hive -d xxx=1进入后可以通过${xxx}来获取到变量
hive -i init.sql会在进入命令行时执行init.sql中的sql
在命令行中如果想要执行命令行外部的sql文件,可以通过source xxx.sql执行

hive的事务

事务一般不使用,而且有许多限制,比如表一定要是分桶的

beeline

分两步操作时:
beeline
! connect jdbc:hive2://xxx:10000/default user pwd

hive优化

explain [extended] xxxsql
默认开启fetch策略,保证部分任务不走mr:set hive.fetch.task.conversion=more/none
测试时可以开启本地模式加速:set hive.exec.mode.local.auto=true
note:hive.exec.mode.local.auto.inputbytes.max=128M,如果输入数据量大于此,则亦会走集群模式,如加载文件数量大于配置值同样会走集群模式
开启并行模式:set hive.exec.parallel=true
note:默认情况下最多允许8个job并行执行 set hive.exec.parallel.thread.number=8;

开启严格模式:set hive.mapred.mode=strict; 默认nonstrict;
note:会对存在分区列的表必须有where分区列限制
order by 必须有limit
限制笛卡尔积查询

在动态分区严格模式下set hive.exec.dynamic.partition.mode=strict,动态写入技巧
insert into table test partition(age=1,sex) select id,name,/age,/ sex from test2;

hive排序:
1、order by 会进行全排序,只有一个reduce,数据量在会导致超出内存限制失败(最好慎用,或结合limit使用)
2、使用sort by 加 distribute by 进行替换order by(可以保证多个reduce),sort by 对每个reduce内部进行排序, distribute by对于多个reduce之间进行排序
cluster by是sort by + distribute by的简写
但cluster by 不能通过asc,desc进行排序,只能distribute by xxx [asc|desc] sort by yyy [asc|desc]

hive join
map join:
两种方式:
1、手动实现(对表顺序无要求)
select /+ MAPJOIN(smallTable)/ smallTable.key,bigTable.value from smalltable join bigtable on smallTable.key=bigTable.key;
2、开启自动mapjoin(对表顺序有要求,判断是否作为小表加载以hive.mapjoin.smalltable.filesize=25000000为阈值,25M)
set hive.auto.convert.join=true;
note:在两个同时存在的情况下,默认以自动方式执行set hive.ignore.mapjoin.hint=true;
(是否忽略mapjoin手动标记)
hive join时,多个连接尽量使用相同的列,多个列会转为多个mr任务,相同的列只会转为一个mr任务。

map端聚合
set hive.map.aggr=true;
hive.groupby.mapaggr.checkinterval=10000
hive.map.aggr.hash.min.reduction=0.5配置比例判断是否进行map combine
hive.map.aggr.hash.percentmemory
hive.groupby.skewindata是否对mr转为两次mr默认false

合并小文件
1、会对hdfs造成压力
2、mr时io压力
map端合并输出:hive.merge.mapfiles=true
reduce端合并输出:hive.merge.mapredfiles=true
合并文件阈值:hive.merge.size.per.task=25610001000

去重统计
将count distinct转为count group by,避免只有一个reduce

map与reduce task数量
mapred.reduce.tasks
hive.exec.reducers.bytes.per.reducer
hive.exec.reducers.max每个任务的最大reduce数
mapred.max.split.size
mapred.min.split.size.per.node
mapred.min.split.size.per.rack

hive jvm 重用
1、小文件多
2、task数多
set mapred.job.reuse.jvm.num.tasks=n;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值