Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- mysql
- spring boot
- query history
- ksql
- polars
- 윈도우
- 모바일
- KubernetesPodOperator
- proerty
- CDC
- dbt_project
- docker
- DBT
- 쿠버네티스
- 동적 차트
- airflow
- kafka
- 파이썬
- Python
- 도커
- freshness
- Materializations
- 크롤링
- UI for kafka
- bar cahrt
- numpartitions
- Java
- 카프카
- k9s
- spark
Archives
- Today
- Total
데이터 엔지니어 이것저것
jar 파일 생성 본문
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
'개발' 카테고리의 다른 글
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 |