大家好,欢迎来到IT知识分享网。
简介: HIVE是数据仓库和交互式查询的优秀框架,但随着数据的增多,join的复杂度和性能问题,需要花时间和精力解决性能优化的问题。除了基于HIVE本身优化,还可以接入计算性能更好的框架,SparkSQL relational cache对使用者透明,开发不需要关心底层优化逻辑,将更多精力放入业务设计开发。
作者:邓力,entobit技术总监,八年大数据从业经历,由一代HADOOP入坑,深耕云计算应用领域,由从事亚马逊EMR和阿里云EMR应用开发逐步转入大数据架构领域,对大数据生态及框架应用有深刻理解。
引言
随着商务/运营同学执行的HQL越来越多,整体HIVE执行效率变低,本文从HIVE切入,分析HQL面临的问题和待优化部分,结合其他大数据框架来解决实际问题。以下内容没有针对业务代码提供优化建议.
常见的HQL
select型
设置hive.fetch.task.conversion=none会以集群模式运行,无论是否有limit。在数据量小时建议使用hive.fetch.task.conversion=more,此时select配合limit以单机执行获取样本数据,执行更快
常见的select配合order by/group by等基本操作不在此赘述
注:select查询可以通过split.maxsize和split.minsize控制并发MAPPER数量
insert型
分为两种
1.insert into
2.insert overwrite
配合分区可以达到重写分区或者在分区追加数据的目的。还可以配合动态分区模式插入对应分区
开启动态分区:
// 开启动态分区模式 set hive.exec.dynamic.partition=true; // 开启动态分区非严格模式(多分区时首分区支持动态分区必要条件,首分区为静态分区可以不设置) set hive.exec.dynamic.partition.mode=nonstrict; // 单节点上限 set hive.exec.max.dynamic.partitions.pernode=100; // 集群上限 set hive.exec.max.dynamic.partitions=1000;
IT知识分享网
开启之后可以利用SQL达到动态插入的目的:
IT知识分享网// 根据分区day动态插入数据 insert into table default.test partition(day) select id,day from orginal
CTAS
全称CREATE TABLE AS SELECT语句,语法和MYSQL类似,可以指定存储/压缩包等
// 采用parquet存储已准备配合SparkSQL使用 create table default.parquet_test stored as parquet as select * from default.test // 同时可以指定压缩格式 create table default.parquet_test stored as parquet TBLPROPERTIES ( 'orc.compress'='SNAPPY') as select * from default.test // 指定OSS作为存储(推荐) create table default.parquet_test stored as parquet location 'oss:xxx:yyy/parquet/test'
(因为内容较多,进行了文章删减,阅读全文可以通过点击下方“了解更多”进行浏览)
文章摘自:阿里云开发者社区
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/6210.html