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引擎(不 ...
随机推荐
- easyUI实现查询条件传递给后端并自动刷新表格的两种方法
easyUI实现查询条件传递给后端并自动刷新表格的两种方法 用ajax的post函数传递参数,再通过loadData方法将数据初始化到表格中 js代码: //根据id搜索 $("#stand ...
- vue-cli框架的下载以及框架目录介绍
目录 vue-cli框架的下载以及框架目录介绍 一.vue-cli创建项目 二.Vue项目目录介绍 vue-cli框架的下载以及框架目录介绍 一.vue-cli创建项目 在终端下载先下载cnpm # ...
- 教你用手机的NFC功能模拟门禁卡,实现出门不带卡
此教程教您将门禁卡.考勤卡.会员卡.停车卡.电梯卡等等各种卡片模拟进NFC手机里,从而用手机代替门禁卡 一.软硬件准备 NFC Tool 手机上的IC卡读写编辑软件,搭配蓝牙读卡器或者OTG读卡器,可 ...
- LG P3803 【模板】多项式乘法
\(\text{FFT}\) 模板 #include <cstdio> #include <iostream> #include <cmath> #define r ...
- python之路76 路飞项目 企业项目类型、软件开发流程、路飞项目需求、pip永久换源、虚拟环境、路飞项目前后端创建、包导入、后端项目目录调整
知识获取渠道 cnblogs csdn 掘金 思否 找工作app boss直骗.拉钩.智联.猎聘.脉脉(内推,hr). 企业项目类型 1.面向互联网用户:商城类项目 微信小程序商城 2.面向互联网用户 ...
- CF873F - Forbidden Indices
题意:对于一个字符串 \(S\),有一些位置是被 \(\text{Ban}\) 掉的. 对于这个字符串的所有子串,它的分数是(长度 \(\times\) 在没有被 \(\text{Ban}\) 掉的位 ...
- 07#Web 实战:仿 GitHub 个人主页项目拖拽排序
实现效果图 GitHub 和 Gitee 个人主页中可以对自己的项目进行拖拽排序,于是我就想自己实现一个.本随笔只是记录一下大概的实现思路,如果感兴趣的小伙伴可以通过代码和本随笔的说明去理解实现过程. ...
- Canvas:绘制文本
基础 画布除了绘制图形以外还可以绘制文本,画布中的文本可以设置字体大小.字体格式.对齐方式(横向和纵向对齐方式),并且还可以制作很炫酷的文本,比如渐变文字. 文本有以下三个属性,控制文本的字体大小.字 ...
- PostgreSQL性能优化综合案例 - 1
[测试模型] 设计一个包含INSERT, UPDATE, SELECT语句的业务模型用于本优化案例. [测试表] create table user_info (userid int, engname ...
- Mybatis-Plus 之BaseMapper 方法详解
package com.itheima.dao; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomido ...