-- 开启动态分区,写入数据时需要
set hive.optimize.sort.dynamic.partition=true;
-- 默认值是strict,默认要求分区字段必须有一个是静态的分区值
set hive.exec.dynamic.partition.mode=nonstrict;
-- 控制在同一个sql中的不同的job是否可以同时运行。默认是False
set hive.exec.parallel=true;
-- 同一个sql允许并行任务的最大线程数。默认是8
set hive.exec.parallel.thread.number=16;
-- 大小表join自动优化中小表大小的定义。默认25000000(25m)
set hive.mapjoin.smalltable.filesize = 100000000;
-- 【Map阶段】
-- 环形缓冲区大小。默认100
set mapreduce.task.io.sort.mb = 200;
-- 并行处理并行处理spill的个数,默认10
set mapreduce.task.io.sort.factor = 20;
-- 环形缓冲区溢写阈值。默认0.8
set mapreduce.map.sort.spill.percent = 0.9;
-- matask的CPU核数,默认1。如果是计算密集型任务可以增加
set mapreduce.map.cpu.vcores = 1;
-- matask异常重试次数,默认4次
set mapreduce.map.maxattempts = 16;
-- 开启 hive 中间传输数据压缩功能,默认false
set hive.exec.compress.intermediate=true;
-- 开启map阶段的输出压缩功能,默认false
set mapreduce.map.output.compress=true;
-- 设置map阶段输出数据的压缩方式
set mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;
-- 【Reduce阶段】
-- mapred代表的是hadoop旧API,而mapreduce代表的是hadoop新的API
-- 每个Reduce去Map中拉取数据的并行数。默认值是5
set mapreduce.reduce.shuffle.parallelcopies = 10;
-- 配置JVM堆内存的多少比例可以用于存放map任务的输出结果,默认值0.7
-- Reduce在shuffle阶段对下载来的map数据,并不是立刻就写入磁盘的,
-- 而是会先缓存在内存中,然后当使用内存达到一定量的时候才刷入磁盘
set mapreduce.reduce.shuffle.input.buffer.percent = 0.8;
-- 当缓冲中数据达到配置的阈值时,这些数据在内存中被合并、写入机器磁盘,默认值0.66。
set mapreduce.reduce.shuffle.merge.percent =0.8;
-- reducetask的CPU核数,默认1个
set mapreduce.reduce.cpu.vcores= 2;
-- 当MapTask完成的比例达到该值后才会为ReduceTask申请资源。默认是0.05
set mapreduce.job.reduce.slowstart.completedmaps =0.05;
-- reducetask失败重试次数,默认4次
set mapreduce.reduce.maxattempts = 16;
-- 如果程序在规定的时间内没有读到数据,将强制超时退出。默认300s
-- 如果集群环境的网络本身是瓶颈,那么用户可以通过调大这个参数来避免reduce下载线程被误判为失败的情况
set mapreduce.task.timeout= 6000;
-- 开启hive最终输出数据压缩功能,默认false
set hive.exec.compress.output=true;
-- 开启reduce最终输出数据压缩,默认false
set mapreduce.output.fileoutputformat.compress=true;
-- 设置reduce最终数据输出压缩方式
set mapreduce.output.fileoutputformat.compress.codec =org.apache.hadoop.io.compress.SnappyCodec;
--设置reduce最终数据输出压缩为块压缩,默认RECORD
set mapreduce.output.fileoutputformat.compress.type=BLOCK;
-- 【内存溢出】
-- Map阶段可使用的jvm堆内存上限
set mapreduce.map.java.opts = -Xmx20480m;
-- 一个Map Task可使用的内存上限,默认1024。可根据128M数据对应1G内存的原则提高该值
set mapreduce.map.memory.mb = 30720;
-- Reduce阶段可使用的jvm堆内存上限
set mapreduce.map.java.opts = -Xmx20480m;
-- 一个ReduceTask 可使用的资源上限,默认1024。
set mapreduce.reduce.memory.mb = 30720;
-- yarn container这种模式下,map/reduce task是运行在Container之中的,
-- 所以上面提到的mapreduce.map(reduce).memory.mb大小都大于mapreduce.map(reduce).java.opts值的大小。
-- mapreduce.{map|reduce}.java.opts能够通过Xmx设置JVM最大的heap的使用,一般设置为0.75倍的memory.mb,
-- 因为需要为java code等预留些空间
-- 当集群上的任务比较多时,可设置如下参数
-- 默认是2
set tez.am.max.app.attempts = 128;
-- 默认是4
set tez.am.task.max.failed.attempts = 128;
-- 默认是10
set tez.am.maxtaskfailures.per.node = 3;
-- 默认是33
set tez.am.node-blacklisting.ignore-threshold-node-percent=66;
-- tez队列不能正常启动时,可以加这个参数
set yarn.timeline-service.enabled=false;
版权声明:本文为zhsworld原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。