#合并输入文件 #执行Map前进行小文件合并,一个data_node节点上多个小文件合并,合并数由mapred.max.split.size限制的大小决定 set hive.input.format = org.apache.hadoop.hive.ql.io.CombineHiveInputFormat; #每个Map最大的输入大小 set mapred.max.split.size = 512000000; #一个节点上split的至少的大小,决定了多个data_node上的文件是否需要合并 set mapred.min.split.size.per.node = 256000000; #一个交换机下split的至少的大小,决定了多个交换机上的文件是否需要合并 set mapred.min.split.size.per.rack = 256000000; #合并输出文件 #在Map-only的任务结束时合并小文件 set hive.merge.mapfiles = true; #在Map-Reduce的任务结束时合并小文件 set hive.merge.mapredfiles = true; #合并文件的大小 set hive.merge.size.per.task = 256000000; #当输出文件的平均大小小于该值时,启动一个独立的map-reduce任务进行文件的merge set hive.merge.smallfiles.avgsize = 128000000; #一般JVM参数可以是Yarn申请内存的80%,如果 #Map JVM内存 set mapreduce.map.java.opts=-Xmx20480m; #Map Yarn 申请内存 set mapreduce.map.memory.mb=4096; #Reduce JVM内存 set mapreduce.reduce.java.opts=-Xmx20480m; #Reduce Yarn 申请内存 set mapreduce.reduce.memory.mb=5120; #AM Yarn 申请内存 set yarn.app.mapreduce.am.resource.mb=2000; #AM JVM内存 set yarn.app.mapreduce.am.command-opts=-Xmx1524m; #开启任务并行执行 set hive.exec.parallel = true; #同一个sql允许并行任务的最大线程数 set hive.exec.parallel.thread.number = 8; #存储临时Hive统计信息的方式 set hive.stats.dbclass=counter; #开启Map输出阶段压缩 #开启map输出阶段压缩可以减少job中map和reduce task间数据传输量 #开启hive中间传输数据压缩功能 set hive.exec.compress.intermediate=true; #开启map输出压缩功能 set mapreduce.map.output.compress = true; #设置map输出数据的压缩方式 #set mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec; set mapreduce.map.output.compress.codec=com.hadoop.compression.lzo.LzopCodec; #开启Reduce输出阶段压缩 #当Hive将输出写入到表中时,输出内容同样可以进行压缩。hive.exec.compress.output控制这个功能。默认此参数为false,默认输出的就是非压缩的纯文本文件。 #开启hive最终输出数据压缩功能 set hive.exec.compress.output = true; #开启mapreduce最终输出数据压缩 set mapreduce.output.fileoutputformat.compress=true; #设置mapreduce最终数据输出压缩方式 #set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec; set mapreduce.output.fileoutputformat.compress.codec=com.hadoop.compression.lzo.LzopCodec; #设置mapreduce最终数据输出压缩为块压缩 set mapreduce.output.fileoutputformat.compress.compress.type=BLOCK; #set mapreduce.output.fileoutputformat.compress=true; #set mapred.output.compression.codec=com.hadoop.compression.lzo.LzopCodec; #set set mapred.output.compression.type=BLOCK; #动态分区 set hive.exec.dynamic.partition.mode = nonstrict; set hive.exec.dynamic.partition = true; #动态分区属性,全局可以创建的最大文件个数,比如2000个map表有60个分区 就会创建2000*60=120000>100000(默认值),会报错 set hive.exec.max.created.files=1000000; #默认100000 #map-side join set hive.auto.convert.join = true; #设置小表的数据文件的大小,小于此值使用mapside set hive.mapjoin.smalltable.filesize = 10240000; #顶层的聚合 *** 作放在Map阶段执行,从而减轻清洗阶段数据传输和Reduce阶段的执行时间,提高总体性能 set hive.map.aggr = true; #本地模式,尝试避免执行MapReduce在本地执行查询将数据查询显示出来 set hive.exec.mode.local.auto=true; #Hive查询数据可能不全,只是一个节点上的数据,可供测试查询使用 #默认CombineHiveInputFormat不能识别LZO的索引文件,而将索引文件当作输入文件,更为严重的是,这会导致LZO文件无法切片。所以要读取LZO文件时加上如下参数 set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;写法调优
#谓词下推 #join时小表在左 #union all替代union #行列裁剪表 #distribute by 分区字段(默认hash) sort by 排序字段 --> 代替order by #多维分析函数的使用 --> 提高效率,节省资源,避免多次查询维度汇总数据 #数据量大时避免使用distinct
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)