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 调优思路和实践的更多相关文章

  1. MySQL面试必考知识点:揭秘亿级高并发数据库调优与最佳实践法则

    做业务,要懂基本的SQL语句: 做性能优化,要懂索引,懂引擎: 做分库分表,要懂主从,懂读写分离... 数据库的使用,是开发人员的基本功,对它掌握越清晰越深入,你能做的事情就越多. 今天我们用10分钟 ...

  2. [转]10分钟梳理MySQL知识点:揭秘亿级高并发数据库调优与最佳实践法则

    转:https://mp.weixin.qq.com/s/RYIiHAHHStIMftQT6lQSgA 做业务,要懂基本的SQL语句: 做性能优化,要懂索引,懂引擎: 做分库分表,要懂主从,懂读写分离 ...

  3. 【Hive】Hive笔记:Hive调优总结——数据倾斜,join表连接优化

    数据倾斜即为数据在节点上分布不均,是常见的优化过程中常见的需要解决的问题.常见的Hive调优的方法:列剪裁.Map Join操作. Group By操作.合并小文件. 一.表现 1.任务进度长度为99 ...

  4. Hive调优相关

    前言 Hive是由Facebook 开源用于解决海量结构化日志的数据统计,是基于Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类 SQL查询功能. 在资源有限的情况下,提 ...

  5. 【原创 Hadoop&Spark 动手实践 8】Spark 应用经验、调优与动手实践

    [原创 Hadoop&Spark 动手实践 7]Spark 应用经验.调优与动手实践 目标: 1. 了解Spark 应用经验与调优的理论与方法,如果遇到Spark调优的事情,有理论思考框架. ...

  6. 【Hive六】Hive调优小结

    Hive调优 Hive调优 Fetch抓取 本地模式 表的优化 小表.大表Join 大表Join大表 MapJoin Group By Count(Distinct) 去重统计 行列过滤 动态分区调整 ...

  7. MySQL性能调优思路

    1.MySQL性能调优思路 如果一台服务器出现长时间负载过高 /周期性负载过大,或偶尔卡住如何来处理? 是周期性的变化还是偶尔问题?是服务器整体性能的问题, 还是某单条语句的问题? 具体到单条语句, ...

  8. Hive调优笔记

    Hive调优 先记录了这么多,日后如果有遇到,再补充. fetch模式 <property> <name>hive.fetch.task.conversion</name ...

  9. (转) hive调优(2)

    hive 调优(二)参数调优汇总 在hive调优(一) 中说了一些常见的调优,但是觉得参数涉及不多,补充如下 1.设置合理solt数 mapred.tasktracker.map.tasks.maxi ...

  10. (转)hive调优(1) coding调优

    hive 调优(一)coding调优 本人认为hive是很好的工具,目前支持mr,tez,spark执行引擎,有些大公司原来封装的sparksql,开发py脚本,但是目前hive支持spark引擎(不 ...

随机推荐

  1. DataGrid 设置某列可见或只读

    在ASP.NET中使用 DataGrid数据展示控件时,可以对数据进行展示,编辑,删除,在有些时候不希望某列被修改,进行如下设置 点击编辑后 想要如下效果  其中权限编码和权限分类不希望修改 设置方法 ...

  2. 解决VS2019 DevExpress工具不显示问题

    一.序言 环境:NetFramework4.5,vs2019社区板 ,DevExpress 14.2.3 项目类型:winfrom 二.解决 找到DevExpress安装路径下的Bin\Framewo ...

  3. Vue3

    VUE.3 1.前端工程化: 小白视角 会写HTML. css.JavaScript就会前端开发 需要美化页面的样式,就拽一个bootstrap来 需要操作DOM或者发起Ajax请求,就再拽一个Jqu ...

  4. 工控领域上云实践-Zstack和软赢

    工业以太网常见五大协议对比 大规模电机控制的方案选择-电机和驱动器篇 大规模电机控制的方案选择-控制器篇 工控领域有各种各样的总线来通讯以控制设备,很小众的接口规范慢慢的更小众了,最常见的接口规范就是 ...

  5. Centos7下areaDetector IOC的编译

    准备: Centos7ministall的系统: root权限下: yum install -y epel-release yum install -y git wget gcc gcc-c++ au ...

  6. SVN服务器的安装与使用

    一.下载服务端和客户端安装包 百度网盘: 链接:https://pan.baidu.com/s/1QkNbLR9ZkcYPiBp6d_drlQ 提取码:tmi5 也可以在官网自行下载. 二.服务端安装 ...

  7. js中的Object.keys、array.map、groupBy、call、apply总结分享

    分享几个js中的函数 Object.keys() 首先这个函数是用来干嘛的呢?是用来把一个json字符串里的key全都取出来重新整成一个数组的方法,那么这个函数怎么用呢,接下来贴出我最近碰见的用法: ...

  8. JZOJ 100149. 一道联赛A题

    \(\text{Solution}\) 一眼 \(ODT\) 为避免每次都数颜色数量,提前记录下来,每次修改更新下 \(\text{Code}\) #include <cstdio> #i ...

  9. Ansible介绍以及基于角色搭建LNMP和zabbix

    1 ansible 常用指令总结,并附有相关示例. /usr/bin/ansible 主程序,临时命令执行工具 /usr/bin/ansible-doc 查看配置文档,模块功能查看工具,相当于man ...

  10. HTML+css图片轮播

    <div class="pst"> <div class="pin"> <div style="background-i ...