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