반응형

Apache Beam

Apache Beam은 data processing pipeline을 정의할 수 있는 오픈소스 프로그래밍 모델이다. Apache Beam은 배치 프로세싱과 스트리밍 프로세싱을 모두 지원한다. Beam에서 pipeline을 정의한 후, Beam이 지원하는 Runner들(Spark, Apex, Flink, Google Dataflow) 중 하나를 사용하여 데이터를 처리하는 방식으로 각각의 Runner들을 사용하는 방법을 몰라도 Beam만을 사용해서 데이터를 처리할 수 있다.

 

Apache Beam은 Dataflow model paper를 따라 개발되었다. 여기서 Dataflow Model이란, 제한이없고 정렬되지않은 데이터셋들을 처리하기 위한 데이터의 관리 및 처리 프레임워크이다. 최근에는 끝이 없는 데이터들이 실시간으로 쏟아져들어오기때문에 이를 효율적으로 처리할 방법이 필요해졌다. 많은 어플리케이션들이 순서대로 들어온 정보를 처리후에는 순서가 뒤엉킨채로 내보낸다. 이를 앞에서 소개한 Dataflow model paper는 해결하기 위한 방법을 제시하였다.

 

Apache Airflow ( Google Cloud Composer )

머신러닝의 경우 데이터 전처리 > 학습 > 배포 > 예측의 단계를 통해 진행된다. 이 경우, 이전의 output이 다음의 input이 되는데, 이를 효율적으로 관리하기 위한 툴이 Apache Airflow이다. Apache Airflow는 파이썬 기반으로 만들어졌기때문에 데이터분석을 하는 분들도 쉽게 코드를 사용할 수 있다.

 

간단한 작업의 경우 cron을 사용하여 수행할 수 있지만, 디버깅이 어렵고 만약 에러가 발생했을때 재실행시킨다던지 하는 작업이 힘든데, apache airflow는 그런 작업들을 쉽게 UI를 사용하여 처리할 수 있게 해준다.

 

Airflow는 스케쥴링, 매니징 역할을 할뿐 실제로 데이터를 처리하지는 못한다.

 

          Cons:

            - Additional DB/Redis/Rabbitmq for Celery

            - Not dependent on data. just task dependency

 

 

Apache Atlas

Apache Atlas는 open metadata management와 governance 기능을 제공하여 사용자가 data assets들을 분류하고 카탈로그를 만들수있게 도와준다. 주로 Atlas는 Hadoop과 함께 사용되며 메타데이터를 효과적으로 교환할 수 있도록 도와준다. data가 순차적으로 처리될때도 classification이 유지된다. Atlas를 사용하면 업계 표준 요구사항을 유지하는 데 큰 도움이된다.

 

Classify된 metadat를 검색하기 위해 Solr를 사용한다.

 

Apache Beam vs Apache Airflow

두 프레임워크는 모두 작업이 순차적으로 진행하도록 보장해준다. 하지만 세부적으로 보면 큰 차이점이 있다.

 

- Airflowtask management system으로 Directed Acyclic Graph(DAG)의 노드들이 순차적으로 실행되도록한다. 만약 A > B > C 로 이어진 DAG가 있다면, Airflow는 A가 작업을 마친 후에 B를 실행시키고, B의 작업이 모두 끝난 뒤에 C를 실행시킨다. 하지만 Beamdataflow engine으로써 A, B, C 노드를 모두 동시에 실행시키고 A의 결과물이 B로, B의 결과물이 C로 들어가도록 해준다.

 

Airflow는 각각의 노드(task)들이 어떤작업을 하는지 전혀 신경을 쓰지않는다. Airflow는 단지 이 작업이 끝났는지, 혹은 실패했는지만을 본다. 따라서 만약 다음 노드로 현재 노드의 작업물을 전달해주어야한다면, 프로그래머가 직접 local file system에 저장하던지, 외부 서비스를 사용하던지해서 저장 및 로드를 처리해주어야 한다. 하지만, Beam의 각각의 task는 엔진에서 지원하는 프로그래밍 언어를 사용하여 Beam process안에서 수행할 작업을 정의해주어야한다. Beam process외부에서 데이터를 처리하는 것은 매우 어렵거나 불가능하다(Beam을 사용하는 이유에 맞지않다). Beam은 데이터를 처리하는 엔진이므로 데이터를 어떻게 처리할지만 정의하고나면, 각각의 step(task)들 간의 데이터 전달은 신경써주지않아도 framwork가 전부 처리해준다.

 

- Airflow는 그 자체로서 framwork이지만 Beam은 abstraction layer이다. Beam의 pipeline은 지원하는 runner들에게서 수행된다. Beam의 목표자체가 Beam만 배워서 여러가지의 backend들에서 실행할 수 있게하는 것이다.

 

- 가장 큰 차이점 중 하나는 Airflow는 하나의 단계가 끝난 후 다음 단계를 수행하는 방식이므로 data stream은 처리할 수 없다. stream은 끝나지 않기때문이다. Airflow의 공식 홈페이지에도 "Airflow는 data stream을 처리하기 위한 솔루션"이 아니다라고 명시되어있다.

(참고: https://stackoverflow.com/questions/50249759/apache-airflow-or-apache-beam-for-data-processing-and-job-scheduling)

 

 

 

 

 

 

반응형
블로그 이미지

개발자_무형

,