티스토리 뷰
RDD, DataFrame, Dataset의 직렬화 개선
스파크는 성능개선을 위해서 프로젝트 텅스텐을 진행하면서 RDD를 DataFrame, Dataset 으로 개선하였다.
RDD -> DataFrame(v1.4) -> Dataset(v1.6) -> DataFrame, Dataset 통합(v2.0)
이 개선을 진행하면서 속도를 높이기 위해서 데이터를 더 빨리 가져오기 위해서 자바직렬화를 이용하던것을 kyro로 바꾸고 또, Encoder/Decoder를 직접 개선하였다. 메모리에 있는 데이터를 셔플이 발생하면 다른 곳으로 옮기게 되고, 이 시점에 데이터를 직렬화/역직렬화 하는 비용을 Encoder/Decoder를 이용하여 개선할 수 있었다. (데이타 브릭스 자료)
off-heap 모델
또한 스파크의 메모리 모델을 off-heap 모델을 이용하여 속도를 개선하였다. (off-heap 모델)
JVM의 heap은 GC를 처리하기 때문에 객체가 많아지면 속도가 급격하게 느려진다. (데이타브릭스 자료) 이를 JVM의 GC를 처리하지 않는 off-heap을 이용하여 처리 속도를 개선하였다.
set spark.memory.offHeap.enabled=true;
spark.memory.offHeap.size=1G
Catalyst Optimizer
스파크는 옵티마이저를 이용하여 성능을 개선하였다. RDD에서 조인의 경우 사용자가 직접 처리해야 했지만 옵티마이저는 쿼리 플랜을 통해 최적화된 경로를 찾아준다. 예를 들어 where 조건을 분석하여 데이터를 적게 가져올 수 있는 경로를 탐색하여 데이터를 줄인후 셔플을 진행하여 속도를 높여 준다.
Deep Understanding of Spark Memory Management Model
StackOverflow - Difference between on-heap and off-heap
'빅데이터 > spark' 카테고리의 다른 글
[spark] AWS EMR에서 spark-sql을 이용하여 s3 테이블에 데이터를 쓸 때 발생하는 chgrp 오류 (0) | 2019.03.26 |
---|---|
[spark] 스파크 2.0.2 버전 SQL에서 발생하는 MalformedURLException: unknown protocol: hdfs 오류 처리 (0) | 2019.03.22 |
[spark] 스파크 작업 실행하고 처리시간(elapsed) 확인 (0) | 2019.03.06 |
[scala] 이클립스를 이용하여 스파크의 스칼라 개발환경 설정하기 (0) | 2018.06.11 |
[spark] RDD, DataFrame, DataSet (0) | 2018.03.28 |
- Total
- Today
- Yesterday
- 백준
- AWS
- nodejs
- Tez
- HDFS
- 하둡
- Hadoop
- 정올
- SPARK
- 다이나믹
- 알고리즘
- 하이브
- 오류
- oozie
- hbase
- bash
- S3
- HIVE
- build
- 파이썬
- SQL
- Linux
- java
- yarn
- Python
- emr
- mysql
- ubuntu
- airflow
- error
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |