在昨天的文章 TimSort in Java 7 中,我们讨论了升级到JDK 7后,Collection的sort方法,出现兼容性问题的原因。
究其根本,还是我们写的compare函数不够严谨。
本文主要针对Hadoop、Hive,从系统的部署、配置层面提出一些解法。
1、Hive
在执行前,指定JVM选项。
set mapreduce.map.java.opts=-Xmx2000m -Djava.util.Arrays.useLegacyMergeSort=true set mapreduce.reduce.java.opts=-Xmx2000m -Djava.util.Arrays.useLegacyMergeSort=true;
2、Hadoop
修改mapred-site.xml,增加选项。
<property> <name>mapreduce.map.java.opts</name> <value>-Xmx2000m -Djava.util.Arrays.useLegacyMergeSort=true</value> </property> <property> <name>mapreduce.reduce.java.opts</name> <value>-Xmx2000m -Djava.util.Arrays.useLegacyMergeSort=true</value> </property>