实战项目中关于hive的优化调优

主要从四个方面进行优化:

注意:hive的性能好坏绝对与数据量的大小无关,就好比如你便秘跟你吃饭的多少有关系吗

1.分区表

经常被使用的字段_dt,设置为分区表

举措:对常用的查询字段采用分区技术 

2.分桶表:

哈希散列,一系列的记录按照哈希散列进行分布,一个分桶中会有多个不同的值,如果一个分桶中包含了某个值,那么这个值的所有的记录必然在这个分桶中。

分桶用到的场景:

1.加快join查询的一个速度:两个必须得是分桶表而且个数还得相同。在map时候都知道记载哪个桶了,所以在join会效率提升

2.采样:比如我们去分析一个数据的中位数,最大值最小值的统计,如果做这样的一个计算还需要全表扫描就很耗费性能,如果用了一个分桶表,从分桶表里拿一个数据,就能节省性能,因为这个数是一个哈希散列。

举措:对需要进行join和采样的情况,进行分桶操作

3.存储格式:

orc和parquet:均为列式存储

我们在维度建模的时候,在建的宽表一定要用orc格式,orc查询速度会比较快

举措:在建表时候选择列式存储,最好选用orc格式,提高查询速度

4.压缩格式:

决定mr的瓶颈是io,怎么解决io呢?那就是减少数据量,与磁盘的交互少了,时间就短了。

但是压缩的过程又要消耗cpu。

压缩方式:需要考虑的三要素:压缩率,压缩速度,是否可切片

其中gzip压缩率好但压缩效率低且不可分片,snappy不可分片但压缩速度快, lzo是可切片且压缩速度快,

选择lzo是最优的

5.合理设置map数、reduce数和小文件的处理:

        5.1 Map数:

是不是保证每个map处理接近128m的文件块,就高枕无忧了?

答案也是不一定。比如有一个127m的文件,正常会用一个map去完成,但这个文件只有一个或者两个小字段,却有几千万的记录,如果map处理的逻辑比较复杂,用一个map任务去做,肯定也比较耗时。

针对上面的问题2和3,我们需要采取两种方式来解决:即减少map数和增加map数;

        5.2对小文件进行合并:

6种方法:map执行前、map_only结束、map-reduce结束、per.task大小、smallfiles.avgsize、per.task大小

  1. Map执行前
    set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;--在 map 执行前合并小文件,以此来减少 map数:CombineHiveInputFormat 具有对小文件进行合并的功能
  2. //输出合并小文件
    SET hive.merge.mapfiles = true;--在 map-only 任务结束时合并小文件,默认 true
    SET hive.merge.mapredfiles = true;--在 map-reduce 任务结束时合并小文件,默认 false
    SET hive.merge.size.per.task = 268435456;--合并文件的大小,默认 256M
    SET hive.merge.smallfiles.avgsize = 16777216;--当输出文件的平均大小小于该值时,启动一个独立的 map-reduce 任务进行文件 merge
  3. Reduce数调整测试

        set hive.exec.reducers.bytes.per.reducer=256000000; 这个参数设置每个reduce任务处理的数据大小,可以动态计算reduce数量

 

5.3 Reduce数:

(1)过多的启动和初始化Reduce也会消耗时间和资源;

(2)另外,有多少个Reduce,就会有多少个输出文件,如果生成了很多个小文件,那么如果这些小文件作为下一个任务的输入,则也会出现小文件过多的问题;

在设置Reduce个数的时候也需要考虑这两个原则:处理大数据量利用合适的Reduce数;使单Reduce任务处理数据量大小要合适;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340