아파치 스파크 (Apache Spark)

컴퓨터과학·AI
한 줄 정의: 대용량 데이터를 여러 대의 컴퓨터에서 메모리 기반으로 빠르게 분산 처리할 수 있게 해주는 오픈소스 데이터 처리 프레임워크.

쉽게 풀면

아파치 스파크는 아주 큰 데이터를 여러 컴퓨터에 나누어 동시에 처리할 수 있게 해주는 도구이다. 이전 세대 기술인 맵리듀스가 중간 결과를 매번 디스크에 기록했던 것과 달리, 스파크는 가능한 한 데이터를 메모리에 올려둔 채로 반복 계산을 수행해서 훨씬 빠른 속도를 낸다. 대규모 로그 분석이나 딥러닝 학습에 쓰일 데이터를 정제·전처리하는 파이프라인에서 자주 활용된다.

왜 중요한가

데이터 규모가 한 대의 컴퓨터로 감당할 수 없을 만큼 커지면, 연구든 실무든 여러 대의 컴퓨터에 작업을 나누어 처리하는 분산 처리 기술이 필요해진다. 아파치 스파크는 이러한 분산 처리를 비교적 쉬운 API로 다룰 수 있게 해주기 때문에, 대규모 데이터 전처리·특징 추출·로그 분석을 다루는 논문에서 실험 파이프라인의 기반 인프라로 자주 언급된다. 특히 대규모 말뭉치나 센서 데이터를 다루는 자연어처리, 추천시스템, 사물인터넷 관련 연구에서 데이터 준비 단계의 표준 도구처럼 쓰인다.

어떤 절차인가

스파크는 큰 데이터를 여러 컴퓨터(노드)에 나누어 놓고, 같은 연산을 동시에 실행하는 분산 처리 엔진입니다. 2009년 UC 버클리 AMPLab에서 Matei Zaharia가 시작했고 2010년에 공개되었으며, 2013년 아파치 소프트웨어 재단에 기증되었습니다.

언제 쓰고 무엇을 얻나

중간 결과를 매번 디스크에 쓰는 맵리듀스(Dean & Ghemawat, 2008)와 달리 스파크는 데이터를 메모리에 올려 둔 채 재사용할 수 있어, 같은 데이터를 반복해서 계산하는 작업(반복 기계학습, 대화식 분석)에서 지연 시간을 크게 줄일 수 있다고 설명됩니다.

반대로 자료가 한 대의 컴퓨터로 충분히 처리되는 규모라면 클러스터를 구성하는 수고가 이득보다 클 수 있습니다.

논문에는 이렇게 적는다

분산 처리 결과는 설정에 따라 시간이 크게 달라지므로, 재현을 위해 다음을 적습니다.

수집 로그 120 GB를 노드 8대(노드당 코어 16개, 메모리 64 GB)의 Spark 3.x 클러스터에서 DataFrame API로 정제하였다. (형식을 보여 주려는 가상의 문장이며 수치는 임의입니다.)

논문에서는 이렇게 쓰입니다

실제 논문에서

이 용어를 직접 쓴 국내 논문 문장을 아직 수집하지 못했습니다. 수집되는 대로 출처와 함께 싣겠습니다.

예시 문장

아래는 용어의 쓰임을 보여 주려고 만든 예시로, 실제 논문에서 가져온 문장이 아닙니다.

"원시 웹 크롤링 데이터는 Apache Spark 클러스터를 이용해 정제 및 중복 제거를 수행하였다."

대량으로 수집한 웹 데이터를 여러 대의 컴퓨터에서 병렬로 처리하는 스파크를 이용해 정리했다는 뜻이다.

"수집된 센서 로그는 Apache Spark Streaming 파이프라인을 통해 실시간으로 집계되어 이상 탐지 모델의 입력으로 사용되었다."

사물인터넷 등에서 끊임없이 들어오는 센서 데이터를 스파크의 스트리밍 기능으로 실시간에 가깝게 처리했다는 의미이다.

"거래 로그로부터 사용자별 특징(feature)을 추출하는 과정은 Apache Spark MLlib을 활용해 분산 환경에서 수행되었다."

대량의 거래 데이터를 여러 노드에 나누어 특징을 뽑아내는 작업을 스파크의 내장 머신러닝 라이브러리로 처리했다는 뜻이다.

조금 더 깊게 보면

스파크의 핵심 개념 중 하나는 RDD(Resilient Distributed Dataset)와 이를 발전시킨 DataFrame 구조로, 데이터를 여러 노드에 나누어 저장하면서도 노드 장애 시 재계산을 통해 복구할 수 있게 설계되어 있다. 또한 스파크는 연산을 즉시 실행하지 않고 지연 실행(lazy evaluation) 방식으로 처리 계획을 최적화한 뒤 한꺼번에 실행하는 특징이 있는데, 이 덕분에 불필요한 중간 연산을 줄일 수 있다. 논문에서 성능을 논할 때는 처리 시간 외에도 셔플(shuffle) 비용, 파티션 수, 클러스터 노드 수 같은 설정값이 함께 언급되는 경우가 많으므로, 실험 재현성을 확인하려면 이러한 설정 정보를 같이 살펴보는 것이 도움이 된다.

주의할 점

스파크는 대규모 배치 데이터 처리에 강점이 있지만, 아주 작은 데이터셋이나 단순 작업에는 오히려 설정과 실행 오버헤드가 더 클 수 있다.

헷갈리기 쉬운 용어

스파크와 맵리듀스는 모두 분산 처리 방식이지만, 중간 결과를 다루는 방식이 다릅니다.

용어중간 결과 처리잘 맞는 작업
아파치 스파크메모리 안의 작업 집합으로 재사용할 수 있음반복 계산, 대화식 분석
맵리듀스단계 사이 중간 결과를 디스크에 기록한 번 훑는 대규모 배치 처리

참고 문헌

  1. Zaharia, M., Xin, R. S., Wendell, P., Das, T., Armbrust, M., Dave, A., Meng, X., Rosen, J., Venkataraman, S., Franklin, M. J., Ghodsi, A., Gonzalez, J., Shenker, S., & Stoica, I. (2016). Apache Spark: A unified engine for big data processing. Communications of the ACM, 59(11), 56–65.
  2. Armbrust, M., Xin, R. S., Lian, C., Huai, Y., Liu, D., Bradley, J. K., Meng, X., Kaftan, T., Franklin, M. J., Ghodsi, A., & Zaharia, M. (2015). Spark SQL: Relational data processing in Spark. Proceedings of the 2015 ACM SIGMOD International Conference on Management of Data, 1383–1394.
  3. Meng, X., Bradley, J., Yavuz, B., Sparks, E., Venkataraman, S., Liu, D., Freeman, J., Tsai, D. B., Amde, M., Owen, S., Xin, D., Xin, R., Franklin, M. J., Zadeh, R., Zaharia, M., & Talwalkar, A. (2015). MLlib: Machine learning in Apache Spark. arXiv preprint arXiv:1505.06807.
  4. Dean, J., & Ghemawat, S. (2008). MapReduce: Simplified data processing on large clusters. Communications of the ACM, 51(1), 107–113.

표의 기준값은 위 문헌에 근거한 관례이며, 분야·학술지마다 다른 기준을 쓸 수 있습니다.

관련 용어