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引擎(不 ...
随机推荐
- 微信小程序开卡步骤采坑过程艰难
在网上看到别人的文件觉得都不对,差点被带入坑里了.主要注意部分已标红. 会员卡的card_id 获取路径: 1.从公众号中的会员卡中获取 2.通过公众号创建卡券接口返回中获取 接口1:获取开卡插件参数 ...
- 栈——stack的用法
介绍 栈(stack)又名堆栈,它是一种运算受限的线性表.限定仅在表尾进行插入和删除操作的线性表.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进栈.入栈或压栈,它是把新元素放到 ...
- 删除resource中的图片后编译报错
同僚的一篇文章是:https://www.cnblogs.com/jljxxf/archive/2012/08/19/2646937.html, 详细介绍了C#的Resources,其中关于删除资源这 ...
- JZOJ 1967.【2011集训队出题】聪聪可可
题目 [2011集训队出题]聪聪可可 思路 看看做做 阴阳 这道题 极力推荐 自从做了这道题后,这些题就变成秒切的题了 很容易想到求节点到分治中心的距离,然后 \(\bmod 3\) 那么在求根节点一 ...
- JZOJ 5343. 【NOIP2017模拟9.3A组】健美猫
题面 其中 \(1 \leq n \leq 2 \times 10^6\) 分析 考虑每次移动,发现负数对答案贡献少 \(1\),非负数多 \(1\) 每次移动都加了 \(1\) 负数变非负数关键点在 ...
- Java对象布局
1. 引言 由于Java面向对象的思想,在JVM中需要大量存储对象,存储时为了实现一些额外的功能,需要在对象中添加一些标记字段用于增强对象功能 .在学习并发编程知识synchronized时,我们总是 ...
- javaSE学习二
使用Scanner实现用户交互 注意点:使用next方法时一定读取到有效字符后才能结束输入,有效字符前的空白自动去除,有效字符后的空白为结束符,next不能得到有空格的字符串. nextline方法以 ...
- es 6中for in与for of适用对象
在 ES6 中提供了 for-of,可以很方便的遍历数组和类数组,但是却不能遍历对象,这是为什么,与 for-in 仅仅相差一个单词,用途也是遍历,为什么却不能使用在对象上? 查资料后得知,原来 ES ...
- charles证书安装-客户端证书
1.iOS设置教程: 1)wifi中配置代理 2)浏览器中输入chls.pro/ssl,进行证书下载 3)证书下载成功后,设置--通用--描述文件–安装刚下载的证书 4)设置--通用--关于本机--证 ...
- 提升IIS权限
如何去修改IIS的权限 在IIS中当前网站高级设置中查看-应用程序池-修改标识-标识代表权限 可以通过调整应用程序池权限来维持后门. 安装IIS.支持.aspx脚本.是为了用木马查看权限. 上面的 ...