在昨天的文章 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[......]
在昨天的文章 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[......]
1. 为什么写这篇文章
这篇文章的根源是在产品中发现了一个诡异的bug:只能在产品环境下重现,在我的本地开发环境无法重现,而双方的代码没有任何区别。最后用remote debug的方法找到异常所在:
Exception in thread "main" java.lang.IllegalArgumentException: Comparison
method violates its general contrac[......]