精品 | HIVE优化浅谈「建议收藏」

精品 | HIVE优化浅谈「建议收藏」精品 | HIVE优化浅谈

大家好,欢迎来到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

(0)
上一篇 2022-12-17 14:20
下一篇 2022-12-17 14:40

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信