데이터 엔지니어 이것저것

jar 파일 생성 본문

개발

jar 파일 생성

pastime 2024. 12. 27. 15:43
728x90
Airflow 에서 SparkSubmitOperator 을 하기 위한 jar 파일 생성법

 

DIR 안에 여러개의 스칼라 코드가 존재하고, 여러개의 main 클래스가 존재하여 이를 한번에 jar 파일로 생성했을때
실행이 안되고 에러가 발생하는 문제가 존재하여 이를 해결하는 방법 작성.

 

  1. project 폴더에 plugin.sbt 파일 생성
  2. build.sbt 작성

 

plugin.sbt 파일 생성

project 하위 폴더에 plugin.sbt 파일 생성

 

addSbtPlugin(
  "com.eed3si9n" % "sbt-assembly" % "2.3.0"
)

jar 파일 생성을 위한 플러그인 추가

 

build.sbt 작성

기존 sbt에 설정 추가

 

libraryDependencies ++= Seq(
  "org.apache.spark" %% "spark-core" % "3.0.0" % "provided",
  "org.apache.spark" %% "spark-sql" % "3.0.0" % "provided",
)

lazy val root = (project in file("."))
  .settings(
    name := "MultiMainApp",
    version := "0.1.0",
    assembly / mainClass := Some("SampleAppV2"), // 기본 진입점 설정
    assembly / assemblyJarName := "CustomApp.jar", // jar 파일명
      libraryDependencies ++= Seq(
      // 필요한 의존성을 추가
    )
  )

 

 

mainClass 가 여러개일 경우 기본 진입점을 설정하여 에러 해결

jar 생성 파일명을 지정

 

    scala_job = SparkSubmitOperator(
        task_id="scala_job",
        conn_id="spark-conn",
        application="jobs/scala/spark-test.jar",
    )

    scala_job2 = SparkSubmitOperator(
        task_id="scala_job2",
        conn_id="spark-conn",
        application="jobs/scala/CustomApp.jar",
    )

 

이를  테스트 하기 위해 task 실행

 

각 결과물

 

 

[2024-12-27, 06:34:54 UTC] {spark_submit.py:634} INFO - Original numbers: List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
[2024-12-27, 06:34:54 UTC] {spark_submit.py:634} INFO - Squared even numbers: List(4, 16, 36, 64, 100)
[2024-12-27, 06:34:53 UTC] {spark_submit.py:634} INFO - Original numbers: List(10, 11, 12, 13, 14, 15, 16, 17)
[2024-12-27, 06:34:53 UTC] {spark_submit.py:634} INFO - Squared even numbers: List(100, 144, 196, 256)

 

 

 

하지만 보통 하나의 DIR에 여러가지 목적의 코드들을 관리하기 때문에 jar 파일에 여러가지 코드가 존재.

이를 분리하여 jar 파일을 생성해서, 경량화를 하면 베스트겠지만, 안될경우 하나의 커다란 jar파일 생성 후

파라미터를 통해 다른 코드(main class) 실행

 

    scala_job = SparkSubmitOperator(
        task_id="scala_job",
        conn_id="spark-conn",
        application="jobs/scala/CustomApp.jar",
        java_class="SampleApp"
    )

    scala_job2 = SparkSubmitOperator(
        task_id="scala_job2",
        conn_id="spark-conn",
        application="jobs/scala/CustomApp.jar",
        java_class="SampleAppV2"
    )

 

java_class의 파라미터를 통해 실행하고자 하는 클래스 선언

 

각 task에 spark submit 옵션을 보면 각각의 코드 실행하는걸 확인 가능.

[2024-12-27, 07:07:57 UTC] {spark_submit.py:473} INFO - Spark-Submit cmd: spark-submit --master spark://spark-master:7077 --name arrow-spark --class SampleApp --deploy-mode client jobs/scala/CustomApp.jar
[2024-12-27, 07:07:57 UTC] {spark_submit.py:473} INFO - Spark-Submit cmd: spark-submit --master spark://spark-master:7077 --name arrow-spark --class SampleAppV2 --deploy-mode client jobs/scala/CustomApp.jar

 

 

728x90

'개발' 카테고리의 다른 글

SourceGit  (0) 2025.01.04
시간 복잡도 계산하기  (1) 2024.10.14
spring boot logback - kafka  (0) 2024.08.23
부하테스트  (0) 2024.05.02
윈도우에서 make 사용하기  (0) 2024.03.28