[스프링] 스프링 배치와 Oozie의 활용

오늘은 스프링 배치와 Oozie를 함께 사용하여 데이터 처리 작업을 스케줄링하는 방법에 대해 알아보겠습니다.

1. 스프링 배치 소개

스프링 배치(Spring Batch) 는 대용량 데이터 처리 작업을 수행하기 위한 프레임워크로, 자바 기반의 배치 애플리케이션을 간편하게 개발하고 실행할 수 있도록 도와줍니다. 스프링 배치는 다양한 데이터베이스와 연동이 가능하며, 복잡한 데이터 처리 과정을 간소화하여 개발자가 안정적으로 배치 작업을 관리할 수 있도록 지원합니다.

2. Oozie 소개

Oozie는 아파치 하둡(Hadoop) 기반의 분산 데이터 처리 워크플로우 스케쥴러로, 복잡한 데이터 처리 작업의 스케쥴링 및 관리를 단순화할 수 있는 도구입니다. Oozie는 MapReduce, Pig, Hive, Sqoop 등 다양한 하둡 생태계 도구들을 지원하여 복합적인 데이터 처리 작업을 쉽게 관리할 수 있도록 도와줍니다.

3. 스프링 배치와 Oozie 통합

스프링 배치와 Oozie를 함께 사용하여 데이터 처리 작업을 스케줄링하고 관리하는 방법은 다음과 같습니다.

3.1. 스프링 배치 작업 개발

먼저, 스프링 배치를 사용하여 데이터 처리 작업을 개발합니다. 각 작업은 Job으로 정의되며, 필요에 따라 여러 스텝으로 나누어질 수 있습니다.

@Configuration
@EnableBatchProcessing
public class BatchConfiguration {
    @Autowired
    public JobBuilderFactory jobBuilderFactory;

    @Autowired
    public StepBuilderFactory stepBuilderFactory;

    @Bean
    public Step step1() {
        return stepBuilderFactory.get("step1")
                .tasklet((contribution, chunkContext) -> {
                    // 데이터 처리 로직
                    return RepeatStatus.FINISHED;
                })
                .build();
    }

    @Bean
    public Job job(JobCompletionNotificationListener listener, Step step1) {
        return jobBuilderFactory.get("job")
                .incrementer(new RunIdIncrementer())
                .listener(listener)
                .start(step1)
                .build();
    }
}

3.2. Oozie 워크플로우 정의

다음으로, Oozie를 사용하여 스프링 배치 작업을 스케줄링하기 위한 워크플로우를 정의합니다. Oozie는 XML 파일을 사용하여 워크플로우를 정의하며, 해당 파일은 HDFS와 같은 분산 파일 시스템에 저장됩니다.

<workflow-app name="spring-batch-workflow" xmlns="uri:oozie:workflow:0.5">
    <start to="spring-batch-job"/>
    <action name="spring-batch-job">
        <java>
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <main-class>org.springframework.batch.core.launch.support.CommandLineJobRunner</main-class>
            <arg>job-context.xml</arg>
        </java>
        <ok to="end"/>
        <error to="fail"/>
    </action>
    <kill name="fail">
        <message>Spring Batch job failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
    </kill>
    <end name="end"/>
</workflow-app>

3.3. Oozie 워크플로우 실행

마지막으로, Oozie 명령어를 사용하여 정의한 Oozie 워크플로우를 실행합니다. 이를 통해 스프링 배치 작업이 Oozie에 의해 스케줄링되어 실행됩니다.

oozie job -oozie http://oozie-server:11000/oozie -config job.properties -run

4. 결론

이처럼, 스프링 배치와 Oozie를 함께 사용하여 데이터 처리 작업을 스케줄링하고 관리할 수 있습니다. 스프링 배치를 사용하여 데이터 처리 작업을 개발하고, Oozie를 활용하여 해당 작업을 스케줄링하는 방식은 대용량 데이터 처리 작업을 효율적으로 관리할 수 있는 강력한 도구가 될 수 있습니다.

참고 문헌: