Big Data/Apache Oozie
Oozie classpath 정의하기
Data Engineer
2017. 10. 6. 12:30
Oozie classpath 사용법
oozie 액션은 일반적으로 우지가 실행하는 작은 자바 어플리케이션들입니다. 그러면 액션을 실행할 때 액션에서 의존성이 있는 클래스들을 classpath를 통해 이용가능한 상태여야 합니다.
우지에서는 sharelib이라는 액션들이 사용하는 라이브러리의 공유 위치를 정의할 수 있습니다. 이를 통해 액션의 디펜던시를 관리를 할 수 있습니다. 또한 다양한 방법으로 라이브러리를 classpath에 추가할 수 있습니다.
sharelib directory 사용하기
sharelib를 사용하기 위해서는 oozie.use.system.libpath=true로 설정해주면 사용할 수 있습니다. 그리고 sharelib directory는 다음 oozie-setup 명령어를 통해 생성해줄 수 있습니다.
oozie-setup sharelib create -fs hdfs://host:port
보통 built-in action(hive, pig, sqoop 등)을 위한 jar를 포함합니다.
사용자 정의 jar를 classpath에 추가 하는 방법
만일 액션에서 사용자 정의 jar를 포함시켜야 한다면 몇가지 방법이 있습니다. 그 방법은 다음과 같습니다.
- oozie.libpath 사용하기
- oozie.libpath=/path/to/jars,another/path/to/jars를 설정하여 추가할 수 있습니다. 이 방법은 동일한 jar를 필요로하는 워크플로우가 많은 경우 유용합니디. jar를 hdfs의 한 곳에 저장해두고 여러 워크플로우에서 사용할 수 있습니다.
- workflow.xml이 존재하는 hdfs 디렉토리 내에 lib 내에 jar 파일을 저장하기
- workflow를 실행할 때 동일 디렉토리 상에 lib 디렉토리가 존재하면 lib 디렉토리 내에 있는 jar 파일을 참조할 수 있습니다.
태그를 사용하기 - oozie에서
태그를 이용하여 jar 파일의 경로를 지정하여 사용할 수 있습니다. 는 액션 내에서 여러번 사용할 수 있습니다. - 보통
태그의 경우 워크플로우 내의 모든 액션이 아니고, 단지 특정 액션에 대해서 jar가 필요한 경우 유용합니다.
- oozie에서
- sharelib 이용하기
- sharelib 디렉토리에 jar 파일을 추가합니다.
- 사용자 정의 jar를 추가하는 경우 이 방식은 권장하지 않습니다. 두가지 이유 때문인데 이유는 아래와 같습니다.
- jar가 모든 워크플로우에 포함되어 예기치 않은 결과가 발생할 수 있습니다.
- sharelib을 업그레이드 하는 경우 jar가 제거 되므로 다시 사용자 정의 jar를 추가해야 합니다.
이번 포스트는 가볍게 oozie에서 classpath를 어떠한 방식으로 참조를 하고, 사용자 정의 jar를 추가하여 액션과 워크플로우에서 참조하는 방법에 대해 알아보았습니다. 이제 oozie를 통해서 워크플로우를 실행하는 경우 사용자 정의 jar를 통해 손쉽게 액션을 수행하실 수 있을 것입니다.