【Hive-优化】Hive的优化方式一(通过ClouderaManager进行参数优化)

【Hive-优化】Hive的优化方式一(通过ClouderaManager进行参数优化)

  • 1)HDFS副本数
  • 2)Yarn基础配置
    • 2.1.nodemanager配置
      • 2.1.1.CPU配置
      • 2.1.2.内存配置
      • 2.1.3. 本地目录
    • 2.2.MapReduce内存配置
  • 3)Hive基础配置
    • 3.1.HiveServer2 的 Java 堆栈
    • 3.2.动态生成分区的线程数
    • 3.3.监听输入文件线程数
  • 4)压缩配置
    • 4.1.map输出压缩
      • 4.1.1.MapReduce配置项
    • 4.1.2.Reduce结果压缩
    • 4.2.Hive执行过程通用压缩设置
    • 4.3.Hive多个Map-Reduce中间数据压缩
    • 4.4.Hive最终结果压缩
  • 5)其他
    • 5.1.JVM重用(不再支持)
    • 5.2.Hive执行引擎(了解)
  • 6)Hive并行操作
    • 6.1.Hive编译查询限制
    • 6.2.Hive不同阶段任务并行执行
  • 7)Hive小文件合并
  • 8)矢量化查询
  • 9)读取零拷贝

1)HDFS副本数

dfs.replication(HDFS)

文件副本数通常情况下为3,不推荐修改,如果测试环境只有两台虚拟机,那么此处要修改为2。

2)Yarn基础配置

2.1.nodemanager配置

2.1.1.CPU配置

yarn.nodemanager.resource.cpu-vcores

  1. 表示该节点服务器上yarn可以使用的虚拟CPU个数,默认值是8,推荐将值配置与物理CPU线程数相同,如果节点CPU核心不足8个,要调小这个值,yarn不会智能的去检测物理核心数。
  2. 如何查看当前物理CPU线程数: grep ‘processor’ /proc/cpuinfo | sort -u | wc -l

2.1.2.内存配置

yarn.nodemanager.resource.memory-mb

  1. 一般nodemanager节点上的容器内存按照剩余内存的百分之八十来分配,因为要预留出百分之二十左右的内存。
  2. 例如:一共有64G 剩余50G。那么就分配50*0.8=40G 可以通过CM来查看剩余多少内存

2.1.3. 本地目录

yarn.nodemanager.local-dirs(Yarn)

  1. NodeManager 存储中间数据文件的本地文件系统中的目录列表。
  2. 如果单台服务器上有多个磁盘挂载,则配置的值应当是分布在各个磁盘上目录,这样可以充分利用节点的IO读写能力。

2.2.MapReduce内存配置

当MR内存溢出时,可以根据服务器配置进行调整。

mapreduce.map.memory.mb

为作业的每个 Map 任务分配的物理内存量(MiB),默认为0,自动判断大小。

mapreduce.reduce.memory.mb

为作业的每个 Reduce 任务分配的物理内存量(MiB),默认为0,自动判断大小。

mapreduce.map.java.opts、mapreduce.reduce.java.opts

Map和Reduce的JVM配置选项。

注意:

  1. mapreduce.map.java.opts一定要小于mapreduce.map.memory.mb;
  2. mapreduce.reduce.java.opts一定要小于mapreduce.reduce.memory.mb
  3. 格式-Xmx4096m。
  4. 此部分所有配置均不能大于Yarn的NodeManager内存配置。

3)Hive基础配置

3.1.HiveServer2 的 Java 堆栈

Hiveserver2异常退出,导致连接失败的问题。 搜索JAVA堆栈大小即可修改配置

3.2.动态生成分区的线程数

hive.load.dynamic.partitions.thread

  1. 用于加载动态生成的分区的线程数。加载需要将文件重命名为它的最终位置,并更新关于新分区的一些元数据,默认值为 15 。
  2. 当有大量动态生成的分区时,增加这个值可以提高性能。
  3. 根据服务器配置修改。 默认值为15 一般在可以正常运行的情况下不会修改此配置。

3.3.监听输入文件线程数

hive.exec.input.listing.max.threads

  1. Hive用来监听输入文件的最大线程数。默认值:15
  2. 当需要读取大量分区时,增加这个值可以提高性能。根据服务器配置进行调整。 默认值为15,一般情况下不会修改此配置。

4)压缩配置

4.1.map输出压缩

4.1.1.MapReduce配置项

mapreduce.map.output.compress

设置是否启动map输出压缩,默认为false。在需要减少网络传输的时候,可以设置为true。

mapreduce.map.output.compress.codec

  1. 设置map输出压缩编码解码器
    默认为org.apache.hadoop.io.compress.DefaultCodec
  2. 推荐使用SnappyCodec:org.apache.hadoop.io.compress.SnappyCodec。

4.1.2.Reduce结果压缩

mapreduce.output.fileoutputformat.compress

是否启用 MapReduce 作业输出压缩。

mapreduce.output.fileoutputformat.compress.codec

指定要使用的压缩编码解码器,推荐SnappyCodec。

mapreduce.output.fileoutputformat.compress.type

一般选择block,因为这样会进行批量压缩,压缩效率更高

4.2.Hive执行过程通用压缩设置

mapreduce.output.fileoutputformat.compress.codec(Yarn)

  1. map输出所用的压缩编码解码器
    默认为org.apache.hadoop.io.compress.DefaultCodec
  2. 推荐使用SnappyCodec:org.apache.hadoop.io.compress.SnappyCodec

mapreduce.output.fileoutputformat.compress.type

一般选择block,因为这样会进行批量压缩,压缩效率更高

4.3.Hive多个Map-Reduce中间数据压缩

mapreduce.output.fileoutputformat.compress.*

set hive.exec.compress.intermediate=true;

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

4.4.Hive最终结果压缩

mapreduce.output.fileoutputformat.compress.* set hive.exec.compress.output=true;

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

5)其他

5.1.JVM重用(不再支持)

因为我们使用的是hive2.0.0的版本,Hadoop3.0的版本,新版本在对于JVM重用方面进行了优化,所以在这里不用配置了。
如果使用旧版本的话,配置这两个就可以了。

mapred.job.reuse.jvm.num.tasks

mapreduce.job.jvm.numtasks

5.2.Hive执行引擎(了解)

CDH支持的引擎一共有两个 一个是MR,另一个是Spark,但是Spark不一定比MR快,因为经历了Hive2.0的版本和Hadoop3.0的版本后,MR的性能已经得到了大幅度的提升,如果要配置配置如下即可。

hive.execution.engine

6)Hive并行操作

6.1.Hive编译查询限制

Hive默认同时只能编译一段HiveQL,并上锁。

hive.driver.parallel.compilation设置为true,各个会话可以同时编译查询,提高团队工作效率。否则如果在UDF中执行了一段HiveQL,或者多个用户同时使用的话,就会锁住。

修改hive.driver.parallel.compilation.global.limit的值,0负值为无限制,可根据团队人员和硬件进行修改,以保证同时编译查询。

6.2.Hive不同阶段任务并行执行

Hive会将一个查询转化为一个或多个阶段,包括:MapReduce阶段、抽样阶段、合并阶段、limit阶段等。默认情况下,一次只执行一个阶段。不过,如果某些阶段不是互相依赖,是可以并行执行的。

set hive.exec.parallel=true

可以开启并发执行,默认为false。

set hive.exec.parallel.thread.number=16

同一个sql允许的最大并行度,默认为8。

set hive.exec.parallel=true

set hive.exec.parallel.thread.number=16

7)Hive小文件合并

此部分设置,要根据硬件内存来进行调整,个人电脑配置较低,不建议修改。

hive.merge.mapfiles

是否开启合并Map端小文件,在Map-only的任务结束时合并小文件,true是打开。

hive.merge.mapredfiles

是否开启合并Reduce端小文件,在map-reduce作业结束时合并小文件。true是打开。

hive.merge.size.per.task

合并后MR输出文件的大小,默认为256M。

hive.merge.smallfiles.avgsize

当输出文件的平均大小小于此设置值时,启动一个独立的map-reduce任务进行文件merge,默认值为16M。

8)矢量化查询

Hive的默认查询执行引擎一次处理一行,而矢量化查询执行是一种Hive特性,目的是按照每批1024行读取数据,并且一次性对整个记录整合(而不是对单条记录)应用操作。

注意:要使用矢量化查询执行,就必须以ORC格式存储数据。

set hive.vectorized.execution.enabled=true

9)读取零拷贝

ORC可以使用新的HDFS缓存API和ZeroCopy读取器来避免在扫描文件时将额外的数据复制到内存中。

set hive.exec.orc.zerocopy=true

你可能感兴趣的:(Hive,hive,hadoop,大数据)