개발
jar 파일 생성
pastime
2024. 12. 27. 15:43
728x90
Airflow 에서 SparkSubmitOperator 을 하기 위한 jar 파일 생성법
DIR 안에 여러개의 스칼라 코드가 존재하고, 여러개의 main 클래스가 존재하여 이를 한번에 jar 파일로 생성했을때
실행이 안되고 에러가 발생하는 문제가 존재하여 이를 해결하는 방법 작성.
- project 폴더에 plugin.sbt 파일 생성
- 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