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. 和ChatGPT聊了一会天它的学习反映能力惊呆了我

    我:用java写一段玫瑰花 ChatGPT:您可以使用 Java 绘制玫瑰花.以下是一段代码: import java.awt.*; import javax.swing.*; public clas ...

  2. JAVA虚拟机21---JAVA内存模型

    1.Amdahl定律和摩尔定律 并发处理的广泛应用是Amdahl定律代替摩尔定律成为计算机性能发展源动力的根本原因,也是人类压榨计算机运算能力的最有力武器. Amdahl定律通过系统中并行化与串行化的 ...

  3. springcloud04 Ribbbon

    Ribbbon虽然现在已经进入维护模式了,但是使用的还是很多的. 1.官网 https://github.com/Netflix/ribbon/wiki/Getting-Started 2.Ribbo ...

  4. 亲测有效! Scrutiny 网站SEO检测及优化工具 V12.6.1 for mac

    亲测有效! Scrutiny 网站SEO检测及优化工具  V12.6.1 for mac Scrutiny是一款网站SEO工具,它能够自动检测目标网站的坏链.HTML验证.描述Description. ...

  5. 微信小程序开卡步骤采坑过程艰难

    在网上看到别人的文件觉得都不对,差点被带入坑里了.主要注意部分已标红. 会员卡的card_id 获取路径: 1.从公众号中的会员卡中获取 2.通过公众号创建卡券接口返回中获取 接口1:获取开卡插件参数 ...

  6. day13-自定义拦截器

    自定义拦截器 1.什么是拦截器 说明: 拦截器与过滤器的区别 SpringMVC 的拦截器(Interceptor)与 Java Servlet 的过滤器(Filter)类似,它主要用于拦截用户的请求 ...

  7. 自己从零写操作系统GrapeOS——1.GrapeOS介绍

    为了学习操作系统原理我自己写了一个简单的操作系统,取名叫GrapeOS. GrapeOS是一个x86多任务桌面操作系统,但非常简单,代码只有4千行. 下面我来简单介绍一下GrapeOS的功能. 1.桌 ...

  8. Spring依赖注入问题

    记录一下最近复习的Spirng依赖注入问题 主要介绍两个注入方式 也是用的最多的 1.构造方法注入 2.Setter注入. 参考文档:https://blog.csdn.net/weixin_5541 ...

  9. LeetCode-2055 蜡烛之间的盘子 及库函数 lower_bound 和 upper_bound学习使用

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/plates-between-candles 题目描述 给你一个长桌子,桌子上盘子和蜡烛排成一列. ...

  10. 苹果手机第一次fixed没有达到预期效果,滚动下页面就正常了

    我们用ul li实现了一个视频列表,一共两列,点击其中一个播放时,会将该li设置为position: fixed;width:90%;也就是变成了一个弹窗的样式.安卓手机一切正常,然而当看到苹果,我- ...