Spark에서 Executor 또는 Driver의 메모리가 너무 적으면 OutOfMemoryError가 발생할 수 있다. 


WARN TaskSetManager: Lost task 68.0 in stage 9.0 (TID 510, story-hadoop-dn11.dakao.io): java.lang.OutOfMemoryError: GC overhead limit exceeded

	at java.io.ObjectStreamClass.newInstance(ObjectStreamClass.java:967)
	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1785)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
	at org.apache.spark.serializer.JavaDeserializationStream.readObject(JavaSerializer.scala:76)
	at org.apache.spark.serializer.DeserializationStream.readKey(Serializer.scala:169)
	at org.apache.spark.serializer.DeserializationStream$$anon$2.getNext(Serializer.scala:201)
	at org.apache.spark.serializer.DeserializationStream$$anon$2.getNext(Serializer.scala:198)
	at org.apache.spark.util.NextIterator.hasNext(NextIterator.scala:73)
	at scala.collection.Iterator$$anon$12.hasNext(Iterator.scala:396)
	at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:369)
	at org.apache.spark.util.CompletionIterator.hasNext(CompletionIterator.scala:32)
	at org.apache.spark.InterruptibleIterator.hasNext(InterruptibleIterator.scala:39)
	at scala.collection.Iterator$class.foreach(Iterator.scala:742)
	at org.apache.spark.InterruptibleIterator.foreach(InterruptibleIterator.scala:28)
	at org.apache.spark.rdd.SubtractedRDD.integrate$1(SubtractedRDD.scala:122)
	at org.apache.spark.rdd.SubtractedRDD.compute(SubtractedRDD.scala:127)
	at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:306)



Spark는 모두 메모리에 올리기 때문에. 이런 현상이 자주 발생될 수 있는데, 


해결하기 위해서는 Hdfs 파일의 크기(압축이라면 이에 맞게 *8 또는 *10해서 대략 예측 크기를 고려한다)


core 개수와 driver, executer 메모리도 이에 맞게 늘리면 더 이상 문제가 발생하지 않는다. 

'scala' 카테고리의 다른 글

[scala] List와 Array의 lift 메소드  (0) 2017.03.04
[펌] spark 2.0 소개(성능)  (0) 2017.03.02
[spark] spark summit 자료  (0) 2017.02.22
[scala] Array.transpose 예시  (0) 2017.02.17
[spark1.6] rdd를 dataframe으로 만드는 방법  (0) 2017.02.14
Posted by '김용환'
,