Hadoop報錯 Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded

今天在查看Hadoop平臺上HDFS數據文件文件半天沒反應,最後報錯:Exception in thread “main” java.lang.OutOfMemoryError: GC overhead limit exceeded,超出GC開銷限制。報這種錯誤常見的原因有以下幾種:
1.內存中加載的數據量過於龐大,如一次從數據庫取出過多數據;
2.集合類中有對對象的引用,使用完後未清空,使得JVM不能回收;
3.代碼中存在死循環或循環產生過多重複的對象實體;
4.啓動參數內存值設定的過小;

我用以下命令

hadoop fs -count /user/

查看下該文件目錄下有多少文件,發現已經有幾十萬個文件了,那報這個錯誤基本斷定是:一次從HDFS中讀取過多數據文件,HDFS內存中加載的數據量過於大超出了設定的內存閥值。Hadoop也是Java開發的,Java中所有的對象都存儲在堆中,通常如果JVM無法再分配新的內存,內存耗盡,垃圾回收無法及時回收內存,就會拋出OutOfMemoryError。
在這裏插入圖片描述
既然是內存不足,那解決的辦法就是把HDFS的內存設置大點。我這裏是在Ambari控制檯調大了
在這裏插入圖片描述
當然也可以修改hadoop-env.sh文件中對應的值
在這裏插入圖片描述

把這些參數調大了之後就能正常查看文件了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章