Ich erhalte einen java.lang.OutOfMemoryError: GC Overhead-Limit in Hive überschritten. Bei der Suche habe ich festgestellt, dass 98% aller CPU-Zeit des Prozesses auf Müll sammeln geht (was auch immer das bedeutet?). Ist der Kern meines Problems in meiner Abfrage? Sollte ich das unten auf eine andere Weise schreiben, um diese Art von Problem zu vermeiden?Effizientere Abfrage zur Vermeidung von OutOfMemoryError in Hive
Ich versuche zu zählen, wie viele von einem bestimmten Telefontyp eine aktive 'Use' in einem bestimmten Zeitraum haben. Gibt es einen Weg, diese Logik anders zu machen, würde das besser laufen?
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
Danke
Vielen Dank, das war sehr hilfreich. Ich konnte die gleiche Abfrage zu einem späteren Zeitpunkt ohne Probleme ausführen? Wäre das dann möglicherweise nur darauf zurückzuführen, dass andere Leute viele Anfragen auf dem Server ausführen? –
Hmm ... 'GC overhead limit exceeded' bedeutet, dass Ihre Anwendung 98% versucht, den Speicher freizugeben und stattdessen einige nützliche Arbeit zu leisten. Vielleicht liegt es daran, dass es keinen freien Speicher mehr zu reservieren gibt, da der gesamte Speicher bereits von anderen Prozessen genutzt wird. Jedenfalls ist das ein Grund, sich darüber Gedanken zu machen. Außerdem können Sie versuchen, Ihrer Anwendung mehr Speicher zuzuweisen. Sehen Sie dies: https://blogs.msdn.microsoft.com/shanyu/2014/07/31/hadoop-yarn-memory-settings-in-hdinsight/ Tun Sie es, wenn es nichts zu optimieren gibt. – leftjoin