本文講述在CentOS 6.5中提交作業到hadoop 1.2.1於reduce階段遇到Error: java heap space錯誤導致作業重新計算的解決過程。解決辦法適用Linux、Mac OS X 和Windows操作系統。
環境:Mac OS X 10.9.5, IntelliJ IDEA 13.1.4, Hadoop 1.2.1
Hadoop放在虛擬機中,宿主機通過SSH連接,IDE和數據文件在宿主機。IDEA自身運行於JDK 1.8,IDEA工程及Hadoop使用JDK 1.6。
在處理Hadoop In Action第4章所引用的專利數據時,遇到了jvm堆空間不足問題,如下圖所示。
看來是java虛擬機堆內存過小導致的。按如下方式設置即可解決[1]。
方式一,臨時處理,每次提交任務前,執行語句 export HADOOP_OPTS=[大小],如將JVM堆大小設置成4G大小,export HADOOP_OPTS= "-Xmx4096m" 再執行hadoop命令。
方式二,永久處理,配置hadoop目錄下conf目錄中的mapred-site.xml文件,加上如下內容,並重啟hadoop以生效。
1 <property> 2 <name>mapred.child.java.opts</name> 3 <value>-Xmx4096m</value> 4 </property>
說明,堆的設置一般從較小值嘗試,逐步增大,當不再出現java heap space提示時即可。32位系統,一般限制在1.5G~2G;64位操作系統對內存無限制。
有關JVM調優信息,可參考JVM調優總結 -Xms -Xmx -Xmn -Xss。
參考
[1]http://stackoverflow.com/questions/15609909/error-java-heap-space