Big Data/Spark

Spark Scala로 Build 해보기

sincerely10 2021. 11. 14. 12:27
반응형

안녕하세요. 오늘 포스트는 정말 오랜만에 기술 관련 내용으로 적어보겠습니다.

Spark 카테고리로는 처음 쓰는 글이네요.

Spark에 대한 상세한 내용보다는 Build를 직접 해보는 과정을 안내 드리도록 하겠습니다.
회사에서 업무 정리 차 위키로 적었는데 상세 과정을 풀어서 작성 해보겠습니다.

Spark & Scala

1. Spark Job의 세 가지 유형

Spark Job은 다음과 같이 세 가지 언어로 수행할 수 있습니다.

  • Python: 스크립트 언어로 별도 build가 필요 없음
  • Java: 컴파일 언어로 maven이라는 Build Manager를 통해 build 필요/가능
  • Sacla: 컴파일 언어로 Java와 유사 sbt라는 Build Manager를 통해 build 필요/가능

2. Spark Job의 Scala Build 절차

Linux 환경에서 Scala를 통해 Spark Job을 Running 하는 과정은 아래와 같이 구분할 수 있습니다.
저는 CDH의 WorkFlow를 통해 Running 하는 것을 최종 목표로 하기에 5) 'Workflow 개발 및 확인' 이라는

1) SBT 설치
2) Scala 파일 생성
3) sbt Compile
4) Spark Job 생성 및 확인
5) Workflow 개발 및 확인

3. [step 1&2] - sbt Install & Scala file 만들기

저의 경우에 외부 인터넷이 안 되는 환경이다 보니, rpm 파일을 다운 받아 sbt 설치를 했습니다.

  • sbt 공식 페이지에서 zip 파일 다운로드
    • 몇 가지 버전에 대한 확인시도
    • 1.0.4 버전에 대해 sbt 실행이 가능함을 확인
  • Scala 스크립트 생성
    • 테스트 과정이기 때문에 단순 출력을 위한 Scala 스크립트를 작성했습니다.
object HelloWorld
{
    def main(args: Array[String])
    {
        print("\n\n>>>>> START OF PROGRAM <<<<<\n\n");
         
        println("Hello World.")
         
        print("\n\n>>>>> END OF PROGRAM <<<<<\n\n");
    }
}

4. [step 3] SBT Compile

  • 해당 코드 작성 후, sbt compile 진행 → 에러 발생
    • sbt와 scala 간의 bridge인 설정이 다운로드 되지 않아 scala 컴파일이 실패나는 에러 확인
    • 외부 인터넷이 안 되는 환경이라 발생한 것이지 정상적인 인터넷이 되신다면 특별히 신경쓰지 않아도 되는 이슈로 확인 됩니다.
  • 외부 repo의 접근이 가능한 server(개인 노트북)를 통해 테스트 → 설치된 bridge 파일을 다운 받아 내부서버에 옮겨 직접 설정 필요
    • compiler-bridge_2.12
    • org.scala-sbt-compiler-bridge_2.12-1.0.5-bin_2.12.4 jar 및 관련 파일
    • command
      • unzip ~/compiler-bridge_2.12.zip /root/.ivy2/cache/org.scala-sbt/compiler-bridge_2.12/
      • unzip ~/org.scala-sbt-compiler-bridge_2.12-1.0.5-bin_2.12.4__52.0-1.0.5_20171125T231755.jar.zip /root/.sbt/1.0/zinc/org.scala-sbt/
      • unzip ~/org.scala-sbt-compiler-bridge_2.12-1.0.5-bin_2.12.4__52.0.zip /root/.ivy2/cache/org.scala-sbt/
  • Compile 및 Run을 통해 sbt로 scala 코드에 대한 출력 및 jar 파일 확인 완료

최종적으로 필요한 컴파일 결과물인 jar 파일이 정상적으로 생성 됐습니다.

5. [step 4] Spark Job 생성 및 확인

이제 jar 파일이 생성 됐으니, Linux Local 환경에서 Spark Job을 돌려보겠습니다.

spark-submit helloworld_2.12-1.0.jar # 또는
spark-submut --class HelloWorld helloworld_2.12-1.0.jar #(클래스명 별도 명시)

Spark가 정상적으로 설치되어 있다면 spark-submit이라는 명령어로 jar 파일 통해 Spark Job을 실행시킬 수 있습니다.

6. [step 5] Workflow 생성 및 결과확인

1) workflow node에 Shell Script 수행 시도(실패)

Linux 환경에서 동일하게 수행하기 위해 Shell Script를 수행하는 Node를 생성해 Workflow를 running

- jar 파일의 Main class를 찾지 못하는 이슈 발생
- class를 별도 명시 하였음에도 해당하는 클래스를 찾지 못 함

2) Spark Action으로 시도(성공)

  • Spark Action이라는 제공하는 Workflow Node로 시도
    • 설정사항
      • Spark Master: yarn(default)
      • Deploy Mode: client(default)
      • App Name: MySpark(default)
      • Jar Name: helloworld_2.12-1.0.jar
      • Main Class: HelloWorld
      • File Path: /user/batch/workflow/spark/helloworld_2.12-1.0.jar

마무리

Spark은 몇 년 전 부터 빅데이터 프로세스에 대세 반열에 올랐고, 기존 MR job을 활용하기 보다 batch도 Spark으로 수행하는 등 활용성에서도 뛰나다고 생각합니다.

개인적으로도 Spark를 꼭 다뤄보고 싶었는데 현재 재직중인 곳에서 기회를 얻고 실전으로 다양하게 해볼 수 있어서 좋네요.

이후에도 Spark 관련 포스트를 지속적으로 올리고 공부할 수 있도록 하겠습니다.

 

반응형