2010-11-01 43 views
0

大家好 這是我的問題: 首先,我正在與hadoop和單個節點配置 我正在開發一個應用程序,我只做了一個地圖功能,在這個映射函數中,我調用了10個函數, 應用程序從csv文件中讀取並處理某個列,我已經創建了jar文件和所有東西,當我在窗口上運行帶有4000行的csv的應用程序時(windows 7 )(使用cygwin)在4 GB RAM機器上,應用程序工作正常,但是當我在2 GB RAM機器上的linux-ubuntu上運行它時,它會處理一些行,但會引發「Java堆空間」錯誤,或者有時線程被殺死。hadoop窗口(工作正常)linux java堆空間

對於Linux: 我已經試圖改變Hadoop的出口HEAP_SIZE還取決於應用程序的XMX和X毫秒參數,並取得了一定的差異,但不要太多,錯誤發生的劇照...

待辦事項你知道它爲什麼會發生?它因爲4GB和2GB的RAM之間的區別?

感謝

+1

好吧,有這麼多地方可以開始尋找,所以它會非常冒失地指責它的RAM區別。你爲什麼不嘗試運行VisualVM [與JDK同時免費爲Linux和Win打包]。採取一些內存堆棧轉儲來查看應用程序的行爲。個人而言,我不認爲閱讀4000行對於2張RAM來說是件大事! – anirvan 2010-11-01 20:39:10

+0

2GB RAM機器可以輕鬆處理4000行。我會說,驗證你的10個功能,以解決任何可能的內存問題。 – 2011-01-26 17:01:54

回答

0

有一件事我有一個映射跑進是如果你調用從map函數中開始自己的線程/應用功能/對象,這樣可以輕鬆地創建足夠的線程來使用所有的堆空間那個JVM。 每個映射器將有setupcleanup函數調用一次。在我的情況下,我能夠處理並將所有數據放入ArrayList,然後在cleanup函數中執行所需的額外處理。