Computer Engineering/Data Engineering

IntelliJ로 Spark 개발 환경 구축하기

jordan.bae 2022. 7. 1. 01:53

Introduction

Spark!

여러 클라우드 환경이나 컨테이너 환경에서 간단하게 Spark를 사용할 수 있지만 local 환경에서도 Spark를 실행시킬수 있는 환경을 만들어두면 가볍게 테스트 할 수 있는 것들이 많아서 Local 환경에서도 Spark application을 build하고 실행시킬수 있는 환경을 구축하는 과정을 기록해 두려고 합니다.

Spark의 개발 환경을 셋팅하기 위해서 Scala 및 JDK를 설치해야합니다. Spark는 scala로 작성되었고, scala는 JVM위에서 동작하기 때문입니다. 그렇기 때문에 JDK, Scala를 먼저 설치해야 합니다.

 

1.  JDK 설치하기

출처: oracle 사이트

JDK는 Java를 사용하기 위해 필요한 모든 기능을 갖춘 Java용 SDK로 javac(컴파일러), jdb, javadoc같은 도구를 포함합니다. Java 프로그램을 생성하고 컴파일 하고 실행할 수 있습니다. JRE는 JVM, Java library class, Java command 및 기타 인프라를 포한한 컴파일된(바이트 코드) Java프로그램을 실행하는데 필요한 패키지입니다.

 

그럼 JDK를 brew를 이용해서 설치하도록 하겠습니다.

brew update

# adoptopenjdk/openjdk 추가하기
brew tap adoptopenjdk/openjdk

# 설치 가능한 모든 JDK 찾기
brew search jdk
==> Formulae
openjdk             openjdk@17          jd                  cdk
openjdk@11          openjdk@8           mdk

==> Casks
adoptopenjdk/openjdk/adoptopenjdk-jre
adoptopenjdk/openjdk/adoptopenjdk-openj9
adoptopenjdk/openjdk/adoptopenjdk-openj9-jre
....


# 원하는 버전을 설치한다
# 11 version을 설치
# Spark 3.3 runs on Java 8/11/17 인데 java8은 내년에 support 종료.
brew install --cask adoptopenjdk11
==> Downloading https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/down
....

# java path 및 version 확인
➜  ~ /usr/libexec/java_home -V
Matching Java Virtual Machines (1):
    11.0.11 (x86_64) "AdoptOpenJDK" - "AdoptOpenJDK 11" /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home

➜  ~ java --version
openjdk 11.0.11 2021-04-20
OpenJDK Runtime Environment AdoptOpenJDK-11.0.11+9 (build 11.0.11+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK-11.0.11+9 (build 11.0.11+9, mixed mode)

brew를 이용해서 jdk 설치를 완료했습니다. 그럼 이제 scala를 설치해보도록 하겠습니다.

 

 

2. Scala 설치하기

설치 전에 JDK와 Scala의 호환성을 체크합니다.

https://docs.scala-lang.org/overviews/jdk-compatibility/overview.html

 

JDK 11을 설치했기 때문에 2.13.8 or 2.12.16을 설치해서 사용하는 것이 좋습니다.. scala는 IntelliJ를 이용해서 설치합니다.

보통 Scala는 Intelli J IDE를 사용해서 개발합니다. Intelli J에서 scala 개발 환경을 구축하기 위해서는 scala plugin을 설치해줘야 합니다.

 

Langugage에서 scala를 선택하고 plugin이 설치되어 있지 않으면 해당 화면으로 안내됩니다.

 

설치 한 후 New Project를 선택한다.

JDK는 IntelliJ에서 알아서 위에서 설치한 JDK 11를 찾아서 설정합니다. sbt(simple build tool)는 빌드 도구 중 하나로 추천해주는 버전을 그대로 두고, 마지막으로 Scala version은 2.13.8를 선택해주고 Create 버튼을 누릅니다.

IDE에서 sbt를 설치하고 build.sbt에 명시된 의존성 패키지들을 자동으로 설치해줍니다. (자동으로 되지 않으면 build.sbt 파일을 띄우면 load sbt change 버튼이 보이는데 버튼을 클릭해서 build합니다.)

 

잘 설치 되었는지 확인하기 위해서 main이라는 이름을 가진 scala worksheet 파일을 생성하고 evaluate 합니다. 워크시트는 REPL 쉘과 유사하게 사용자의 입력을 바로 보여줍니다. 워크시트를 이용하면 따로 실행하지 않아도 변수의 데이터와 처리 과정을 바로 확인할 수 있기 때문에 테스트에 유용합니다.

잘 동작하는 것을 확인할 수 있습니다. 이제 마지막으로 Spark 설치하기.

 

 

3. Spark 설치 및 실행하기

이제 Spark를 설치합니다.. build.sbt에 패키지를 추가해서 설치할 수 있습니다.

ThisBuild / version := "0.1.0-SNAPSHOT"

ThisBuild / scalaVersion := "2.13.8"

# spark 관련 package 추가
libraryDependencies ++= Seq(
  "org.apache.spark" %% "spark-core" % "3.3.0",
  "org.apache.spark" %% "spark-sql" % "3.3.0"
)

lazy val root = (project in file("."))
  .settings(
    name := "sample"
  )

위와 같이 dependeny library를 추가한 후 load sbt change를 클릭해서 다시 필요한 패키지를 설치한다.

설치를 완료한 후에 main.sc 코드를 아래처럼 샘플 코드로 수정합니다. (컴퓨터의 사양에 따라서 조금 시간이 걸릴 수도 있습니다.)

 

import org.apache.spark.sql.SparkSession


val spark = SparkSession.builder()
  .config("spark.driver.bindAddress", "127.0.0.1")
  .master("local[*]")
  .appName("Spark Word Count")
  .getOrCreate()

val lines = spark.sparkContext.parallelize(
  Seq("Spark is cool",
    "I like Python ",
    "Python Python")
)

val counts = lines
  .flatMap(line => line.split(" "))
  .map(word => (word, 1))
  .reduceByKey(_ + _)

counts.foreach(println)

 

Evaluate버튼을 눌러 실행시켜 보면 word counting하는 코드가 잘 동작하는 것을 확인할 수 있습니다.

 

 

설치한 것들 및 버전을 살펴보면 아래와 같습니다.

- Intelli J IDE (2022.01)

- OpenJDK 11

- Scala 2.13.8

- Spark 3.3

 

이번 글에서는 Mac local 환경에서 Intelli J를 활용해서 Scala 및 Spark 개발환경을 구축하고 코드를 실행시키는 방법을 정리해봤습니다. 제 개인적인 기록을 위해서 작성했지만, 다른 분들에게도 도움이 되면 좋겠네요! 

 

반응형