1,JVM重用
正常情况下,MapReduce启动的JVM在完成一个task之后就退出了,但是如果任务花费时间很短,又要多次启动JVM的情况下,可以使用jvm重用的参数:
set Mapred.Job.reuse.jvm.num.tasks = 10;
2,Join算法
处理分布式join,一般有两种方法:
Map side join :把其中一个表复制到所有节点,这样另一个表在每个节点上面的分片就可以跟这个完整的表join了;
Reduce side join:把两份数据按照join key进行hash重分布,让每个节点处理hash值相同的join key数据,也就是做局部的join
使用Map join的配置方法有两种,一种直接写hint,语法是/*+MapJOIN (table1,table2)*/,table1,table2就是你想要做replication的表。
另一种方法是设置Hive.auto.convert.join = true,这样Hive会根据hive.mapjoin.smalltable.filesize大小自动判断当前的join操作是否合适做Map join,hive.mapjoin.smalltable.filesize 默认值是25mb
3,合并小文件
1.har
hdfs自带的打包工具,类似于tar,不过用起来不是特别方便,适用于归档(不太常用的历史数据)。
set hive.archive.enabled=true;
set hive.archive.har.parentdir.settable=true;
set har.partfile.size=1099511627776;
ALTER TABLE xx ARCHIVE PARTITION(ds='2008-04-08', hr='12');
ALTER TABLE xx UNARCHIVE PARTITION(ds='2008-04-08', hr='12');
2.insert overwrite table xxx select xxxx
这是一个maponly的job,通过设置combine相关的参数,可以实现对小文件的压缩和合并
具体的参数如下:
set mapred.max.split.size=25000000;
set mapred.min.split.size.per.node=10000000;
set hive.hadoop.supports.splittable.combineinputformat=true;
set mapred.min.split.size.per.rack=10000000;
set hive.exec.compress.output=true;
set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
网友评论