本文共 4009 字,大约阅读时间需要 13 分钟。
从输入输出角度分类
从实现方式分类
内置函数
Hive提供大量内置函数供开发者使用查看函数用法的命令:desc function 函数名;
1)继承UDF类或GenericUDF类 2)重写evaluate()方法并实现函数逻辑 3)编译打包为jar文件 4)上传到正确的HDFS路径或linux本地路径 5)使用jar创建临时/永久函数 6)调用函数
临时函数:临时创建,退出终端后函数消失,在函数的有效期内,所有的数据库都可以使用; 永久函数:永久性使用,需要将jar包放到hdfs上,切换到其他数据库不可用; 练习请看如下链接:事务(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.xmlhive.support.concurrency true hive.txn.manager org.apache.hadoop.hive.ql.lockmgr.DbTxnManager
Hive PLSQL:Hive存储过程(v2.0之后)
在Hive2 bin目录下运行./hplsql
./hplsql -f plsql_demo.plRETURNS 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 | 是 | 小 | 慢 |
转载地址:http://xcjxi.baihongyu.com/