2016년 3월 24일 목요일

IntelliJ에서 spark 개발환경 구성 방법

IntelliJ에서 spark 관련 개발환경 구성 방법

목적

IntelliJ에서 spark 관련 코드를 개발하고 빌드할 수 있는 환경을 만들 수 있는 방법을 조사하여 정리한다.

개발환경 구성방법

개발환경을 구성하는 방법에는 다음 세 가지가 있다.
1.     Spark를 빌드한 jar 파일을 사용하는 방법.
2.     SBT를 사용하는 방법
3.     Maven을 사용하는 방법
위 세 가지 방법 중에 1번 방법은 프로젝트를 구성하고 관리하는 방향과는 거리가 있고 spark 빌드할 필요가 현재로서는 없고 부담되는 작업이 될 수 있어 여기서는 다루지 않았다.

SBT (Simple Build Tool)

스칼라로 작성된 스칼라 코드를 빌드할 수 있는 툴이다.
의존성 관리에 Ivy를 사용한다.
SBT와 관련된 정보는 다음 url을 참조할 수 있다.
http://www.scala-sbt.org/index.html
구성 방법은 다음과 같다.
1.     IntelliJ scala SBT 플러그인을 설치한다.
2.     프로젝트 생성 시 SBT를 선택한다.

3.     그 다음 화면에서 SBT 버전과 Scala 버전을 맞추고 프로젝트를 생성한다.

4.     프로젝트가 생성되면 우측하단에 프로그레스바가 보이면서 관련된 작업을 한다. 이때 수분이 걸릴 수 있으니 대기해야 한다.
5.     Spark 코드를 빌드해보기 위해 spark 예제 중, SparkPi를 추가한다. (SparkPi spark를 다운로드 받으면 그 안에 포함되어 있다.)
6.     지금까지 하면 프로젝트는 다음과 같은 구조를 갖는다.

7.     현재 spark를 참조하지 못하므로 코드 상에서 에러가 발생한다.  build.sbt 파일에 spark를 참조할 수 있는 설정을 넣는다. 설정을 넣은 build.sbt 파일의 내용은 다음과 같다.


8.     메뉴 View->Tool Windows->SBT Console 을 실행한다.
9.     SBT Console 화면에서 Start SBT 버튼을 클릭한다.

10.  위와 같은 화면의 커서에서 ‘package’ 명령을 실행한다.

11.  위와 같은 화면이 나오면 package 작업에 성공함을 의미한다. 해당 프로젝트의 target 디렉토리에 가면 생성된 jar 파일을 확인할 수 있다.

Maven

Maven을 사용하여 개발환경 구성하는 방법은 다음과 같다.
1.     프로젝트를 생성 시, Maven을 선택한다. 그리고 scala archetype을 추가한다.

2.     추가 시, 다음과 같이 정보를 입력한다.
A.     GroupId: net.alchim31.maven
B.     ArtifactId: scala-archetype-simple
C.     Version: 1.6
3.     추가한 archetype을 선택하여 프로젝트 생성을 진행한다.
4.     예제로 생성한 프로젝트에 빌드 테스트를 위해 SparkPi.scala 파일을 추가한다.
5.     Pom.xml 파일을 보면 사용하는 scala.version 2.11.5로 들어가 있다. 본인이 작업 시에 설치된 scala 버전은 2.11.7 버전이므로 이 정보를 수정하였다.
6.     Pom.xml  파일에 scala-core의 의존성을 추가한다.
<dependency>
     <groupId>org.apache.spark</groupId>
     <artifactid>spark-core_2.11</artifactId>
     <version>1.6.0</version>
     <scope>test</scope>
</dependency>

   


7.     메뉴 View->Tool Windows->Maven Project를 실행한다.
8.     Maven Project 화면에서 package를 더블클릭하여 실행한다.
9.     실행하면 “bad option: '-make:transitive'”이란 에러가 발생한다. Pom.xml  파일에서 이 부분을 주석처리한다.
10.  다시 한번 package를 실행한다. 그러면 테스트 부분에서 JUnitRunner가 없다는 에러가 발생한다. 그러면 다음 의존성을 추가해준다.
<dependency>
    <groupId>org.specs2</groupId>
    <artifactId>specs2-junit_${scala.compat.version}</artifactId>
    <version>2.4.16</version>
    <scope>test</scopre>
</dependency>



11.   이후에 package를 실행하면 성공함을 확인할 수 있다.

정리

개발환경 구성을 SBT, Maven으로 구성할 수 있는 방법을 알아보았다. 그렇다면 무엇을 쓰는 것이 좋을까?”라는 의문이 생기게 된다. 이와 관련해서 구글링을 통해 확인한 바로는 SBT Maven에 비해 빠르고 효율적이지만(이는 Maven은 매번 새로 컴파일을 하지만 SBT는 컴파일한 작업을 캐시하기 때문) 작고 간단한 프로젝트에 좋다는 얘기가 많다. 소스의 크기가 커지거나 하면 SBT로 관리하기에는 무리가 있다는 얘기이다. 또한 maven은 일반적으로 많이 쓰여서 잘 알고 있는 반면 SBT scala 빌드를 위한 DSL로 만들어진 빌드 툴로 기존에 maven을 알고 있는 사람이라면 새로 학습을 해야 한다.
개인적인 생각으로 차세대TF팀에서는 maven을 사용하기를 바란다. 왜냐하면 본인이 maven을 많이 써봤고 익숙하다. 또한 프로젝트 크기가 커질 경우의 관리에 대해서도 고려해야 한다고 생각하기 때문이다.

이상으로 IntelliJ에서 spark 개발환경 구성에 대한 내용을 마무리한다.

댓글 없음:

댓글 쓰기