dfs.replication(HDFS)
文件副本数通常情况下为3,不推荐修改,如果测试环境只有两台虚拟机,那么此处要修改为2。
yarn.nodemanager.resource.cpu-vcores
- 表示该节点服务器上yarn可以使用的虚拟CPU个数,默认值是8,推荐将值配置与物理CPU线程数相同,如果节点CPU核心不足8个,要调小这个值,yarn不会智能的去检测物理核心数。
- 如何查看当前物理CPU线程数: grep ‘processor’ /proc/cpuinfo | sort -u | wc -l
yarn.nodemanager.resource.memory-mb
- 一般nodemanager节点上的容器内存按照剩余内存的百分之八十来分配,因为要预留出百分之二十左右的内存。
- 例如:一共有64G 剩余50G。那么就分配50*0.8=40G 可以通过CM来查看剩余多少内存
yarn.nodemanager.local-dirs(Yarn)
- NodeManager 存储中间数据文件的本地文件系统中的目录列表。
- 如果单台服务器上有多个磁盘挂载,则配置的值应当是分布在各个磁盘上目录,这样可以充分利用节点的IO读写能力。
当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配置选项。
注意:
- mapreduce.map.java.opts一定要小于mapreduce.map.memory.mb;
- mapreduce.reduce.java.opts一定要小于mapreduce.reduce.memory.mb
- 格式-Xmx4096m。
- 此部分所有配置均不能大于Yarn的NodeManager内存配置。
Hiveserver2异常退出,导致连接失败的问题。 搜索JAVA堆栈大小即可修改配置
hive.load.dynamic.partitions.thread
- 用于加载动态生成的分区的线程数。加载需要将文件重命名为它的最终位置,并更新关于新分区的一些元数据,默认值为 15 。
- 当有大量动态生成的分区时,增加这个值可以提高性能。
- 根据服务器配置修改。 默认值为15 一般在可以正常运行的情况下不会修改此配置。
hive.exec.input.listing.max.threads
- Hive用来监听输入文件的最大线程数。默认值:15
- 当需要读取大量分区时,增加这个值可以提高性能。根据服务器配置进行调整。 默认值为15,一般情况下不会修改此配置。
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。
mapreduce.output.fileoutputformat.compress
是否启用 MapReduce 作业输出压缩。
mapreduce.output.fileoutputformat.compress.codec
指定要使用的压缩编码解码器,推荐SnappyCodec。
mapreduce.output.fileoutputformat.compress.type
一般选择block,因为这样会进行批量压缩,压缩效率更高
mapreduce.output.fileoutputformat.compress.codec(Yarn)
- map输出所用的压缩编码解码器
默认为org.apache.hadoop.io.compress.DefaultCodec- 推荐使用SnappyCodec:org.apache.hadoop.io.compress.SnappyCodec
mapreduce.output.fileoutputformat.compress.type
一般选择block,因为这样会进行批量压缩,压缩效率更高
mapreduce.output.fileoutputformat.compress.*
set hive.exec.compress.intermediate=true;
控制 Hive 在多个map-reduce作业之间生成的中间文件是否被压缩。压缩编解码器和其他选项由上面Hive通用压缩
mapreduce.output.fileoutputformat.compress.* set hive.exec.compress.output=true;
控制是否压缩查询的最终输出(到 local/hdfs 文件或 Hive table)。压缩编解码器和其他选项由 上面Hive通用压缩
因为我们使用的是hive2.0.0的版本,Hadoop3.0的版本,新版本在对于JVM重用方面进行了优化,所以在这里不用配置了。
如果使用旧版本的话,配置这两个就可以了。
mapred.job.reuse.jvm.num.tasks
mapreduce.job.jvm.numtasks
CDH支持的引擎一共有两个 一个是MR,另一个是Spark,但是Spark不一定比MR快,因为经历了Hive2.0的版本和Hadoop3.0的版本后,MR的性能已经得到了大幅度的提升,如果要配置配置如下即可。
hive.execution.engine
Hive默认同时只能编译一段HiveQL,并上锁。
将hive.driver.parallel.compilation
设置为true
,各个会话可以同时编译查询,提高团队工作效率。否则如果在UDF中执行了一段HiveQL,或者多个用户同时使用的话,就会锁住。
修改hive.driver.parallel.compilation.global.limit
的值,0
或负值
为无限制,可根据团队人员和硬件进行修改,以保证同时编译查询。
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
此部分设置,要根据硬件内存来进行调整,个人电脑配置较低,不建议修改。
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。
Hive的默认查询执行引擎一次处理一行,而矢量化查询执行是一种Hive特性,目的是按照每批1024行读取数据,并且一次性对整个记录整合(而不是对单条记录)应用操作。
注意:要使用矢量化查询执行,就必须以ORC格式存储数据。
set hive.vectorized.execution.enabled
=true
ORC可以使用新的HDFS缓存API和ZeroCopy读取器来避免在扫描文件时将额外的数据复制到内存中。
set hive.exec.orc.zerocopy
=true