从输入输出角度分类
从实现方式分类
内置函数
Hive提供大量内置函数供开发者使用
查看函数用法的命令:desc function 函数名;
详情请看hive函数大全:hive函数大全
1)继承UDF类或GenericUDF类
2)重写evaluate()方法并实现函数逻辑
3)编译打包为jar文件
4)上传到正确的HDFS路径或linux本地路径
5)使用jar创建临时/永久函数
6)调用函数
临时函数:临时创建,退出终端后函数消失,在函数的有效期内,所有的数据库都可以使用;
永久函数:永久性使用,需要将jar包放到hdfs上,切换到其他数据库不可用;
练习请看如下链接:hive自定义函数
事务(Transaction )指一组单元化操作,这些操作要么都执行,要么都不执行
ACID特性
Hive事务的特点和局限
V0.14版本开始支持行级事务
局限
使用较少
Hive事务的开启和设置
-- 通过命令行方式开启事务
set hive.support.concurrency = true;
set hive.enforce.bucketing = true;
set hive.exec.dynamic.partition.mode = nonstrict;
set hive.txn.manager = org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;
set hive.compactor.initiator.on = true;
set hive.compactor.worker.threads = 1;
-- 通过配置文件hive-site.xml
<property>
<name>hive.support.concurrencyname>
<value>truevalue>
property>
<property>
<name>hive.txn.managername> <value>org.apache.hadoop.hive.ql.lockmgr.DbTxnManagervalue>
property>
Hive PLSQL:Hive存储过程(v2.0之后)
在Hive2 bin目录下运行./hplsql
./hplsql -f plsql_demo.pl
RETURNS STRING
BEGIN RETURN 'Hello, ' || text || '!';
END;
Print hello(' word')
CREATE PROCEDURE getCount()
BEGIN DECLARE cnt INT = 0;
SELECT COUNT(*) INTO cnt FROM employee;
PRINT 'Users cnt: ' || cnt;
END;
call getCount();
EXPLAIN:显示查询语句的执行计划,但不运行
语法:
EXPLAIN [EXTENDED|DEPENDENCY|AUTHORIZATION] hive_query
ANALYZE:分析表数据,用于执行计划选择的参考
ANALYZE TABLE employee COMPUTE STATISTICS;
ANALYZE TABLE employee_partitioned
PARTITION(year=2014, month=12) COMPUTE STATISTICS;
ANALYZE TABLE employee_id COMPUTE STATISTICS
FOR COLUMNS employee_id;
Hive支持将作业自动转换为本地模式运行
-- 通过以下设置开启本地模式
SET hive.exec.mode.local.auto=true; --default false
SET hive.exec.mode.local.auto.inputbytes.max=50000000;
SET hive.exec.mode.local.auto.input.files.max=5; --default 4
Job必须满足以下条件才能在本地模式下运行
通过JVM重用减少JVM启动的消耗
-- 通过以下设置开启JVM重用
set mapred.job.reuse.jvm.num.tasks = 5; -- 默认值为1
并行执行可提高集群利用率
-- 通过以下设置开启并行执行
SET hive.exec.parallel=true; -- default false
SET hive.exec.parallel.thread.number=16; -- default 8,定义并行运行的最大数量
自动启动Map端Join
防止数据倾斜set hive.optimize.skewjoin=true;
启用CBO(Cost based Optimizer)
set hive.cbo.enable=true;
set hive.compute.query.using.stats=true;
set hive.stats.fetch.column.stats=true;
set hive.stats.fetch.partition.stats=true;
启动Vectorization(矢量化)
set hive.vectorized.execution.enabled = true;
set hive.vectorized.execution.reduce.enabled = true;
使用CTE、临时表、窗口函数等
某些节点计算的能力较差或者由于此节点需要计算的数据比较多,导致数据倾斜
在hive中产生数据倾斜的场景:
减少传输数据量,会极大提升MapReduce性能:采用数据压缩是减少数据量的很好的方式
常用压缩方法对比如下表:
压缩方式 | 可分割 | 压缩后大小 | 压缩解压速度 |
---|---|---|---|
gzip | 否 | 中 | 中 |
lzo | 是 | 大 | 快 |
snappy | 否 | 大 | 快 |
bzip2 | 是 | 小 | 慢 |