Hive参数优化

此教程中关于Hive的优化,皆是基于Hive2.x的版本,对于Hive1.x旧版本的优化机制不再复述(新版本已改善或变更)。另外新版本中默认为开启状态的优化配置项,在工作中无需修改,也不再复述。

一、HDFS副本数

  • 配置项:dfs.replication ( HDFS)
  • 介绍:文件副本数,通常设为3,不推荐修改。
    在这里插入图片描述

二、CPU配置

  • 查看CPU线程数

    grep 'processor' /proc/cpuinfo | sort -u | wc -l
    

    在这里插入图片描述

  • 配置项:yarn.nodemanager.resource.cpu-vcores

  • 表示该节点服务器上yarn可以使用的虚拟CPU个数,默认值是8,推荐将值配置与物理CPU线程数相同,如果节点CPU核心不足8个,要调小这个值,yarn不会智能的去检测物理核心数。
    -
    在这里插入图片描述

三、内存配置

  • 配置项:yarn.nodemanager.resource.memory-mb
  • 设置该nodemanager节点上可以为容器分配的总内存,默认为8G,如果节点内存资源不足8G,要减少这个值,yarn不会智能的去检测内存资源,一般按照服务器剩余可用内存资源进行配置。生产上根据经验一般要预留15-20%的内存,那么可用内存就是实际 内存 0.8,比如实际内存是64G,那么640.8=51.2G,我们设置成50G就可以了(固定经验值)。在这里插入图片描述
    在这里插入图片描述
  • 注意,要同时设置yarn.scheduler.maximum-allocation-mb为一样的值, yarn.app.mapreduce.am.command-opts(JVM内存)的值要同步修改为略小的值(-Xmx1024m)。

四、本地目录

  • yarn.nodemanager.local-dirs ( Yarn )
  • NodeManager 存储中间数据文件的本地文件系统中的目录列表。如果单台服务器上有多个磁盘挂载,则配置的值应当是分布在各个磁盘上目录,这样可以充分利用节点的IO读写能力。
    在这里插入图片描述

五、MapReduce内存配置

  • 当MR内存溢出时,可以根据服务器配置进行调整。
    • mapreduce.map.memory.mb
  • 为作业的每个 Map 任务分配的物理内存量(MiB),默认为0,自动判断大小。
    • mapreduce.reduce.memory.mb
  • 为作业的每个 Reduce 任务分配的物理内存量(MiB),默认为0,自动判断大小。
    • mapreduce.map.java.opts、mapreduce.reduce.java.opts
  • 注意
    • mapreduce.map.java.opts一定要小于mapreduce.map.memory.mb;
    • mapreduce.reduce.java.opts一定要小于mapreduce.reduce.memory.mb,格式 -Xmx4096m。
    • 此部分所有配置均不能大于Yarn的NodeManager内存配置。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

六、 HiveServer2 的 Java 堆栈

  • 问题:Hiveserver2异常退出,导致连接失败的问题。
  • 解决方法:修改HiveServer2 的 Java 堆栈大小。
    在这里插入图片描述

七、Hive并行编译

  • 问题:Hive默认同时只能编译一段HiveQL,并上锁。
  • 原因:将hive.driver.parallel.compilation设置为true,各个会话可以同时编译查询,提高团队工作效
    率。否则如果在UDF中执行了一段HiveQL,或者多个用户同时使用的话, 就会锁住。
  • 解决方法:修改hive.driver.parallel.compilation.global.limit的值,0或负值为无限制,可根据团队人员和硬件进行修改,以保证同时编译查询。
    在这里插入图片描述

八、动态生成分区的线程数

  • hive.load.dynamic.partitions.thread
  • 用于加载动态生成的分区的线程数。加载需要将文件重命名为它的最终位置,并更新关于新分区的一些元数据。默认值为15。当有大量动态生成的分区时,增加这个值可以提高性能。根据服务器配置修改。
    在这里插入图片描述

九、监听输入文件线程数

  • hive.exec.input.listing.max.threads
  • Hive用来监听输入文件的最大线程数。默认值:15。当需要读取大量分区时,增加这个值可以提高性能。根据服务器配置进行调整。
    在这里插入图片描述

十、Map输出压缩

  • 除了创建表时指定保存数据时压缩,在查询分析过程中,Map的输出也可以进行压缩。由于map任务的输出需要写到磁盘并通过网络传输到reducer节点,所以通过使用LZO、LZ4或者Snappy这样的快速压缩方式,是可以获得性能提升的,因为需要传输的数据减少了。
  • MapReduce 配置项:
    • mapreduce.map.output.compress
  • 设置是否启动map输出压缩,默认为false。在需要减少网络传输的时候,可以设置为true。
    • mapreduce.map.output.compress.codec
  • 设置map输出压缩编码解码器,默认为org.apache.hadoop.io.compress.DefaultCodec,推荐使用SnappyCodec:org.apache.hadoop.io.compress.SnappyCodec。
    在这里插入图片描述

十一、Reduce结果压缩

  • 是否对任务输出结果压缩,默认值false。对传输数据进行压缩,既可以减少文件的存储空间,又可以加快数据在网络不同节点之间的传输速度。
  • 配置项:
    • mapreduce.output.fileoutputformat.compress
  • 是否启用 MapReduce 作业输出压缩。
    • mapreduce.output.fileoutputformat.compress.codec
      指定要使用的压缩编码解码器,推荐SnappyCodec。
    • mapreduce.output.fileoutputformat.compress.type
  • 指定MapReduce作业输出的压缩方式,默认值RECORD,可配置值有:NONE、RECORD、
    BLOCK。推荐使用BLOCK,即针对一组记录进行批量压缩,压缩效率更高。在这里插入图片描述

十二、多个Map-Reduce中间数据压缩

控制 Hive 在多个map-reduce作业之间生成的中间文件是否被压缩。压缩编解码器和其他选项由上面Hive通用压缩mapreduce.output.fileoutputformat.compress.*确定。

set hive.exec.compress.intermediate=true;

十三、Hive最终结果压缩

控制是否压缩查询的最终输出(到 local/hdfs 文件或 Hive table)。压缩编解码器和其他选项由上面Hive通用压缩mapreduce.output.fileoutputformat.compress.*确定。

set hive.exec.compress.output=true;

十四、JVM重用(不再支持)

随着Hadoop版本的升级,已自动优化了JVM重用选项,MRv2开始不再支持JVM重用。(旧版本配置项:mapred.job.reuse.jvm.num.tasks、mapreduce.job.jvm.numtasks)

十五、Hive执行引擎

  • CDH支持的引擎包括MapReduce和Spark两种,可自由选择,Spark不一定比MR快,Hive2.x和Hadoop3.x经过多次优化,Hive-MR引擎的性能已经大幅提升。
  • 配置项:hive.execution.engine
    在这里插入图片描述
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值