data engineering

oozie workflow 기본과 삽질한 내용들

qkqhxla1 2017. 6. 4. 23:31

하둡에서 어떤 작업을 자동화 할 때, oozie의 workflow를 등록해서 자동화가 가능하다. 


처음에는 뭐가 뭔지 몰랐는데 익숙해지면 엄청나게 직관적이다. 

마치 순서도처럼 생겼는데 위에서 작업을 끌어다가 '여기에 작업 두기' 에 넣으면 된다. 여러 작업을 등록시켜서 순서대로 실행시킬수 있고, 그림에서 알수 있듯이 hive 스크립트나 배시쉘 스크립트, 스파크 등을 넣을수 있다.


프로그래밍 언어처럼 위에서부터 실행되며 나같은 경우는 위에서 어떤 파일 등을 다운로드받고, 아래에서 다운로드받은 파일을 대상으로 처리하는 스크립트를 짰었다.


각각 스크립트의 속성과 workflow의 속성을 따로 따로 등록할 수 있는데, 순서를 바꾸거나 하면 xml에서 에러가 나니 설정을 잘 살펴봐야 한다.


workflow의 속성에서는 '작업 영역'을 설정해줄수 있는데, 이 작업 영역이 workflow의 고유한 id값 같은거라고 생각한다. workflow를 저 웹 페이지가 아닌 원격으로 실행시키거나 아니면 저 작업을 찾을때, xml등을 찾을때 필요하므로 직관적인 이름으로 설정해놓는게 좋다. 


workflow를 실행시켰을때 프로세스가 잘 돌아가고 있는지 등은 오른쪽 위의 job browser에서 돌아가는 프로세스 리스트로 확인이 가능하다. 아래는 jobs browser의 예시다. 보안상 많은 정보를 지웠다.

여기서 상태에 나온것처럼 성공했는지 실행중인지 성공했는지 죽었는지 알수 있다. 죽은 경우는 사용자가 죽였거나 실패한 경우다. 가장 왼쪽열이 아이디인데 깊게 들어가서 작업 상태나 xml파일 등을 살펴볼 수 있다.

나같은 경우 에러 뜨는 원인이 너무 많았는데 주 원인은 테스트해보려고 가장 나중해 실행해야 잡을 앞으로 넣고 실행시켰다가 다시 뒤로 바꿨는데 xml이 자동으로 안바뀌어서 나는 버그같은 에러와 스파크에서 스크립트를 잘못 써서 바로 죽어버린 경우가 많았다. 


에러가 발생했을경우 나처럼 어떻게 해야할지 모르는 경우가 가장 많은데(정말 다양한 에러가 발생함.) 각 프로젝트마다 있는 설정파일이 제대로 되었다고 가정했을 경우 xml에서 나는 에러가 가장 많다.

이경우 xml을 살펴보려면 내가 알기로 디폴트 경로가

/user/hue/oozie/workspaces안에 아까 위의 '작업 영역'에서 지어준 이름으로 들어가면 jobs.properties와 workflow.xml이 있는데, workflow.xml이 xml파일이다. 이 안에 어떻게 실행될지같은 실행순서와 성공했을때와 실패했을때의 다음 작업 등등이 있다. 

workflow를 만들때 일반적으로 여러개의 job들을 집어넣는데, 위에서 말했듯이 잡을 앞으로 빼놓고 테스트하다 다시 뒤로 빼고 저장했는데 xml이 안 바뀌어 있어서 뭔가 맞지 않는다는 에러가 종종 뜬다.(버그같다)

이경우 xml에서 확인할수 있는데 xml안에 <action name="shell-f999">요런게 있다. 이게 workflow안의 각각의 job들에 대한 아이디값?이며 workflow에서 편집 버튼을 눌러서 각각의 잡 설정으로 들어간뒤, 맨 마지막 탭 '전환'을 보면 ok와 ko가 있는데, 대충 위에서부터 추리해보면 어떤게 이 아이디인지 추리할수 있다. 이걸 토대로 xml을 고치면 된다.


/user/hue/oozie/workspaces안의 jobs.properties는 프로퍼티로, 쉘 등에서 실행시킬때 프로퍼티로 첨부해줘야 같이 실행된다. 쉘에서 oozie job -oozie 서버이름/oozie -config jobs.properties -run 처럼 실행시키고, 같은 폴더 안에 jobs.properties를 만들어주는데 동일한 값을 복붙해서 넣어주면 된다. 

workflow자체를 일정시간마다 실행시키기 위해서 쉘 실행 파일을 만든후 크론탭으로 등록해두면 유용하다.

'data engineering' 카테고리의 다른 글

aws 개발 관련 기본, 설정.  (0) 2017.06.24
spark 기초.  (0) 2017.06.08
mapreduce(맵리듀스)란?  (0) 2017.05.20
docker 삽질.  (0) 2017.04.25
redis 기초.  (2) 2017.04.20