设置jvm重用

  1. set mapred.job.reuse.jvm.num.tasks=10;

输入合并

  1. set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
  2. #每个map处理的数据理大小(单位:字节),同时也设置map任务数,注:这里的任务数,实际上就是container的数量
  3. set mapred.max.split.size=256000000;
  4. #一个节点上split的大小,这个参数控制了合并小文件的阈值。
  5. set mapred.min.split.size.per.node=100000000;

设置内存

  1. #map进程内存大小,其中:包括堆内存和非堆内存
  2. set mapreduce.map.memory.mb=2048
  3. #map堆内存大小,一般设置为mapreduce.map.memory.mb的0.8倍
  4. set mapreduce.map.java.opts=-Xmx1638M
  5. #reduce进程内存大小,其中:包括堆内存和非堆内存
  6. set mapreduce.reduce.memory.mb=2048
  7. #reduce堆内存大小,一般设置为mapreduce.reduce.memory.mb的0.8倍
  8. set mapreduce.reduce.java.opts=-Xmx1638M
  9. #map环形缓冲区大小,默认为100m
  10. set mapreduce.task.io.sort.mb=200
  11. #map环形缓冲区溢写比例,默认为0.8
  12. set mapreduce.map.sort.spill.percent=0.9
  13. #设置reduce shuffle读的内存缓冲区大小,默认为reduce可用内存的0.7
  14. set mapreduce.reduce.shuffle.input.buffer.percent=0.7
  15. #buffer中的数据达到多少比例开始写入磁盘。默认值0.66
  16. set mapreduce.reduce.shuffle.merge.percent=0.66

mapreduce.map.memory.mb
官网解释:
The amount of memory to request from the scheduler for each map task. If this is not specified or is non-positive, it is inferred from mapreduce.map.java.opts and mapreduce.job.heap.memory-mb.ratio. If java-opts are also not specified, we set it to 1024.(如果为指定或为非正数,则从mapreduce.map.java.opts和mapreduce.job.heap.memory-mb.ratio两个参数得出。如果上面两个参数也为设置,那么默认为1024M。)

mapreduce.reduce.memory.mb
The amount of memory to request from the scheduler for each reduce task. If this is not specified or is non-positive, it is inferred from mapreduce.reduce.java.opts and mapreduce.job.heap.memory-mb.ratio. If java-opts are also not specified, we set it to 1024.

设置磁盘

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

设置并行度

  1. # 开启任务并行执行,对于可以并行执行的sql(如uion等)可以大大提高执行效率
  2. # 如:select count(1) from a group by id
  3. # union all
  4. # select count(1) from b group by id
  5. #上面的sql,包含两个mapreduce,每个mapreduce就是一个job,在yarn上面,每个job对应一个app
  6. #,每个app有自己的appid,每个app包含appmaster容器、mapper容器、reducer容器(如果有reduce的话)
  7. #当开启hive.exec.parallel=true,那么上面两个app就会并发执行。
  8. set hive.exec.parallel=true;
  9. # 允许并行任务的最大线程数,实际上就是限制并发执行的app个数。
  10. set hive.exec.parallel.thread.number=16;
  11. # 默认情况下,当整个MapReduce作业的所有已执行完成的Map Task任务数超过Map
  12. # Task总数的 mapreduce.job.reduce.slowstart.completedmaps (默认为0.05) 后,ApplicationMaster便会开始调度执行Reduce Task任务。
  13. set mapreduce.job.reduce.slowstart.completedmaps=0.05
  14. #每个reduce去map端下载数据的并行度,默认为5
  15. set mapreduce.reduce.shuffle.parallelcopies=5
  16. #每个Map task可使用的最多cpu core数目,默认值: 1
  17. set mapreduce.map.cpu.vcores=1
  18. #每个Reduce task可使用的最多cpu core数目,默认值: 1
  19. set mapreduce.reduce.cpu.vcores=1

设置任务数

  1. # 控制reduce的任务数
  2. set mapred.reduce.tasks=20;
  3. # 设置每个reducer处理的数据量(单位:字节),这个参数同时也是设置reducer任务数
  4. set hive.exec.reducers.bytes.per.reducer=100000000
  5. # 每个map处理的数据理大小(单位:字节),同时也设置map任务数,注:这里的任务数,实际上就是container的数量
  6. set mapred.max.split.size=256000000;
  7. #一个节点上split的大小,这个参数控制了合并小文件的阈值。
  8. set mapred.min.split.size.per.node=100000000;
  9. # 在map-only的任务合并map输出小文件
  10. set hive.merge.mapfiles=true
  11. #合并mapreduce输出小文件
  12. set hive.merge.mapredfiles=true
  13. #合并文件大小
  14. set hive.merge.size.per.task=256*1000*1000
  15. #输出文件的平均大小小于该值,启动一个独立的mapreduce程序合并小文件
  16. set hive.merge.smallfiles.avgsize=16*1000*1000

设置资源数

  1. # 指定资源队列,root.urgent
  2. set mapred.job.queue.name=root.default;
  3. # container最小可申请内存量
  4. set yarn.scheduler.minimum-allocation-mb=1024;
  5. # container最大可申请内存量
  6. set yarn.scheduler.maximum-allocation-mb=32768;
  7. # container最小可申请CPU数
  8. set yarn.scheduler.minimum-allocation-vcores=1;
  9. # container最大可申请CPU数
  10. set yarn.scheduler.maximum-allocation-vcores=16;
  11. # AM Container Heap内存大小
  12. set yarn.app.mapreduce.am.command-opts=-Xmx2048M;
  13. # AM Container内存大小
  14. set yarn.app.mapreduce.am.resource.mb=4096;
  15. # NodeManger可用内存大小。如果没有开启自动推算,那么默认值为8192MB
  16. set yarn.nodemanager.resource.memory-mb=57344;
  17. # NodeManger可用CPU数。如果没有开启自动推送,那么默认值为8
  18. set yarn.nodemanager.resource.cpu-vcores=16;

设置动态分区

  1. #(默认false),表示开启动态分区功能
  2. set hive.exec.dynamic.partition =true
  3. #(默认strict),表示允许所有分区都是动态的,否则必须有静态分区字段
  4. set hive.exec.dynamic.partition.mode = nonstrict
  5. 动态分区相关的调优参数:
  6. #表示每个maper或reducer可以允许创建的最大动态分区个数,默认是100,超出则会报错。
  7. set hive.exec.max.dynamic.partitions.pernode=100 #(默认100,一般可以设置大一点,比如1000)
  8. #表示一个动态分区语句可以创建的最大动态分区个数,超出报错
  9. set hive.exec.max.dynamic.partitions =1000 #(默认值)
  10. #全局可以创建的最大文件个数,超出报错。
  11. set hive.exec.max.created.files =10000 #(默认)

本地化

set mapreduce.framework.name=local