-
大表拆小表
灵活运用临时表、分区表、外部表、桶表; -
sql语句
对于复杂的sql语句 分解为多个简单sql语句;
join语句先过滤,再关联 -
合理设置map和reduce的个数
怎么设置map的个数: 一个分片就是一个块,一个maptask
源码里面有FileInputFormat类splitsize方法
Math.max(min_size,Math.min(max_size,block_size));
min_size默认参数值是0M
max_size默认参数值是256M
block_size —> 128M
设置max_size和min_size
FileInputFormat.setMaxInputSplitSize(job,size)
FileInputFormat.setMinInputSplitSize(job,size)reduce数量:默认的是一个
在hive:set mapreduce.job.reduce -
开启并行执行
hive.exec.parallel=true设置同时运行的线程数,默认是8个
hive.exec.parallel.thread.number=8 -
jvm重用
一个job启用一个jvm,共用jvm
mapreduce.job.jvm.numtasks 默认是1个,一般可以设置为3或5 ,节省资源 -
推测执行
比如:运行十个map和十个reduce任务 --》九个都执行完毕了,有一个reduce还没结束
mapreduce会重新开启一个跟这个一模一样的任务,两个相同的任务去完成同样一件事情,谁先完成那么另一个就会
被kill掉缺点:会消耗资源,一般不建议开启,有可能数据重复写入,造成异常
-
hive.exec.mode.local.auto 默认是不开启的
速度上会很快限制:job的输入数据不能大于128M,map个数不能超过4个,reduce的个数不能超过一个
-
hive本地模式
hive的压缩设置:
普通:可以建一个源表,然后再创建新表,新表的数据来源于源表 -
hive压缩设置
配置map:
hive.exec.compress.intermediate
true
mapreduce.map.output.compress=true
mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec
配置reduce:
hive.exec.compress.output
true
mapreduce.output.fileoutputformat.compress=true
mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec