빅데이터

Spark 개발환경 구축 - Scala, Intellij, Maven

CyberI 2017. 5. 25. 16:42

Spark를 개발하려면 개발환경부터 구축을 해야 하는데, 대표적으로 많이 사용하는 IDE 툴에는 IntelliJ, Eclipse가 있습니다. 그 중에서 Scala 개발환경에 조금 더 인기가 있는 IntelliJ를 사용하려 합니다. 

그리고 SBT(Simple Build Tool)을 사용하거나, Maven을 사용하는 방법이 있는데 여기서는 Maven 방식의 개발환경을 설명하려 합니다.  (여기저기 찾아봐도 완벽하게 되는 개발환경을 찾을 수가 없어서... )

 

간략하게 Maven을 선택한 이유는

1. SBT는 Maven에 비해 빠르고 효율적이지만 소스의 크기가 커지면 관리하기가 힘들다. 

2. Maven은 일반적으로 많이 쓰여서 자료검색에 용의하다.

위의 2가지 이유로 Maven을 선택하였습니다.

 

저의 개발환경은 Linux에 Spark가 설치되어 있고, Linux에서 모든 Spark 프로그램들을 실행 할 예정입니다. 

즉, 개발은 Intellij를 통해 Window를 통해서 하고 실제 결과는 Linux에서 확인하는 것이죠. 

Zeppelin이라는 좋은 오픈소스를 통해서 실제 테스트를 하고 있지만, 자동완성 기능 같은 개발향상성을 위한 방법으로 Intellij개발환경을 구축합니다. 

 

그러면 ! 이제부터 실제로 IntelliJ를 설치하겠습니다.

http://www.jetbrains.com/idea/?fromMenu

위의 사이트에서 IntelliJ를 다운로드 합니다.

 

이런 화면이 나오면서 Next를 눌러가며 설치를 합니다.

 

그런 다음 Maven 프로젝트를 생성합니다. 

File -> New -> Project를 선택하여서 Maven을 선택합니다.

"Create from archetype"에 체크하고 "Add Archetype.."을 선택하여 아래 내용을 입력합니다.

GroupId : net.alchim31.maven

ArtifactId : scala-archetype-simple

Version : 1.6

 

아래와 같이 지금 추가한 archetype을 선택하고 Next를 선택합니다.

 

 

이제 내가 사용할 프로젝트의 상세 내용을 입력합니다. 

저는 com.cyberx라는 GroupId를 사용하였고, ArtifactId에는 IntellijMavenProject라고 입력하였습니다.

 

제대로 되었는지 확인하고, Next로 넘어갑니다.

 

프로젝트 명과 프로젝트를 어디에 위치할지 입력합니다.

 

프로젝트가 생성되었습니다. 처음에 pom.xml이 열립니다. 무언가를 마구 진행하면서 pom.xml의 내용이 바뀝니다. 느긋하게 기다려봅시다^^

 

저 같은 경우는 따로 test를 안쓰기 때문에 (쓸데없는 에러를 없애기 위하여..) 테스트 관련 내용을 지워버렸습니다.

아래에 블럭들을 지워버리구요. ( /dependencies>는 지우시면 안되요 ㅠㅠ )

 

<testSourceDirectory>src/test/scala</testSourceDirectory>

<goal>testCompile</goal>

<configuration><args> 들을 주석처리 합니다. 

 

그리고 maven-surefire-plugin을 지우고, maven-shade-plugin을 추가 합니다. 

간략하게 설명하면 jar를 만들어주는 플러그인으로, 프로젝트의 타입뿐만 아니라 의존하는 jar에 포함된 모든 타입을 포함하는 한개의 jar로 만들어주는 플러그인 입니다.

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-shade-plugin</artifactId>
  <version>3.0.0</version>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>shade</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <filters>
      <filter>
        <artifact>*.*</artifact>
        <excludes>
          <exclude>META-INF/*.SF</exclude>
          <exclude>META_INF/*.DSA</exclude>
          <exclude>META_INF/*.RSA</exclude>
        </excludes>
      </filter>
    </filters>
    <finalName>${project.artifactId}-cyberx-${project.version}</finalName>
  </configuration>
</plugin>

 

App를 한번 실행해봅니다. 잘 되야 합니다. (잘안되면 어딘가에 Change Import 같은게 떳는지 확인하고 누르세요!)

 

이제 Spark-core, Spark-sql을 Dependency에 추가해봅니다. 아마 2개는 거의 필수적으로 쓰게 될 것 같습니다.

<dependency>
  <groupId>org.apache.spark</groupId>
  <artifactId>spark-core_2.11</artifactId>
  <version>RELEASE</version>
  <scope>provided</scope>
</dependency>
<dependency>
  <groupId>org.apache.spark</groupId>
  <artifactId>spark-sql_2.11</artifactId>
  <version>RELEASE</version>
  <scope>provided</scope>
</dependency>

 

잘 추가가 되면 우측에 Dependencies 부분에 Spark들이 추가가 됩니다.

 

이제 준비는 다 되었습니다!

Spark Object를 만들어 보겠습니다!

원하는 위치에서 오른쪽마우스 -> New -> Scala Class 를 선택하고,

Name에 원하는 이름을, Kind에 Object를 선택합니다.

 

간단하게 spark Session을 하나 만들고, 프로그래밍의 기본인 println을 찍어 봅니다. 

그런 다음 Maven의 Clean, Compile, Package를 한번씩 실행합니다. 

 

 

 

그러면 프로젝트를 만든 폴더에 "target"이라는 폴더가 생성되고, 위에서 maven-shade-plugin에 쓴 이름대로 jar파일이 생성되어 있는 것을 확인할 수 있습니다. 

 

그러면 이제 준비는 완료 되었고, FTP를 통해서 Linux 서버로 jar를 넘깁니다. 저는 /tmp에 "IntellijMavenProject-cyberx-1.0.jar 파일을 넘겼습니다. 

 

이제 spark-submit 명령어를 한번 날려 봅시다!

 

저는 linux에 spark폴더를 path로 잡아놔서 어디서 날려도 spark-submit 명령어가 실행될 수 있도록 해놨습니다.

안하신 경우에는 spark의 bin폴더로 들어가서 명령어를 실행해주셔야 겠지요 ^^ 

 

spark-submit 명령어의 상세한 내용은 다음에 설명하도록 하겠습니다.

 

spark-submit --master yarn --class com.cyberx.CyberXTest /tmp/IntellijMavenProject-cyberx-1.0.jar

com.cyberx 라는 곳에 CyberXTest라는 Object를 호출할 것이고, 그것의 위치는 /tmp/에 ~.jar 파일에 있다는 내용입니다.
실행을 하면 println이 찍히겠지요! 확인해보겠습니다.
 

 

제대로 실행이 되었습니다.

 

이제 Scala + IntelliJ + Maven 개발환경 구축이 완료 되었습니다!! 

 

시리즈 내용은 아래 링크를 통해 확인해주세요.

 

Spark 개발환경 구축 - Zeppelin Spark Interpreter에 HBase 연결하기