我收到一個java.lang.OutOfMemoryError:在Hive中超出了GC開銷限制。在搜索中,我發現這是因爲該進程的所有CPU時間中有98%會進行垃圾回收(無論這意味着什麼?)。我的問題是我的問題的核心?我是否應該以不同的方式寫下以避免這種問題?更高效的查詢以避免Hive中的OutOfMemoryError
我在嘗試計算特定時間段內某個手機類型有多少個活動的「使用」。有沒有辦法以不同的方式做這個邏輯,那會更好?
select count(a.imei)
from
(Select distinct imei
from pingdata
where timestamp between TO_DATE("2016-06-01") AND TO_DATE("2016-07-17")
and ((SUBSTR(imei,12,2) = "04") or (SUBSTR(imei,12,2) = "05"))) a
join
(SELECT distinct imei
FROM eventdata
where timestamp between TO_DATE("2016-06-01") AND TO_DATE("2016-07-17")
AND event = "Use" AND clientversion like '3.2%') b
on a.imei=b.imei
謝謝
謝謝,這一直非常有幫助。我能夠在以後運行相同的查詢而沒有問題?那麼這可能是由於其他人在服務器上運行了很多查詢嗎? –
嗯......'超出GC上限'意味着你的應用程序98%試圖釋放內存,而不是做一些有用的工作。也許這是因爲沒有更多的可用內存可供分配,因爲所有內存都已被其他進程使用。無論如何,這是一個擔心它的原因。也可以嘗試爲應用程序分配更多內存。看到這個:https://blogs.msdn.microsoft.com/shanyu/2014/07/31/hadoop-yarn-memory-settings-in-hdinsight/如果沒有什麼可以優化的話就做吧。 – leftjoin