个人认为总体两种思想:
1、让服务器尽可能的多做事情,榨干服务器资源,以最高系统吞吐量为目标
再好的硬件没有充分利用起来,都是白扯淡。
比如:
(1) 启动一次job尽可能的多做事情,一个job能完成的事情,不要两个job来做
通常来说前面的任务启动可以稍带一起做的事情就一起做了,以便后续的多个任务重用,与此紧密相连的是模型设计,好的模型特别重要.
(2) 合理设置reduce个数
reduce个数过少没有真正发挥hadoop并行计算的威力,但reduce个数过多,会造成大量小文件问题,数据量、资源情况只有自己最清楚,找到个折衷点,
(3) 使用hive.exec.parallel参数控制在同一个sql中的不同的job是否可以同时运行,提高作业的并发
2、让服务器尽量少做事情,走最优的路径,以资源消耗最少为目标
比如:
(1) 注意join的使用
若其中有一个表很小使用map join,否则使用普通的reduce join,注意hive会将join前面的表数据装载内存,所以较小的一个表在较大的表之前,减少内存资源的消耗
(2)注意小文件的问题
在hive里有两种比较常见的处理办法
第一是使用Combinefileinputformat,将多个小文件打包作为一个整体的inputsplit,减少map任务数
set mapred.max.split.size=256000000;
set mapred.min.split.size.per.node=256000000
set Mapred.min.split.size.per.rack=256000000
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat
第二是设置hive参数,将额外启动一个MR Job打包小文件
hive.merge.mapredfiles = false 是否合并 Reduce 输出文件,默认为 False
hive.merge.size.per.task = 256*1000*1000 合并文件的大小
(3) 注意数据倾斜
在hive里比较常用的处理办法
第一通过hive.groupby.skewindata=true控制生成两个MR Job,第一个MR Job Map的输出结果随机分配到reduce做次预汇总,减少某些key值条数过多某些key条数过小造成的数据倾斜问题
第二通过hive.map.aggr = true(默认为true)在Map端做combiner,假如map各条数据基本上不一样, 聚合没什么意义,做combiner反而画蛇添足,hive里也考虑的比较周到通过参数hive.groupby.mapaggr.checkinterval = 100000 (默认)hive.map.aggr.hash.min.reduction=0.5(默认),预先取100000条数据聚合,如果聚合后的条数/100000>0.5,则不再聚合
(4)善用multi insert,union all
multi insert适合基于同一个源表按照不同逻辑不同粒度处理插入不同表的场景,做到只需要扫描源表一次,job个数不变,减少源表扫描次数
union all用好,可减少表的扫描次数,减少job的个数,通常预先按不同逻辑不同条件生成的查询union all后,再统一group by计算,不同表的union all相当于multiple inputs,同一个表的union all,相当map一次输出多条
(5) 参数设置的调优
集群参数种类繁多,举个例子比如
可针对特定job设置特定参数,比如jvm重用,reduce copy线程数量设置(适合map较快,输出量较大)
如果任务数多且小,比如在一分钟之内完成,减少task数量以减少任务初始化的消耗。可以通过配置JVM重用选项减少task的消耗
相关推荐
Hive思维导图之Hive优化
hive优化总结 Hive优化总结是Hive性能优化的总结,涉及HIVE的参数设置、HQL语言的写法、JOIN操作的优化、MapReduce操作的优化、列裁剪、分区裁剪等多个方面。 1. 配置文件优化 Hive的配置文件hive-site.xml是Hive...
作为企业Hadoop应用的核心产品,Hive承载着FaceBook、淘宝等大佬 95%... 拥有1万多个Hive作业的大电商如何进行Hive优化的?本系列课结合企业实战和场景从作业架构层面、Hql(Hive sql)语法层面、Hive参数层面依次讲述。
HIVE优化实战分享 大数据存储方案 很好的参考文档
3. **Hive优化策略**: - **良好的模型设计**:合理的设计数据模型能够显著提高Hive的性能。 - **解决数据倾斜**:通过业务逻辑避免倾斜,例如对缺失值或异常值进行特殊处理,或者使用随机函数分散数据。 - **...
### 工作总结:Hive优化 在大数据处理领域,Hive作为一种常用的数据仓库工具,其性能优化一直是数据工程师关注的重点。本文将基于提供的“hive优化”文档内容,深入探讨Hive优化的关键策略与实践技巧。 #### 核心...
Hive 优化方法整理 Hive 优化方法整理是 Hive 数据处理过程中的重要步骤,涉及到 Hive 的类 SQL 语句本身进行调优、参数调优、Hadoop 的 HDFS 参数调优和 Map/Reduce 调优等多个方面。 Hive 类 SQL 语句优化 1. ...
Hive优化案例、Hive数据处理模式、Hive常见问题与优化、Hive实践 Hive是一种基于Hadoop的数据仓库工具,用于对大规模数据进行处理和分析。在大数据时代,Hive的应用非常广泛,本文将从Hive优化案例、Hive数据处理...
Hive 参数优化总结 Hive 是一个基于 Hadoop 的数据仓库工具,用于对大规模数据进行查询、分析和处理。为了提高 Hive 的性能和效率,参数优化是非常重要的一步。本文档将总结 Hive 参数优化的相关知识点,并对 Hive ...
Hive优化.xmind
在处理Hive优化的讨论中,关键因素之一是控制Hive任务中的Map数量,这直接影响作业的效率和资源消耗。在Hive中,一个作业是通过分析input目录下的数据文件来创建一个或多个Map任务的,而影响Map数量的主要因素包括...
hive 优化在面试以及工作中经常使用,我整理了一份思维导图供大家学习。
一、Hive优化 1. **元数据优化**:Hive依赖于元数据服务(如MySQL或Derby)来存储表结构和分区信息。确保元数据服务器的性能稳定,可以减少查询解析时间。 2. **分区策略**:通过为大表创建合适的分区,可以显著...
然而,随着数据量的不断增长,Hive 的性能优化变得至关重要。本篇文章将深入探讨针对Hive进行优化的一些关键策略。 首先,我们来关注一个常见的问题——慎用 `count(distinct(columnA))` 函数。在处理大数据集时,...
1. **表分区**:分区是Hive优化的基础,通过将大表划分为小的逻辑部分,可以显著提高查询速度。合理的分区策略应基于查询中常用的过滤条件,例如日期、地区等。 2. ** bucketing 和 sorting**:通过bucketing,数据...
### Hive性能优化总结 #### 一、Hadoop与Hive计算框架特性引发的问题 Hadoop作为大数据处理平台,其核心优势在于能够高效处理大规模数据集。然而,在具体的应用场景中,尤其是在Hive作为数据仓库使用时,仍存在...
本文将深入探讨Hive查询优化的一些关键点,并结合个人实践经验和整理的Hive简易版思维导图,帮助你更好地理解和运用Hive。 一、Hive查询优化基础 1. **表分区**:分区是Hive提高查询效率的重要手段。通过将大表按...
Hive优化方法 Hive是一个基于Hadoop的数据仓库工具,用于存储和处理大规模数据。然而,在Hive开发过程中,常见的性能问题之一是数据倾斜问题。数据倾斜是指在数据处理时,某些key值或某些记录出现了异常高的频率,...