Spark 의 Global Temporary View

22 May 2018

많은 업체들이 Spark 를 이용해 데이터를 처리하고 있고 내가 다니는 회사인 밸런스히어로도 Spark 를 이용해 배치 작업 및 Ad-hoc 작업을 처리하고 있다.

그러다 보면 큰 데이터 또는 파티셔닝 된 데이터와 아주 작은 크기의 메타 정보가 담긴 데이터와 같이 연산을 해야 하는 경우가 발생한다.

그러한 데이터 사이즈의 불균형으로 인해서 클러스터 상의 특정 장비에만 작업이 쏠리고 클러스터의 성능을 많이 발휘 못하는 상황이 발생한다. (그만큼 느려진다)

그래서 메타 정보를 Spark Global Temporary View 에 등록하고 쿼리를 수정했다.

Global Temporary View

spark.read.parquet("...").createOrReplaceGlobalTempView('temp_view')
# ...
spark.sql("SELECT * FROM global_temp.temp_view")
# ...
spark.catalog.dropGlobalTempView('temp_view')

위의 예시는 Python 코드로 Spark 2.1.0 에서 처음 소개 되었고 선언하고 나면 일종의 임시 테이블로 접근할 수 있다.

모든 장비에 최초에 한번 등록하고 나면 이후에 해당 데이터로 인한 셔틀링 없이 데이터의 불균형이 해결되어서 성능이 개선되었다.

주의 해야할 점은 일단 등록시 IO로 인해서 초기 로딩 속도가 느려지고, 만약 아주 큰 크기의 View 가 등록되었으면 장비가 내려갈 수도 있다. 이와 같은 이유로 Global Temporary View 를 신중히 검토하고 사용해야 한다.

참고한 링크들

Archives

2018년 회고

2018년도 끝이 왔다.

데이터 처리의 단순화

데이터야놀자 2018 발표

Spark 의 Global Temporary View

데이터 사이즈 불균형으로 인한 ...

2017년 회고

어느새 2017년 마지막이 되어...

Spark 에서 S3 데이터 삽질기

AWS V4 API만 제공되는 ...

iPhone 7

어쩌다보니 한국 발매 이전에 아...

Android Internals

액티비티가 어떻게 구동되는지 알...

Android Wi-Fi State Machine

연구실 주제로 필요에 의해서 안...

주변의 AP를 찾는 방법

Wi-Fi 장비의 Scan 에 ...