소개
Apache Spark는 데이터 처리기가 데이터 셋에 대한 빠른 접근이 요구되는 머신러닝(machine learning) 알고리즘을 효과적으로 수행할 수 있도록 Scala, Java, Python 등의 훌륭하고 다양한 개발 API 를 지원하는 빠른 속도의 in-memory 데이터 처리 엔진입니다. 스파크는 하둡과 잘 통합될 뿐만 아니라, 기업에서 사용하는 다른 YARN 들과 작업 분담이 가능합니다. 이 블로그에서는, Apache Spark의 기본적인 컨셉에 대한 소개와, Hortonworks, Sandbox에서 Spark를 시작하기 위한 몇 가지 필수적인 단계들에 대해 소개하고자 합니다.
사전조건
참고 : 본 튜토리얼은 HDP 2.2.4과 Spark 1.2.1을 사용합니다. 또한 HDP 2.3과 Spark 1.3.1에서도 동작합니다.
컨셉
Spark의 핵심 아이디어는 탄력적 분산 데이터셋(Resilient Distributed Dataset, RDD), 즉 다수의 물리적 노드로 이루어진 YARN 클러스터에 나뉘어져 분산 저장되어 있으며, 병렬적으로 실행 가능한 불변의 객체 집합을 말합니다. 다시말해 RDD들은 공유 파일 시스템인 HDFS, HBase 또는 YARN 클러스터의 InputFormat을 제공하는 어떠한 소스들로부터 즉시 불러올 수 있는 데이터를 말하는 것입니다. RDD가 한번 인스턴스화 되면 명령어들을 적용 가능하게 됩니다. 모든 명령들은 하나 또는 두 개의 타입(transformations, actions)으로 분류됩니다. 변형 명령(transformation operations)은 이름 추측, 기존의 RDD로 부터 새로운 데이터 셋 생성, YARN 클러스터간에 데이터셋을 분할할 수 있도록 해주는 DAG 프로세싱 생성등을 의미합니다. 이와 다르게 행동 명령(action operation)은 DAG 실행, 값 리턴 등을 의미합니다. 이제 직접 실습해봅시다.
A Hands-On Example
SSH로 Shandbox 쉘을 띄웁니다.
기본 비밀번호는 hadoop 입니다. 이후 아래 명령을 쉘에 입력하도록 합니다.
wget http://en.wikipedia.org/wiki/Hortonworks
데이터를 Sandbox의 HDFS으로 복사합니다.
hadoop fs -put ~/Hortonworks /user/guest/Hortonworks
이제 PySpark 쉘을 실행하고 파일의 라인을 세는 간단한 예제를 동작시켜 봅시다. 쉘은 Spark와 Python을 이용하여 데이터를 다룰 수 있도록 제공합니다.
pyspark
위에서 이야기 한 것 과 같이, 가장 첫 번째 단계는 Spark Context sc를 HDFS에 있는 Hortonworks 파일을 이용하여 RDD를 초기화 하는 것입니다.
myLines = sc.textFile('hdfs://sandbox.hortonworks.com/user/guest/Hortonworks')
RDD를 초기화 하였습니다. 이제 RDD 변형 명령(transformation operations)를 적용시켜볼 시간입니다. 이번의 경우, Python의 람다식을 이용하여 빈 줄을 필터링 하는 간단한 변형 명령을 적용시켜 보겠습니다.
myLines_filtered = myLines.filter( lambda x: len(x) > 0 )
이제 이전 파이썬 구문은 아무런 출력 없이 수행되었습니다. 이러한 출력의 부족으로 변형 명령은 데이터를 건들이지 않고 단지 수행 그래프만을 수정하게 됩니다. 이제 이 변형을 ‘count()’와 같은 수행 명령으로 실체화 시켜 봅시다. 이러한 명령은 이전에 모든 변형 명령을 수행시킨 이후 이를 집계하는 기능을 수행합니다.
myLines_filtered.count()
이번 우리가 수행한 간단하고 작은 이 Spark Job의 최종적인 결과는 가장 마지막에 표시되어 있는 숫자로 확인할 수 있습니다. 이 경우 결과는 108로 출력되었습니다. 이제 이 간단한 예제를 하둡 데이터 플랫폼 위에서 동작하는 좀 더 거대한 데이터 과학 프로젝트에 적용할 수 있도록 당신의 입맞에 맞추어 변형해 사용하시길 바랍니다. 또한, Apache Spark에 대해 더 알고 싶으시다면 아래 링크를 확인해보세요.
* 본 글을 위 링크 게시물을 한국어로 번역/가공한 글입니다.