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引擎(不 ...
随机推荐
- 计算机网络基础07 DNS概述
1 什么是DNS Domain Name System(域名系统),它是一个应用层的服务.它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网.当前,对于每一级域名长度的限制是 ...
- C#NPOI操作Excel,实现Excel数据导入导出(支持多个sheet)
首先在项目中引用NPOI,通过管理NuGet程序包,搜索NPOI,选择版本2.3.0(支持.NET Framework 4.0)根据自己项目选择适当版本. 1.NpoiExcelHelper.cs ...
- Maven依赖冲突解决总结
转载请注明出处: 1.Jar包冲突的通常表现 Jar包冲突往往是很诡异的事情,也很难排查,但也会有一些共性的表现. 抛出java.lang.ClassNotFoundException:典型异常,主要 ...
- Node Sass could not find a binding for your current environment: Windows 64-bit with Node.js 1x.x
出现问题原因: nodejs和node-sass版本不匹配 解决办法: 下载node-sass指定版本的nodejs 1)node-sass的节点版本支持政策 ① 支持的 Node.js版本因版本而异 ...
- 0x04_My-OS实现自定义颜色
前言: 0x03我们提到: 把12(红色)用循环写入显存,每个像素点怎么显示都要看对应的显存地址,比如0xa0000到0xaffff就是每一个像素点的显存 你问为什么12就是红色,这些东西在主板出厂的 ...
- JZOJ 2020.07.27【NOIP提高组】模拟
总结 今天的题还好,不幸拿了 \(rank1\),只有 \(380pts\) 实际 \(AK\) 也不难 前三题都是思维题 后面一题其实不过是简单的数据结构优化 \(dp\) 的题 用 \(GSM\) ...
- 深入解读.NET MAUI音乐播放器项目(三):界面交互
UI设计的本质是对于产品的理解在界面中多种形式的映射,当需求和定位不同时,对相同的功能表达出了不同的界面和交互方式. 作为播放器,界面可以是千差万别的.<番茄播放器>的iOS平台上我开发了 ...
- Canvas:绘制圆形
函数 arc(x, y, radius, startAngle, endAngle, counterclockwise) 参数名 描述 x.y 圆心坐标轴 radius 圆的半径 startAngle ...
- DevExpress gridControl 字体居住
设置列的标题居中显示: Designer - Views -右侧输入框中输入Appearance-HeaderPanel-TextOptions-设置HAlignment为Center 设置单元格内容 ...
- 配置jupyter lab遇到 libffi.so.7缺失
问题描述 使用 jupyter lab password 命令 配置jupyter 密码 报错 思路 去换一个conda环境 找到其lib内部的 libffi.so.7文件 解决方法 ln -s 其他 ...