반응형
스파크(Spark)에서 OutOfMemoryError:Java heap space 다음과 같은 에러 메세지가 발생했다면
스파크 어플리케이션 내부에서 다음과 같은 메서드를 사용하지 않았는지 확인해볼 필요가 있다.
- collect()
- countByKey()
- countByValue()
- collectAsMap()
사실 이전에 collect() 메서드 사용시 주의점을 포스팅하긴했었다...
http://brocess.tistory.com/56 - [Spark collect 연산시 주의사항]
해당 메서드들을 rdd에 사용하게 되면 각각의 executor 노드들에서 돌고있는 rdd element들을 driver로 copy하려고 한다.
따라서 RDD의 사이즈가 크다면 driver에서 해당 RDD들을 저장할 메모리가 부족하게 되고 이에 OOME(OutOfMemory)가 발생할 수 있다.
이번에 나도 무심결에 RDD를 collectAsMap()해버려 위와 같은 에러가 발생하였다...
단순히 RDD를 map형태로 만들어 놓고 다른 RDD연산을 위해 사용하려고 했던 생각해서 저지른 실수였다...
물론 충분한 driver memory를 spark-submit시 할당해 주면 되겠지만 아무래도 클러스터 내에 해당 어플리케이션만 동작하는게 아니기 때문에
좋지 않은 방법이다.
따라서 사이즈가 큰 데이터를 map형태로 이용하고 싶다면 Storage(RDBMS, NOSQL)을 사용하기를 권한다.
반응형
'Bigdata > Spark' 카테고리의 다른 글
[ Spark ] 스파크 데이터프레임(Dataframe) partitionBy를 사용해 입맛에 맛게 저장하기 (0) | 2018.04.13 |
---|---|
[ Spark ] JavaRDD로 saveAsTextFile했는데 데이터가 정상적으로 나오지 않는 경우 (0) | 2018.01.10 |
[Spark] 스파크(Spark) 스트리밍 성능 개선 (0) | 2017.11.01 |
[Spark] 하둡 MR보다 스파크(SPARK)를 사용할 때 장점 (0) | 2017.10.24 |
[Spark] scala spark(스파크) orc 파일읽기 (spark read hive orc format) (0) | 2017.09.18 |