Hive 调优-参数篇

image.png

<**

工作中常用的 hive 参数调优,整理如下。

原则:

  • 最少数据
  • 最少字段
  • 最少Job数
  • 最少读取次数
  • 避免数据倾斜
  • 整体最优而不是局部最优
  • JVM 内存

<a name="lLlWa"></a>

文件大小合理切分

这里需要结合集群的资源来合理的设置切片大小。

# 文件分割大小
set mapreduce.input.fileinputformat.split.maxsize=536870912;
# 节点文件分割大小
set mapreduce.input.fileinputformat.split.minsize.per.node=536870912;
# 机架文件分割大小
set mapreduce.input.fileinputformat.split.minsize.per.rack=536870912;
# Reduce 文件分割大小
set hive.exec.reducers.bytes.per.reducer=536870912;# 输入合并
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;# 在Map-only的任务结束时合并小文件
set hive.merge.mapfiles=true;
# 在Map-reduce结束时合并小文件,(注:如果文件压缩格式不一致必须设置为false)
set hive.merge.mapredfiles=true;
# 合并文件的大小(默认)
set hive.merge.size.per.task=104857600;
# 当输出文件的平均大小小于该值时,启动一个独立的map-reduce任务进行文件merge(默认)
set hive.merge.smallfiles.avgsize=104857600;

<a name="LMqxG"></a>

最小数据

最小数据原则:(map阶段,shuffle阶段,reduce阶段)<br />

  1. 网络开销:map端在写磁盘的时候采用压缩的方式将map的输出结果进行压缩是一个减少网络开销很有效的方法
  2. 数据集大小:

<br />

# 数据先过滤后使用# Shuffle操作
# Hive Group By查询中是否在Map端先进行聚合
set hive.map.aggr=true;# Spill、Meger文件进行压缩
set mapreduce.map.output.compress=true;
# 压缩编解码器的类名
set mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;

<a name="Sh0TB"></a>

数据倾斜

# 是否启用倾斜连接优化
set hive.optimize.skewjoin=true;

<a name="TJO2S"></a>

开启并行

# 开启任务并行执行
set hive.exec.parallel=true;
# 允许并行任务的最大线程数
set hive.exec.parallel.thread.number=16;
# 默认情况下,当整个MapReduce作业的所有已执行完成的Map Task任务数超过Map
# Task总数的 mapreduce.job.reduce.slowstart.completedmaps (默认为0.05) 后,ApplicationMaster便会开始调度执行Reduce Task任务。
set mapreduce.job.reduce.slowstart.completedmaps=0.05
# 个MapOutputCopier线程到已完成的Map Task任务节点上分别copy一份属于自己的数据。
# 这些copy的数据会首先保存的内存缓冲区中,当内冲缓冲区的使用率达到一定阀值后,则写到磁盘上。
set mapred.reduce.parallel.copies=5

<a name="bMpum"></a>

内存优化

1.JVM进程跑在 container 中,mapreduce.map.java.opts 能够通过Xmx设置JVM最大的heap的使用,一般设置为 0.75 倍的 mapreduce.map.memory.mb ,因为需要为 Java code,非JVM内存使用等预留些空间;reduce的内存设置同理。

<br />

# 设置环形缓冲区的大小,经过map处理后的键值对,不会立马写入磁盘,
# 而是暂时保存在内存中的MapOutputBuffe内部的环形数据缓冲区
set mapreduce.task.io.sort.mb=1024
# 开始 spill 的百分比
set mapreduce.map.sort.spill.percent=0.8# 设置 Map 的内存大小以及 JVM Heap
set mapreduce.map.memory.mb=4096
set mapreduce.map.java.opts=-Xmx3072M# 设置 Reduce 的内存大小以及 JVM Heap
set mapreduce.reduce.memory.mb=4096
set mapreduce.reduce.java.opts=-Xmx3072M# shuffile在reduce内存中的数据最多使用内存量
mapred.job.shuffle.input.buffer.percent=0.7

<a name="CiUaN"></a>

磁盘优化

磁盘的频繁IO也是一种不小的消耗,所以可以通过配置一些参数来减少磁盘的IO

# 默认代表进行merge的时候最多能同时merge多少spill
# 如果有100个spill个文件,此时就无法一次完成整个merge的过程
# 这个时候需要调大来减少merge的次数,从而减少磁盘的操作;
set mapreduce.task.io.sort.factor=10# Combiner存在的时候,此时会根据Combiner定义的函数对map的结果进行合并,什么时候进行Combiner操作呢???
# 和Map在一个JVM中,是由min.num.spill.for.combine的参数决定的,默认是3,
# 也就是说spill的文件数在默认情况下由三个的时候就要进行combine操作,最终减少磁盘数据;
set min.num.spill.for.combine=3
# 减少磁盘IO和网络IO还可以进行:压缩,对spill,merge文件都可以进行压缩。
# 中间结果非常的大,IO成为瓶颈的时候压缩就非常有用,可以通过mapreduce.map.output.compress(default:false)设置为true进行压缩,
# 数据会被压缩写入磁盘,读数据读的是压缩数据需要解压,在实际经验中Hive在Hadoop的运行的瓶颈一般都是IO而不是CPU,压缩一般可以10倍的减少IO操作,
# 压缩的方式Gzip,Lzo,BZip2,Lzma等,其中Lzo是一种比较平衡选择,mapreduce.map.output.compress.codec(default:org.apache.hadoop.io.compress.DefaultCodec)参数设置。
# 但这个过程会消耗CPU,适合IO瓶颈比较大。
set mapreduce.map.output.compress=true
mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec

<a name="urDHk"></a>

资源参数

# 指定资源队列,root.urgent
set mapred.job.queue.name=root.default;
# 最小可申请内存量
set yarn.scheduler.minimum-allocation-mb=1024;
# 最大可申请内存量
set yarn.scheduler.maximum-allocation-mb=32768;
# 最小可申请CPU数
set yarn.scheduler.minimum-allocation-vcores=1;
# 最大可申请CPU数
set yarn.scheduler.maximum-allocation-vcores=16;
# AM Container Heap内存大小
set yarn.app.mapreduce.am.command-opts=-Xmx2048M;
# AM Container内存大小
set yarn.app.mapreduce.am.resource.mb=4096;
# NodeManger可用内存大小
set yarn.nodemanager.resource.memory-mb=57344;
# NodeManger可用CPU数
set yarn.nodemanager.resource.cpu-vcores=16;

<a name="mDOpf"></a>

参考

  • MapReduce之Shuffle过程详述
  • HQL内存溢出的参数调优
  • Yarn 虚拟内存详解
  • MapReduce过程详解及其性能优化
  • https://www.cnblogs.com/edisonchou/p/4298423.html

Hive ETL 优化(参数篇)相关推荐

  1. 优化 Hive ETL 任务(参数篇)

    精选30+云产品,助力企业轻松上云!>>> 点击蓝色"大数据每日哔哔"关注我 加个"星标",第一时间获取大数据架构,实战经验 图片来源网络,点 ...

  2. Hive ETL 任务调优(参数篇)

    Hive 调优-参数篇 图片来源网络,点赞 工作中常用的 hive 参数调优,整理如下. 原则: 最少数据 最少字段 最少Job数 最少读取次数 避免数据倾斜 整体最优而不是局部最优 JVM 内存 文 ...

  3. 由美团技术文章整理---spark性能优化基础篇--开发调优与资源参数调优

    文章地址1:Spark性能优化指南--基础篇 - 美团技术团队 文章地址2:Spark性能优化指南--高级篇 - 美团技术团队 目录 一.关于性能优化基础篇--开发调优 1.避免创建重复RDD (1) ...

  4. hive性能优化指南

    1.概述 继续<hive性能优化指南--初级篇>一文中的剩余部分,本篇博客赘述了在工作中总结Hive的常用优化手段和在工作中使用Hive出现的问题.下面开始本篇文章的优化介绍. 2.介绍 ...

  5. 总结:Hive性能优化上的一些总结

    Hive性能优化上的一些总结 注意,本文百分之九十来源于此文:Hive性能优化,很感谢作者的细心整理,其中有些部分我做了补充和追加,要是有什么写的不对的地方,请留言赐教,谢谢 前言 今天电话面试突然被 ...

  6. Hive性能优化(全面)

    1.介绍 首先,我们来看看Hadoop的计算框架特性,在此特性下会衍生哪些问题? 数据量大不是问题,数据倾斜是个问题. jobs数比较多的作业运行效率相对比较低,比如即使有几百行的表,如果多次关联多次 ...

  7. hive SQL优化

    hive的查询注意事项以及优化总结 . Hive是将符合SQL语法的字符串解析生成可以在Hadoop上执行的MapReduce的工具.使用Hive尽量按照分布式计算的一些特点来设计sql,和传统关系型 ...

  8. Hive 性能优化(全面)解决数据倾斜等问题

    Hive性能优化(全面) 1.介绍 首先,我们来看看Hadoop的计算框架特性,在此特性下会衍生哪些问题? 数据量大不是问题,数据倾斜是个问题. jobs数比较多的作业运行效率相对比较低,比如即使有几 ...

  9. Hive性能优化(全面)解决数据倾斜等问题

    Hive性能优化(全面) 1.介绍 首先,我们来看看Hadoop的计算框架特性,在此特性下会衍生哪些问题? 数据量大不是问题,数据倾斜是个问题. jobs数比较多的作业运行效率相对比较低,比如即使有几 ...

最新文章

  1. 小程序css中设置1rpx失效
  2. python培训班靠谱的-Python培训机构就业靠不靠谱?
  3. java设计模式:Builder模式
  4. 2019夏第八周学习编辑总结
  5. python学习:time、unixtime、string的转换
  6. vue----第一个工程项目
  7. 小白配置QConf遇到的问题
  8. matlab钢材切割,一种基于MATLAB的钢材裂纹扩展速率试验数据处理方法
  9. Java 又双叒叕发布新版本,这么多版本如何灵活管理?
  10. Atitit.架构设计趋势 设计模式 ---微服务架构  soa
  11. 简单的Flash网络游戏源代码
  12. xp计算机u盘重装系统,用U盘给旧电脑重装XP系统,自己摸索的方法:两大步骤、两个关键...
  13. opencv的sift算法
  14. hprose java 下载_Hprose Java下载
  15. 脉冲神经网络-基于IAF神经元的手写数字识别
  16. Android 双屏显示分析
  17. php 简明现代魔法,【转】WinCacheGrind配合XDebug分析PHP程序性能 — 简明现代魔法...
  18. rhel7 卡在sda assuming drive cache write through不能进入操作系统的一个解决方案
  19. Hdu-5919 Sequence II(主席树在线求区间不同数)
  20. 网站被qq拦截应该怎么处理

热门文章

  1. View Agent Direct-Connection安装后,连接黑屏
  2. 打印iphone支持的所有字体
  3. cocos2d-x 3.0rc开发指南:Windows下Android环境搭建
  4. Andoid自动判断输入是电话,网址或者Email的方法----Linkify的应用!
  5. 《算法》笔记 17 - 数据压缩
  6. linux下安装mysql数据库
  7. C 语言实例 - 输出九九乘法口诀表
  8. noise函数的使用
  9. udp组播的应用场景
  10. mysql不能做端点测试吗_端点测试的分步介绍