2021년 8월 22일 일요일

4) 빅데이터 플랫폼 아키텍처에 대하여.. 배치 스케쥴러(airflow, azkaban, oozie)

2, 3포스팅을 통해 데이터를 관리하는 하둡과 처리하는 스파크가 세팅되있다면 이제 정기적으로 작업를 수행할 수 있는 배치 스케쥴러가 필요하다.

스케쥴러란 정기적으로 원하는 시간에 특정 작업(스크립트 등)을 수행하기 위해 필요한 시스템이다. 자동화를 잘만 해놓는다면 상당히 많은 리소스를 절약할 수 있다.

빅데이터 진영에는 다양한 스케쥴러가 존재하는데 airflow, azkaban, oozie 등 많은데 아마 요즘은 airflow가 대세가 된 것 같다. 사실 스케쥴러는 단순히 스케쥴러 역할(마치 crontab처럼)이 있다면 배치를 수행하는데 큰 문제가 없기 때문에 어떤 것이든 상관이 없다고 생각한다.

먼저 oozie의 경우 xml로 작성해야하기 때문에 흐름과 맞지 않고 매끄러운 flow를 그리기 어렵다.

사실 분석 클러스터(spark cluster)로 연산을 하게 될 경우 코드(스크립트)를 짜서 분석 서버에 작업을 던지기만 하면되서 단순히 실행 shell script(bash operator)를 원하는 시간대에 설정만 할 수 있으면 된다. 만약 각 스크립트가 수행되는 worker에서 data를 share하고자 할 때에는 조금 불편할 수도 있는데 이 때에는 xcom같은 기능을 활용해서 local로 data를 떨구고 다른 worker에서 읽을 수 있도록 해야하며 이는 작업 후에 data를 지워주거나 잘 못 되었을 경우 다시 받아야할 때 생각보다 비효율적이고 껄끄러운 작업이 된다. 그래서 개인적으로는 share가 필요한 data는 hadoop에 쓰는 식으로해야 추후 스케쥴러 서버의 disk full 등의 장애를 피할 수 있다.(개인적인 의견)

물론 분석 클러스터에서 작업을 하지 않고 로컬 머신에서 돌아가는 경우도 있다. ML/DL job들은 대부분이 단일머신에서 돌아가고 있을테니까.. 


airflow의 경우 파이썬으로 작성하기 때문에 자유로운 커스터마이징이 가능하고 flow를 그리는 것이 쉽다. dag안에 subdag 등을 생성하는 것도 쉽다. 파이썬 기반이다보니 누구나 접근하기 쉽다. 장점은 파이썬 기반이기 때문에 쉽고 자유도가 높다는 점이다. 그렇다면 단점은 무엇일까? 단순히 스케쥴러 역할로만 사용한다면 큰 불편함은 못 느낄 것이다. 단지 DAG의 CICD를 신경쓴다면 크게 어려움은 없을 것이다.


그렇다면 azkaban은 어떨까? azkaban 역시 단순 스케쥴러 역할만 하게 되면 airflow와 똑같다. 오히려 airflow보다 ui에서는 더 간편해보인다. airflow와 마찬가지로 Scheduler 자체의 variable를 가질 수 있으며 최소화로 사용하도록 한다. 소급에 필요하거나 adhoc하게 돌릴용으로만 variable을 사용해야하는데 남발하고 핵심 재료(?)로 사용하게 될 경우 dependency가 많이 걸리게 된다. 극단적으로 아예 안써도 된다고 충분히 다른 곳을 이용해서 해결하는 것을 권장하고싶다.


아무튼 결론은 어떤 스케쥴러를 사용해도 비슷하고 스케쥴러 선정에 고려해야할 부분은 여러가지가 있겠지만 나열해본다면 다음과 같다.

1. UI가 사용하기 편하고 깔끔하다.
2. 재수행이 편하다.
3. flow(dag)를 그리는 것이 간편하다.
4. log보는 것이 편하다.
5. 다른 시스템과 호환이 잘 된다. (굳이 bash로 짤거면 필요는 없긴하다.)

이 정도만 고려하면 충분하지 않을까..

댓글 4개:

  1. airflow: 장점은 파이썬 기반이기 때문에 쉽고 자유도가 높다는 점이다. 단점은? 파이썬 기반이기 때문에 쉽고 자유도가 높다는 점이다. azkaban에서 parameter함부로 사용하면 안되는 것처럼 ㅎㅎ
    airflow도입을 하려고는 하는데 고민이 많네요. 정확한 scheduler의 역할 정의를 하고 그 역할로 한정해서 사용해야할듯.

    답글삭제
    답글
    1. 팀장님 잘 지내시나요?ㅎㅎ 말씀하신데로 파라메터 사용은 최소화해야하거나 디비화를 시키는게 맞는것같아요 단순스케쥴링 제 경우엔 단순히 분석서버(spark)에 spark job을 날리기만하는 경우 airflow를 써봤자 딱히 장점이없어보입니다 단순스케쥴링만하니깐요.. 오래 사용해보진 않았지만 airflow는 standalone에서 모델링용으로 주로 사용하고있는데 job 던지는 operator를 직접 만들어서(sparksql용 operator, pandas용 operator, hiveql용 operator 등) 쉽게 추가하고 커스터마이징해서 사용할 수 있다는게 장점같기는합니다(이러면 결국 airflow plugins도 형상관리가 되야한다는 단점이 있기는하지만..) 단점은 소급용 대그를 만들던지(워커를써야하므로) 아니면bash스크립트 내에서 api콜을 하던지해야되서 연단위 소급할때 좀 불편하네요 너무 ssis랑 아즈크반에 적응되있나봅니다..

      삭제
    2. 작성자가 댓글을 삭제했습니다.

      삭제
    3. 결국은 어떻게 dag을 관리할지 상황에 따른 목적을 분명히 하면 어떤 도구를 쓰던 거기에 맞게 관리하면 해결은 가능할 듯 합니다. 해당 목적에 잘맞는 tool도 있고 조금 덜맞는 tool도 있겠지만요. 가끔은 다 마음에 드는데 요건만 해결하면 참좋겠다 싶은 순간들도 있는데... 그럴때 회사에서 여유만 주면 commiter가 되고 싶은 유혹을 느끼곤하죠. ㅎㅎ
      점점 더 멋진 엔지니어로 성장해가는 모습을 보니 좋아요. 주변 사람들에게 좋은 영향을 미치는 엔지니어가 되실 꺼에요!

      삭제

2022년 회고

 올해는 블로그 포스팅을 열심히 못했다. 개인적으로 지금까지 경험했던 내용들을 리마인드하자는 마인드로 한해를 보낸 것 같다.  대부분의 시간을 MLOps pipeline 구축하고 대부분을 최적화 하는데 시간을 많이 할애했다. 결국에는 MLops도 데이...