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. StartAllBack使用教程

    StartAllBack简介 StartAllBack是一款Win11开始菜单增强工具,为Windows11恢复经典样式的Windows7主题风格开始菜单和任务栏,功能包括:自定义开始菜单样式和操作, ...

  2. 一个javaweb的项目的思路

    马上就要期中考试了,把最近靠自己学的知识总结一下(自己学的),以下为eclipse的一个界面 可以看出,有很多内容.首先,有好几个包,Bean,Dao,servlet,service,Util,Uti ...

  3. Trie 的一类应用

    \(\text{Trie}\) 先从 [十二省联考 \(2019\)] 异或粽子 谈起 不难想到堆加可持久化 \(Trie\) 的做法 这就和 \(\text{[NOI2010]}\) 超级钢琴 类似 ...

  4. CF1250C Trip to Saint Petersburg

    题目传送门 思路 线段树入门题. 不妨固定一个右端点 \(r\),把所有右端点小于 \(r\) 的区间都在 \(1\) 至此区间的左端点处 update 一个 \(p\),然后每次都给区间 \(1\) ...

  5. 第24周SDAI缓解能否预测远期RA骨破坏受抑制

    第24周SDAI缓解能否预测远期RA骨破坏受抑制 Hirano F, et al. EULAR 2015. Present ID:THU0085. 原文 译文 THU0085 SDAI REMISSI ...

  6. CCRD_TOC_2008年第4期

    中信国健临床通讯 2008年第4期 目 录   类风湿关节炎 1.        大型系统评价分析:生物制剂与传统DMARD联用是MTX难治性RA患者的最佳治疗策略 Donahue KE, et al ...

  7. pycharm 关闭符号自动补全

    insert pair bracket 是三种括号的自动补全 insert pair quote 是两种引号的自动补全

  8. CF207C

    前言 学习 zzd 博客( 这题超级没有素质. 连个题解都搜不到. 好不容易搜到一个. 看了一下是 pascal. 不过还好我有办法. 树剖做 \(k\) 级祖先. 十万的俩老哥飘过. 三百毫秒优异成 ...

  9. Android获取获取悬浮窗一下的view办法

    getwindows可以获取当前手机屏幕所有有交互功能的view getactitywindows只能获取最顶层有交互的view

  10. JetBrains之全家桶破解

    JetBrains之全家桶破解(idea,rider....) 链接之....JETBRA.IN 打开上面的链接 随便点击下图中一个可用的链接,进入之后看下一步. 打开上一步的链接之后,下载下图中红框 ...