HIVE 调优思路和实践
1,数据存储调优
1.1 设置压缩:
设置中间数据/输出结果压缩传输,使用snappy格式。
hive-site.xml:
set hive.exec.compress.output = true # 输出结果压缩 set hive.exec.compress.intermediate = true # 中间结果压缩
具体压缩算法配置:
mapred-default.xml(Hadoop 安装目录内):
mapreduce.map.output.compress = true # map任务输出压缩
mapreduce.map.output.compress.codec = Snappy #压缩算法
mapreduce.output.fileoutputformat.compress # reducer 输出压缩
mapreduce.output.fileoutputformat.compress.codec # reducer 压缩算法
mapreduce.output.fileoutputformat.compress.type #reducer 压缩类型
1.2 增加热数据的副本数. 减少传输延迟。
hdfs系统的副本数是固定的。这里是修改单个文件的副本数量。
在写入表(文件)时设置:
set dfs.replication=10; # dfs默认3
Insert overwrite table tmp.dim_test select * from other_table;
或者在hdfs 内,上传文件时修改;
hadoop dfs -D dfs.replication=2 -put dim_test.txt /***/
2,常见配置项调优
2.1 当查询的数据量足够小时,启用本地模式。
hive-site.xml:
hive.exec.mode.local.auto = true # 自动启动local 模式
hive.exec.mode.local.auto.inputbytes.max = 50000000 # 最大字节数的阈值
2.2 在一些可以设置并行执行的任务中,配置 parallel
可以运行并行的任务,比如 在join 之前,对多个数据源的处理。 还有移动多个数据源插入目标表。
hive.exec.parallel = true # 并行运行
hive.exec.parallel.thread.number = 8 # 最多线程数
2.3 Fetch task获取数据,直接读取文件,不MR。 某些简单操作适用。
hive.fetch.task.conversion = more # 对 SELECT, FILTER, LIMIT only UDFs, 有效
2.4 更换执行引擎: spark tez mr
hive.execution.engine = spark # 设置spark引擎
3,计算代码级调优
3.1,去重算法调优
不可使用DISTINCT;Hive去重最佳方法----row_number() ,模拟了分区排序。map 内分区排序,reduce内 归并排序,效率高。
举例对 客户表(id , name , order_id , data )去重, 假设数据量非常大。
3.2 排序算法
order by :一个reduce,全局排序,性能差。 数据量较少时,可以使用
sort by : map端排序完成,分区输出,局部有序。
distribute by:按照指定的字段对数据进行划分到不同的输出reduce
cluster by 除了具有 distribute by 的功能外还兼具 sort by 的功能,建议使用。
4,常见问题调优
4.1 、小文件太多如何调优
4.1.1,调用 hdfs的方法合并小文件,sync() append() 文件层面; 或者使用hadoop 管理命令合并;
举例 : 每日产生大量product_info_* 的文件, 合并这些文件
hadoop fs -getmerge /hdfs_path/product_info_* /local_path/product_inf # 合并后保存到本地 hadoop fs -put /local_path/product_inf /hdfs_path # 合并文件再上传到hdfs
4.1.2, Hadoop archive 命令, 解决对于NN 内存问题。 但是不能解决计算中的问题
可以更有效的把大量小文件打包放入block,因此减少NameNode压力。
hadoop archive -archiveName name -p <parent> <src>* <dest> # 打包成 .har文件
4.1.3,SequenceFile ,使用文件名作为 key,文件内容作为 value。支持mr分块处理,支持压缩
最好将源数据直接写入 SequenceFile,而不是作为中间步骤写入小文件。
4.2 、数据倾斜如何调优
本质原因是,1,发生大量数据的网络传输 2,磁盘IO速度缓慢
4.2.1 配置项
hive.optimize.skewjoin=true; #默认false,如果存在数据倾斜可能性,可以将其设置为true SET hive.skewjoin.key=100000; #默认为100000,如果key的数量大于配置的值,则超过的数量的key对应的数据会被发送到其他的reduce任务 hive.groupby.skewindata=true #在分组任务,首先额外触发一个mr作业,该作业的map任务的输出会被随机地分配到reduce任务上,从而避免数据倾斜 hive.auto.convert.join=true # 大表和小表连接问题, 新版可以配置后,自动识别到此情况。
4.2.2 代码级
1,行列裁剪; 2个都是分桶表,连接key是分桶字段。 只读取需要的桶数据。
select name , order from table_a where date >= '2008-03-01' AND date <= '2008-03-31'
2,大表和大表连接问题
1,Key 字段加随机字段,把分区打散。
比如, a 和 b 表连接,连接的key集中于 date = 20200120
2,把2个表定义为 ”有序分桶表“ 使用 BUCKET MAP JOIN / SORT MERGE BUCKET MAP JOIN // 分桶 有序
HIVE 调优思路和实践的更多相关文章
- MySQL面试必考知识点:揭秘亿级高并发数据库调优与最佳实践法则
做业务,要懂基本的SQL语句: 做性能优化,要懂索引,懂引擎: 做分库分表,要懂主从,懂读写分离... 数据库的使用,是开发人员的基本功,对它掌握越清晰越深入,你能做的事情就越多. 今天我们用10分钟 ...
- [转]10分钟梳理MySQL知识点:揭秘亿级高并发数据库调优与最佳实践法则
转:https://mp.weixin.qq.com/s/RYIiHAHHStIMftQT6lQSgA 做业务,要懂基本的SQL语句: 做性能优化,要懂索引,懂引擎: 做分库分表,要懂主从,懂读写分离 ...
- 【Hive】Hive笔记:Hive调优总结——数据倾斜,join表连接优化
数据倾斜即为数据在节点上分布不均,是常见的优化过程中常见的需要解决的问题.常见的Hive调优的方法:列剪裁.Map Join操作. Group By操作.合并小文件. 一.表现 1.任务进度长度为99 ...
- Hive调优相关
前言 Hive是由Facebook 开源用于解决海量结构化日志的数据统计,是基于Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类 SQL查询功能. 在资源有限的情况下,提 ...
- 【原创 Hadoop&Spark 动手实践 8】Spark 应用经验、调优与动手实践
[原创 Hadoop&Spark 动手实践 7]Spark 应用经验.调优与动手实践 目标: 1. 了解Spark 应用经验与调优的理论与方法,如果遇到Spark调优的事情,有理论思考框架. ...
- 【Hive六】Hive调优小结
Hive调优 Hive调优 Fetch抓取 本地模式 表的优化 小表.大表Join 大表Join大表 MapJoin Group By Count(Distinct) 去重统计 行列过滤 动态分区调整 ...
- MySQL性能调优思路
1.MySQL性能调优思路 如果一台服务器出现长时间负载过高 /周期性负载过大,或偶尔卡住如何来处理? 是周期性的变化还是偶尔问题?是服务器整体性能的问题, 还是某单条语句的问题? 具体到单条语句, ...
- Hive调优笔记
Hive调优 先记录了这么多,日后如果有遇到,再补充. fetch模式 <property> <name>hive.fetch.task.conversion</name ...
- (转) hive调优(2)
hive 调优(二)参数调优汇总 在hive调优(一) 中说了一些常见的调优,但是觉得参数涉及不多,补充如下 1.设置合理solt数 mapred.tasktracker.map.tasks.maxi ...
- (转)hive调优(1) coding调优
hive 调优(一)coding调优 本人认为hive是很好的工具,目前支持mr,tez,spark执行引擎,有些大公司原来封装的sparksql,开发py脚本,但是目前hive支持spark引擎(不 ...
随机推荐
- 洛谷p5723
1 #include<bits/stdc++.h> 2 using namespace std; 3 int z(int a) 4 { 5 if(a==2) return 1; 6 if( ...
- 线程私有变量ThreadLocal详解
本文已收录至Github,推荐阅读 Java随想录 微信公众号:Java随想录 CSDN: 码农BookSea 烈火试真金,逆境试强者.--塞内加 目录 什么是ThreadLocal ThreadLo ...
- Visual Studio更改项目文件夹名称
一.VS打开项目解决方案(按以下顺序操作) PS:如果已经出错,打不开.sln文件,就从第三步开始操作,进入目录更改对应其.csproj文件名称即可 1.选择要更改的项目或类库,右键属性,更改程序集名 ...
- Visual Studio 集成了.NET 升级助手插件
.NET团队2023年2月16日在官方博客上发布了名为".NET Upgrade Assistant"的全新 Visual Studio 扩展,帮助开发人员升级.NET 应用程序. ...
- vue3+element表格数据导出
实现效果 导出后的效果: 步骤 第一步:安装依赖 npm install --save xlsx file-saver 第二步:给表格添加id,导出的时候需要用到 <!-- 导出按钮 --> ...
- 调用后台接口实现Excel导出功能以及导出乱码问题解决
实现效果 在导出表格数据的时候,通常分为两种情况 页面列表数据导出 接口返回数据导出 这里主要介绍接口返回数据导出,关于页面的列表数据导出,请看另一篇:vue3+element表格数据导出 接口返回数 ...
- JZOJ 5372. 【NOIP2017提高A组模拟9.17】猫
题目大意 对于 \(m = [1,\lfloor \frac n 2 \rfloor]\) 要求在一个序列中恰好选出 \(m\) 个不相邻的数使得权值和最大 其中 \(1\) 的左边是 \(n\),\ ...
- 10.MyBatis-Plus的使用
整合MyBatis-Plus 导入依赖 在解决逆向工程生成的代码报错时候已经给bianen-common导入了依赖 导入数据库的驱动 导入驱动和MySql的版本有关,我安装的MySql版本是5.7.3 ...
- Solidity8.0-02
对应崔棉大师 26-40课程https://www.bilibili.com/video/BV1yS4y1N7yu/?spm_id_from=333.788&vd_source=c81b130 ...
- 让启动的jar包能打断点
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar rbpsems-web-2.0.0-SNAP ...