hive优化2

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;

你可能感兴趣的:(hive优化2)