Spark - 테이블 캐싱(Caching) 예제
설정 환경
Databrick에서 제공하는 파일을 통해 flights 테이블을 생성합니다.
CREATE TABLE IF NOT EXISTS flights
USING csv
OPTIONS (
header "true",
path "/databricks-datasets/flights",
inferSchema "true"
)
캐싱(Caching) 전후 비교
캐싱을 하지 않았을 때 실행 시간이 2.37초 실행 됨을 확인합니다.
flights 테이블을 캐싱합니다.
CACHE TABLE flights
테이블을 캐싱을 후, 동일한 쿼리의 실행시간을 비교합니다.
아래와 같이 1.39초로 실행시간이 감소하였습니다.
캐싱(Caching) 테이블 확인
Spark UI의 Storage에서 캐싱 테이블 확인할 수 있습니다.
flights라는 테이블이 7개의 캐시파티션으로 100% 캐싱 된 것을 확인 할 수 있습니다.
Spark UI의 DAG Visualization에서 초록색 점을 확인할 수 있으며,
캐시된 데이터에 접근한다는 의미입니다.
텅스턴(Tungsten)
Spark의 텅스턴을 통해 실제 파일크기보다 더 적은 메모리 공간을 활용할 수 있습니다.
아래 이미지를 통해 실제 파일기크는 33.3MB이고,
캐싱된 테이블의 크기는 21.6MB 인 것을 확인 할 수 있습니다.
텅스턴은 Apache Spark의 엔진 최적화 프로젝트로, Spark의 성능을 크게 개선하기 위해 개발되었습니다.
큰 범위에서 텅스턴의 효과는 아래와 같습니다.
성능 개선
Tungsten 프로젝트로 인해 Spark의 CPU 사용률과 메모리 효율성이 크게 개선되어,
데이터 처리 속도가 빠르게 향상됩니다.
자원 사용 최적화
메모리와 CPU 자원을 더 효율적으로 사용하므로, 동일한 작업을 더 적은 리소스로 처리할 수 있습니다.
Spark SQL 및 DataFrame API 최적화
Tungsten은 특히 Spark SQL과 DataFrame API에서 성능을 극대화하며,
이를 통해 Spark가 빅데이터 처리를 위한 데이터 처리 엔진으로 더욱 경쟁력을 갖추게 합니다.
Lazy Cache
lazy cache는 필요한 만큼의 데이터만 캐싱합니다.
기존에 캐싱되었던 flights 캐시를 삭제하고 lazy cache로 재설정합니다.
UNCACHE TABLE flights
CACHE LAZY TABLE flights
데이터의 일부분만 접근하도록 쿼리를 실행합니다.
SELECT * FROM flights LIMIT 100
전체 테이블을 캐싱했을 때(7개 파티션)과 다르게 1개의 파티션만 캐싱 된 것을 확인 할 수 있습니다.
따라서 나머지 6개보다, 1개의 파티션이 쿼리를 실행할 때 더 빠르게 spark job이 실행되는 것을 볼 수 있습니다.