IT/Spark
PySpark을 Oozie에 등록하여 워크플로우를 실행하는 방법
IT 블로거
2025. 2. 23. 17:32
300x250
Oozie에서 PySpark 실행 개요
- Oozie는 기본적으로 Java 기반의 Hadoop 작업을 실행하도록 설계되어 있지만, Spark Action을 사용하면 PySpark 스크립트도 실행할 수 있습니다.
- Oozie에서 PySpark을 실행하려면 다음 요소가 필요합니다.
- PySpark 스크립트 (.py)
- Oozie 워크플로우 XML (workflow.xml)
- Oozie job.properties 파일 (job.properties)
- HDFS에 스크립트 및 관련 파일 업로드
- Oozie 실행 명령어
PySpark 스크립트 준비
실행할 PySpark 스크립트를 준비합니다. 예를 들어 wordcount.py 파일을 만들겠습니다.
from pyspark.sql import SparkSession
# Spark 세션 생성
spark = SparkSession.builder.appName("WordCount").getOrCreate()
# 샘플 데이터 로드
text_file = spark.read.text("hdfs:///user/data/sample.txt")
# 단어 개수 계산
word_counts = text_file.rdd.flatMap(lambda line: line.value.split(" ")) \
.map(lambda word: (word, 1)) \
.reduceByKey(lambda a, b: a + b)
# 결과 저장
word_counts.saveAsTextFile("hdfs:///user/output/wordcount_result")
# Spark 세션 종료
spark.stop()
HDFS에 PySpark 스크립트 업로드
Oozie는 HDFS 경로에 있는 스크립트를 실행하므로 PySpark 파일을 HDFS에 올려야 합니다.
hdfs dfs -mkdir -p /user/oozie/workflows/pyspark
hdfs dfs -put wordcount.py /user/oozie/workflows/pyspark/
Oozie Workflow XML 파일 작성
Oozie에서 PySpark을 실행하려면 workflow.xml을 만들어야 합니다.
<workflow-app name="pyspark-workflow" xmlns="uri:oozie:workflow:0.5">
<start to="spark-node"/>
<action name="spark-node">
<spark xmlns="uri:oozie:spark-action:0.1">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<master>yarn</master>
<mode>cluster</mode>
<name>PySpark Job</name>
<spark-opts>--conf spark.yarn.submit.waitAppCompletion=true</spark-opts>
<jar>hdfs:///user/spark/share/lib/spark-assembly.jar</jar>
<arg>hdfs:///user/oozie/workflows/pyspark/wordcount.py</arg>
</spark>
<ok to="end"/>
<error to="fail"/>
</action>
<kill name="fail">
<message>Job failed, error message: ${wf:errorMessage()}</message>
</kill>
<end name="end"/>
</workflow-app>
- <spark> 액션을 사용하여 PySpark을 실행합니다.
- <jar>는 Oozie가 Spark 작업을 실행할 때 필요한 라이브러리 경로입니다.
- <arg>에 실행할 PySpark 스크립트를 HDFS 경로로 지정합니다.
Oozie job.properties 파일 작성
nameNode=hdfs://namenode:8020
jobTracker=yarn-resourcemanager:8032
oozie.use.system.libpath=true
oozie.wf.application.path=${nameNode}/user/oozie/workflows/pyspark
- HDFS의 네임노드와 YARN 리소스 매니저 경로를 설정합니다.
- oozie.use.system.libpath=true를 설정하여 기본 라이브러리를 사용합니다.
Oozie 등록하고 실행
파일이 준비되었으면 Oozie 서버에서 다음 명령어를 실행합니다.
1. HDFS에 워크플로우 업로드
hdfs dfs -mkdir -p /user/oozie/workflows/pyspark
hdfs dfs -put workflow.xml job.properties /user/oozie/workflows/pyspark/
2. Oozie 워크플로우 실행
oozie job -config job.properties -run
관련 블로그
Apache Spark 클러스터에서 Python 처리
Apache Spark는 대규모 데이터 처리 및 분산 컴퓨팅을 지원하는 프레임워크로, Python과 함께 사용할 수 있는 API인 PySpark를 제공합니다. PySpark를 활용하면 Spark 클러스터에서 Python 코드를 실행하고,
make2t.tistory.com
PySpark
PySparkApache Spark의 Python API로, Spark의 강력한 분산 데이터 처리 기능을 Python에서 사용할 수 있도록 지원하는 라이브러리입니다. PySpark를 활용하면 대규모 데이터 처리를 병렬로 수행하고, SQL, 머
make2t.tistory.com
300x250