하둡 YARN 클러스터에서 Spark Application을 실행하는 모델 (Hadoop Yarn and Spark App model)

This article is based on Hortonworks Partner Content and Expertise

하둡 2.0의 리소스 관리 플랫폼이라고 할 수 있는 YARN(Yet Another Resource Negotiator)에 대해서는 여러 기사에서 소개를 드렸습니다.

하둡 2.0 YARN의 컨셉에 대한 검토와 적용방법
현대적인 하둡 아키텍쳐의 구성요소와 역할

일반적으로 하둡을 경험하면 하둡파일시스템(HDFS)와 맵리듀스(MapReduce)의 패러다임에서 생각을 하게 됩니다만 하둡 2.0에서 YARN의 컨셉이 적용되면서 맵리듀스도 많은 다양한 데이터 처리 방식 중의 하나로 받아들여 지게 되었습니다.
현재 맵리듀스 어플리케이션 다음으로 많이 적용되는 데이터 처리 방식이 스파크(Spark)가 아닐까 싶습니다.

바로 얼마전에 드디어 Spark 1.0이 발표가 되면서 비로소 기업 현장에서 적용할 수준으로 안정화가 되었다는 기대감을 갖게 됩니다.
스파크(Spark)는 맵리듀스가 가진 퍼포먼스에 대한 약점을 보완하는 가장 현실적인 방법으로 받아들여 지고 있지만 제대로 적용하기 위해서는 맵리듀스와의 차이점에 대해서 확실히 할 필요가 있습니다.

그 중에서 하둡 클러스터에서 적용하는 단계에서 가장 현실적인 차이점을 알아 보겠습니다.
간단히 요약하자면, 맵리듀스는 잡(Job)이 하나의 큰 단위로서 인풋 데이터를 받아서 Map task와 Reduce task를 실행시켜서 결과를 저장하는 흐름입니다.
스파크(Spark)는 물론 잡이라는 개념을 사용하고 있지만 많은 잡들을 순차적으로 혹은 병렬적으로 실행시키는 어플리케이션(Application)이라는 상위 단위를 가지고 있습니다.
이 부분은 많은 의미를 가지고 있고 YARN과의 연동 지점에서도 큰 의미를 가지고 있습니다.

“SQL문을 HIVE를 통해서 맵리듀스 잡으로 변환하여 처리하는 경우에 스파크를 사용하면 연관이 있는 잡들을 순차적 때로는 병렬적으로 실행시켜서 성능을 획기적으로 향상시킨다.”
아주 단순하게 얘기하자면 이렇게 요약할 수 있겠습니다.
이 부분을 기술적으로 이해하기 위해서는 DAG 처리 알고리즘에 대한 다른 문서들을 참조하시기 바랍니다.

간단한 스파크 어플리케이션의 구조를 살펴보겠습니다.

spark

스파크 어플리케이션의 본질은 SparkContext 클래스의 인스터스로 보면 됩니다.
물론 어플리케이션은 하나의 잡을 실행시켜서 맵리듀스와 동일한 동작을 하는 형태로도 이용가능하지만 그 힘은 잡을 실행시키고 있지 않더라도 독자적으로 실행되고 있는 ‘Executors’라는 요소에 있습니다.
이 구조를 통해서 데이터를 미리 메모리에 집적시켜서 처리하거나 여러 가지 잡을 실행할 수 있는 기반을 제공합니다.

아키텍쳐에서 보면 두 개의 잡이 있지만 각각 Executor에서 태스크들을 병렬적으로 실행할 수 있는 구조라는 점을 보여 줍니다.
위 다이어그램에서 스파크 드라이버(Spark Driver)는 맵리듀스의 잡트래커처럼 잡과 태스크를 분배하고 매니징하는 프로세스로 이해하시면 됩니다.

맵리듀스에서의 태스크는 각자 프로세스에서 돌아가고 태스크가 종료되면 프로세스도 종료되지만 스파크 구조에서는 하나의 프로세스에서 여러 개의 태스크를 실행할 수 있음으로써 성능을 향상시키고 보다 복잡한 데이터 처리를 할 수 있는 유연성을 제공한다는 점이 가장 큰 차이점입니다.

그러면 이러한 스파크 어플리케이션을 YARN 클러스터에서 어떻게 구현하고 있는 지 핵심적인 모델을 살펴보도록 하겠습니다.

yarnspark

YARN은 일종의 하둡 클러스트의 리소스를 전체적으로 관리하는 리소스 매니저라는 부분을 통해서 이 아키텍쳐를 보면 앞에서 설명했던 ‘Executors’는 YARN의 컨테이너로서 동작한다는 것을 이해할 수 있습니다.

맵리듀스가 YARN의 컨테이너에서 각 태스크마다 별도의 JVM을 실행시키는 것과 달리 스파크는 하나의 컨테이너에서 여러 개의 태스크를 실행하고 태스크가 종료되더라도 남아 있다라는 차이를 다시 한 번 생각해 볼 필요가 있습니다.

스파크 어플리케이션이 YARN에서 실행되면 먼저 어플리케이션 매스터(Application Master) 프로세스가 생성이 되는 데 이것이 바로 Spark Driver를 실행하는 컨테이너가 됩니다.
그리고 이 Spark Driver가 YARN의 리소스 매니저와 협상하여 이 어플리케이션을 실행하기 위한 리소스를 받아냅니다.
리소스를 받아내면 YARN 노드 매니저(Node Manager)에게 Spark Executor를 실행하기 위한 컨테이너를 생성하도록 지시합니다.
이 후에 이 Spark Executor가 태스크들을 할당받아서 실제로 태스크를 수행하는 프로세스입니다.

스파크에 대한 자세한 설명은 다음 문서를 참조하시기 바랍니다.
Spark Documentation <-- 다운로드

실제로 스파크는 성능 및 유연성에서 맵리듀스보다 구조적으로 월등하기 때문에 특히 SQL구문을 통해서 결과를 바로 얻어내기 위한 시나리오에서는 맵리듀스보다 탁월합니다.
그리고 자체적으로 맵리듀스의 기능도 포함하기 때문에 앞으로는 보다 더 많은 분야에 활용될 것으로 기대가 되고 있습니다.

하지만 스파크 어플리케이션을 YARN 클러스터에서 세팅하고 운영하는 부분은 아직 쉽지 않습니다.
호튼웍스 데이터 플랫폼은 이러한 스파크 어플리케이션을 위해 클러스터를 세팅하고 운영하는 부분을 직관적으로 하기 위해서 배포판에 통합하여 제공하고 있으니 실제 도입 시에는 통합 테스트가 된 배포판을 이용함으로써 많은 시행착오를 줄일 수 있을 것입니다.

앞으로는 Spark Application을 어떻게 활용할 것인지를 중심으로 소개드리도록 하겠습니다.

-----------------------------------------------------------------------------------------------------------------------------
ASD Technologies는 호튼웍스(Hortonworks Inc)와의 Consulting Partnership을 통해서
빅데이터에 대한 도입 컨설팅 및 구축을 도와드리고 있습니다.

ASD Technologies는 펜타호(Pentaho Inc)와의 Consulting and Distribution Partnership을 통해서
빅데이터에서 비즈니스 인사이트를 얻기 위한 방법을 함께 모색하고 있습니다.

호튼웍스 파트너 홈페이지
ASD Technologies Korea 홈페이지

Contact Point : sunung@asdtech.co
—————————————————————————————————————————–