brunch

You can make anything
by writing

C.S.Lewis

by 이종우 Peter Lee Oct 19. 2020

[번역] 사이드 프로젝트를 위한 데이터 스택

데이터 관련 공부를 하는 사람들을 위한 ETL/DW/BI 오픈소스 추천

원본 URL : https://towardsdatascience.com/data-stacks-for-fun-nonprofit-part-ii-d375d824abf3




재미와 비영리를위한 데이터 스택 — 파트 II



Meltano, DBT 및 Superset으로 완전한 데이터 스택 설계

사진 아이바 Rajović 에 Unsplash


내에서 마지막 기사 , 나는 연습과 측면의 프로젝트를 교육에 대한 자신의 데이터웨어 하우스를 조립하는 일부 저렴한 옵션을 탐구. 그 이후로 저는이 시리즈의 좀 더 영리한 제목 인 Data Stacks For Fun & Nonprofit을 만들었습니다 . 이 시리즈의 범위를 확장하여웨어 하우징 구성 요소뿐만 아니라 전체 데이터 스택을 포괄합니다. 지난 시간에 저는 데이터 스택이 세 가지 구성 요소 (ETL, DW 및 BI 구성 요소)로 구성되는 경향이 있으며 ETL 및 BI 구성 요소의 경우 기본 선택은 엔터프라이즈 고객을 위해 가격이 책정되는 DIY 또는 상용 플랫폼이라고 설명했습니다.


물론 저는 ETL과 BI 측면에서 매우 흥미로운 오픈 소스 개발이 있었기 때문에 너무 빨리 말했습니다! 이 기사에서 더 자세히 살펴 보 겠지만 결과적으로 부분 유료화 및 오픈 소스 구성 요소에서 진정한 종단 간 분석 스택을 조합 할 수 있다고 생각합니다. 따라서이 시리즈는 개인 부수 프로젝트, 교육 리소스 또는 기업 예산으로 운영 할 수없는 비영리 단체를 위해 자신의 "DS4FNP"스택을 설정하려는 사람들을 대상으로합니다.





우리의 완전한 데이터 스택! (왼쪽) 이미지 : Meltano | (중앙) 이미지 by dbt | (오른쪽) Apache Superset의 이미지 .


이 기사의 나머지 부분에서는 특히 .NET의 렌즈를 통해 지난 시간에 살펴본 DW 옵션의 몇 가지 결론을보고 할 것입니다 

dbt

.


그런 다음 스택을 완성한다고 생각하는 오픈 소스 ETL 및 BI 옵션 중 일부를 소개하겠습니다.


마지막으로 완전히 로컬 개발 환경을 설정하는 방법을 설명하고 호스팅 된 프로덕션 환경에 대한 몇 가지 옵션을 제시하는 것으로 마무리하겠습니다.



이전에 스택의 핵심을 구성하는 세 가지 후보 데이터웨어 하우스 플랫폼 인 BigQuery, Snowflake 및 Athena를 확인했습니다. 이 목적을 위해 세 가지 플랫폼 모두에 대한 결론은 다음과 같습니다.


Snowflake, 저는 약간 할인을 받았는데, 아마도 세 가지 중에서 제가 가장 좋아하는 제품이지만 어떤 종류의 부분 유료화 가격 모델도 제공하지 않기 때문입니다. "종량제"임에도 불구하고 계속 진행하려면 비용을 지불해야합니다. 그러나 실제로 비용을 최소 $ 25 / 월로 낮추는 것으로 나타났습니다. 지금은 월간 비용이 상당히 낮지 만 개인 프로젝트를 정당화하기에 충분히 낮은 지 아직 모르겠습니다. 그러나 프로젝트가 나에게 충분히 개인적으로 중요하고 유료 자원 사용의 효용을 극대화 할 수 있다고 느꼈다면 아마도 총알을 깨물고 지불 할 것입니다. 눈송이는 정말 대단합니다. 그렇게 말하고 흥미 진진한 IPO 후에 Snowflake가 소규모 프로젝트, 교육 등을 위해 특별히 제한된 부분 유료화 모델을 출시하는 것을 보는 것은 정말 좋을 것입니다.


BigQuery는 확실히 가장 많은 관심을 받았습니다. 계정 및 BigQuery 인스턴스 설정은 매우 간단한 프로세스입니다. 구성dbt 도 똑같이 간단하고 인증 설정  (전통적으로 Google IaaS가 불필요하게 복잡하게 만드는 프로세스라고 자주 생각하는 프로세스) 도 매우 간단했습니다


저는이 시리즈의 대부분의 대상웨어 하우스로 BigQuery에 집중하면서 가능한 한웨어 하우스에 구애받지 않으려 고 노력할 것입니다.


손쉬운 설정, 뛰어난 가격 모델 (원하는 경우 쉽게 무료), 사용 가능한 통합 수로 인해 BigQuery로 잘못 갈 수 없습니다.


Athena는 다른 두 사람과 약간 다릅니다. 주요 이점은 1) 전적으로 귀하의 통제하에 있고 귀하의 AWS 계정 내에 있으며 2) AWS가 선호하는 에코 시스템 인 경우 가장 저렴한 옵션이라는 것입니다. Athena의 주요 문제점은 모든 설정을 직접 수행해야한다는 것입니다. Terraform 또는 Pulumi 의 도움으로 이것이 더 많은 턴키 솔루션으로 만들어 질 수 있다고 생각 하며, 나중에 살펴보고 싶은 부분입니다. 플러그인 도  dbt-athena 있습니다 , 문서는 여전히 원시적이며 여전히 구성 문제를 해결하고 있습니다.


시간이 지남에 따라 dbt 플러그인과 Athena 프로비저닝 스크립트가 성숙 해지면 Athena가 DS4FNP를위한 매우 적절한웨어 하우징 옵션이 될 것이라고 생각합니다.


Presto의 잠재적 추상화와 함께 S3와의 기본 상호 운용성은 Athena를 정말 바람직한웨어 하우스 대상으로 만듭니다.


그러나 우리는 실제로 클라우드웨어 하우스 플랫폼을 선택하는 데있어 조금 앞서 가고 있습니다. 분석 프로젝트를 개발할 때 실제로 로컬 PostgreSQL 또는 SQLite 데이터베이스를 시작할 수 있습니다 


dbt .  실제로 dbt 우리가 논의한웨어 하우스와 로컬 환경에 대해 별도의 연결 프로필을 설정할 수 있습니다.


즉, 시작하는 데 필요한 것은 랩톱, Python dbt 및 로컬 '창고'( postgres 는 sqlite ) 뿐입니다.


시리즈의 후반부 (아마도 Part III)에서는 처음부터 프로젝트를 설정하는 방법에 대한 전체 자습서를 작성하기 시작할 것입니다.


좋습니다. 앞서 언급 한 오픈 소스 ETL 및 BI 플랫폼은 어떻습니까? 저는 이러한 구성 요소가 $$$ 비싼 엔터프라이즈 서비스 또는 시간이 많이 드는 DIY 프로젝트로만 사용할 수 있다고 생각할 충분한 이유가있었습니다. ETL은 일반적으로 컴퓨팅 비용이 많이 들기 때문에 부분 유료화 가격을 제공 할 강력한 인센티브가 없습니다. 귀하의 상업 옵션에는 Fivetran, Stitch, Matillion 및 기타 여러 가지가 포함됩니다. Python 스크립트에서 자체 ETL을 롤링하는 것은 추상적으로 간단 해 보일 수 있지만 대부분의 실제 ETL 작업은 결국 두 가지 유형의 복잡성 중 하나로 분류됩니다.


구조적 복잡성, 특히 시간이 지남에 따라 구조가 변경되는 경우 복잡한 데이터베이스 스키마 및 API 사양에서 데이터를로드하는 것을 의미합니다.


볼륨 복잡성 : 스트림 또는 일괄 처리가 필요한 대용량 데이터 원본로드를 의미합니다. 이것은 주로 로그 데이터와 관련이 있습니다. 여기에서 복잡성은 구문 분석 또는 변환 논리가 아니라 대용량 데이터 이동과 관련된 인프라 논리에서 비롯됩니다.



두 경우 모두 사람들이 DIY ETL에 관련된 장기적인 노력을 과소 평가하는 경향이 있다고 생각합니다. 10,000 피트 밖에서 간단한 '스크립트 가능'작업처럼 보일 수 있기 때문에 빠지기 쉬운 함정입니다. 하나의 소스에서 데이터를 가져 와서 어딘가에 보내기 만하면됩니다. 하지만 그 패턴에 대해 약간의 진실이 있습니다. 그리고 당신은 자신을 추상화하는 것을 정당화하기에는 충분하지 않지만, 어떤 수준의 추상화를 보장하기에 충분한 변형을 가지고 동일한 기본 프로세스를 반복하는 자신을 종종 발견합니다. 표준화 된 프레임 워크를 요구하는 유형의 문제이지만 오랫동안 이러한 프레임 워크는 상용 플랫폼 뒤에 갇혀있었습니다.




다행히도 Stitch 가 개발 한 Singer 는 개발자 가 사용할 수있는 프레임 워크 만 존재하며 "탭"및 "타겟"을 개발하기위한 구성 가능한 프레임 워크입니다. 탭은 데이터베이스, API, 로그, 이메일 등을 포함한 소스에서 데이터를 추출합니다. 대상은 탭으로 추출 된 데이터의 대상이며 일반적으로 일반적인 데이터웨어 하우스 (Snowflake, BigQuery 등)입니다. 모든 탭은 데이터를 공통 중간으로 추출하고 각 대상은 해당 공통 중간에서로드하여 탭과 대상의 조합을 구성하여 ETL 작업을 구성 할 수 있습니다.


이제 Singer는 반드시 새로운 것은 아니지만 우리의 요구에 대한 완전한 솔루션을 반드시 제시하지는 않습니다. Singer는 ETL 워크 플로의 구성 요소를 표준화하기위한 훌륭한 시작점을 제공하지만 여전히 상당한 구성 관리 및 오케스트레이션이 필요합니다. 그러나이 명백한 차이는 Meltano (GitLab의)와 Pipelinewise 등 몇 명의 신규 진입자에 의해 채워졌습니다.(Transferwise에서). 이 두 도구는 구성 관리 및 오케스트레이션 계층을 추가하여 Singer를 기반으로합니다. 또한 dbt를 사용하여 변환 모델을 코드로 관리 할 수있는 것처럼 추출 / 로더 작업을 코드로 관리 할 수 있습니다. 나는 둘 다 시도해 보았고, 둘 다 좋아하고, 두 프로젝트가 어떻게 든 병합되거나 상호 운용되기를 바랍니다. 왜냐하면 각각은 실제로 상당히 보완적인 서로 다른 강점을 가지고 있기 때문입니다. Transferwise는 특정 표준에 맞는 견고한 Singer 탭 / 타겟 세트를 개발하는 데 더 초점을 맞춘 것처럼 보이며 Meltano는 모든 공백을 채우는 데 더 집중하여 Singer를 Fivetran 및 Stitch와 같은 플랫폼의 합법적 인 대체물로 실제 작업에 투입했습니다. Meltano는 DS4FNP 프로젝트의 사명과 좀 더 관련이 있기 때문에 주로 그것에 집중할 것입니다.


Meltano 관리 프로젝트의 기본 요소는 추출기 (Singer 탭), 로더 (Singer 대상), 변환기 (dbt!) 및 오케스트레이션 (기본적으로 Airflow)입니다. Meltano만으로도 전체 분석 프로젝트를 거의 관리 할 수 있습니다. 지금까지 문서화 된 자습서와 프로젝트 설정을 통해 작업했습니다. 그것은 dbt와 매우 흡사하고 자신의 프로덕션 배포를 롤링하는 것이 충분히 가능해 보이지만 호스팅 된 Meltano-as-a-service가 현장에 등장하는 것을 매우 흥미로울 것입니다. Meltano는 잘 Dockerized이며 AWS Batch 또는 유사한 인프라를 통해 실행되는 것을 쉽게 볼 수 있습니다.


스택의 BI 측면에서 상용 플랫폼에는 Tableau, Looker 및 PowerBI가 포함됩니다. Snowflake에는 이제 Snowsight가 내장되어 있고 BigQuery는 데이터 스튜디오와 잘 어울리 며 Athena의 아날로그 파트너는 QuickSite입니다. 큰 독립형 플랫폼에는 실제로 실용적인 DS4FNP 친화적 인 가격 옵션이 부족하며 DW 특정 옵션은이 프로젝트의 정신에 비해 너무 벤더에 묶여 있다고 느낍니다. 이것은 전체 스택에서 가장 주관적인 구성 요소이므로 반드시 여기에 자신의 기본 설정을 삽입해야합니다. BI 코인의 DIY 측면은 Shiny for R 및 Dash for python을 포함하여 몇 가지 주목할만한 옵션을 제공합니다. 저는 ETL 워크 플로우보다 자신의 BI 인터페이스를 만드는 데 훨씬 덜 지치지 않습니다.





이미지 : Apache Superset .


그러나 완전한 스택을 만들기 위해 BI 계층에 대한 이상적인 옵션이 있음이 밝혀졌습니다. Superset 도 반드시 새로운 것은 아니지만 확실히 뜨거워졌고 이제 Apache 프로젝트가되었습니다. Airflow 제작자 Max Beauchemin이 개발 한 Superset은 Tableau (imho)의 오픈 소스 대안이되고 있습니다. 미학적으로는 Tableau와 Airflow가 오픈 소스를 좋아하는 아이가있는 것처럼 느껴지지만 기본 제공 SQL Lab도 Snowsight 또는 Redash 와 비슷 합니다. 를 통해 쉽게 배포 

docker-compose

할 수있는 Superset은 DS4FNP 개발 환경의 일부로 로컬에서 실행할 수있을뿐만 아니라 장기 실행 웹 서비스로 배포 할 수도 있습니다.


따라서 DS4FNP 스택은 다음 구성 요소로 구성됩니다.


Meltano는 Singer, dbt 및 Airflow를 통해 ETL (ELT) 레이어를 제공합니다.


DW 계층은 PostgreSQL 또는 SQLite를 로컬로 사용하고 BigQuery는 클라우드에서 사용합니다.


BI 계층으로 Apache Superset.


환경에 대해 간단히 이야기 해 봅시다. 이 스택의 장점은 모든 구성 요소를 로컬에서 쉽게 실행할 수 있다는 것입니다.하지만 결국에는 클라우드에 배포 할 방법도 파악해야합니다.


dbt 코드와 Airflow dags를 관리하는 Meltano 덕분에 모든 코드를 단일 저장소에 정리할 수 있다고 생각합니다. Meltano와 Superset의 Docker 배포와 모든웨어 하우스 인프라 프로비저닝 코드 사이에 일반 인프라 저장소 (또는 아님)로 돌아가는 것이 좋습니다. 튜토리얼을 위해 SQLite를 사용하여 프로젝트의 모든 유형의 구성 요소가 버전 제어되도록 할 수 있습니다.


저는 Mac을 사용하기 때문에 일부 로컬 설정은 Mac에 따라 다를 수 있지만 플랫폼에 구애받지 않도록 노력하겠습니다. 나는 vscode-dbt Atom 또는 다른 IDE도 잘 작동하지만  VS Code (이제 플러그인이 있습니다!) 의 열렬한 팬입니다. 


Meltano, dbt, Singer, Airflow 및 Superset은 모두 대부분 Python이므로 기본적으로 (컨테이너화되지 않은) 각각을 실행하는 경우 Python 및 Anaconda 또는 유사한 설정이 필요합니다.


또한 git 및 docker가 설치되어 있는지 확인하고 싶습니다.


로컬 데이터베이스의 경우 SQLite 및 PostgreSQL이 설치되어 있는지 확인하고 나중에 Mac에서 Postico  또는 TablePlus 와 함께 Postgres.app 을 적극 권장합니다.GUI 클라이언트로.


대부분의 작업은 다양한 CLI 도구를 사용하여 수행되므로 편안한 터미널 설정이 있는지 확인하거나 VS Code의 내장 터미널을 사용하십시오.


개인적으로 Oh-My-Zsh 와 함께  iTerm2에 대한 VS Code의 패스 스루를 사용 합니다.


클라우드 배포는 몇 가지 요인에 따라 달라집니다. Github 또는 GitLab을 사용하여 git 저장소에서 프로젝트 코드를 관리하는 것이 좋습니다. 그런 다음 모든 배포 관리 작업을 자동화하는 데 도움이되는 CI / CD 워크 플로 (Github Actions, Travis CI 등을 통해)를 설정할 수 있습니다. 저는 Github를 사용하는 경향이 있으며 독립 실행 형 CI / CD 서비스보다 Github Actions를 사용하는 것이 매우 실용적이라고 생각하지만 다른 의견은 다를 수 있습니다. 이제 프로젝트의 클라우드 배포에 대해 생각할 때 몇 가지 다른 움직이는 부분을 포함하는 일련의 이벤트가 있습니다.


우리는 추출 및로드 작업을 정기적으로 실행하려고합니다 (아마 정의 된 일정에 따라 결정될 수 있음). 그렇게하려면 AWS EC2, GCP 등을 통해 확장 가능한 실행 호스트를 생성해야합니다.


또한 변환 코드는 대부분 원격으로 실행되는 SQL 명령이기 때문에 우리의 실행 호스트는 표준 크기의 호스트 시스템으로 더 쉽게 일반화되지만 정기적으로 변환 코드를 실행하려고합니다.


데이터웨어 하우스는 분명히 어딘가에 있어야하지만 현재 차세대 시스템의 장점은 컴퓨팅을 스토리지와 분리하고 둘 다의 오케스트레이션을 관리한다는 것입니다. 실제로 dbt는 창고의 실제 내용에 대한 주요 인터페이스입니다.


추출,로드, 변환 및웨어 하우징 기능은 모두 일시적인 배치 프로세스 일 가능성이 높지만 안타깝게도 BI 계층을 장기 실행 웹 서비스로 사용하는 것을 피할 수는 없습니다. 즉, 연중 무휴 서비스 호스트에 대한 비용을 지불해야합니다. 호스팅 서비스 비용을 지불하는 데 관심이없는 경우 사전 생성 된 정적 콘텐츠를 BI 레이어로 제공 할 수 있습니다 (완전히 가능함).



Github 또는 기타 CI / CD 서비스는 배포 프로세스를 호스팅 할 수 있지만 배치 프로세스와 장기 실행 서비스 모두 호스팅 인프라가 필요합니다. 거의 모든 것이 컨테이너화되기 때문에 자체적으로 자체 운영하는 AWS 또는 GCP 인프라에 이러한 프로세스를 배포 할 수 있습니다. dbt는 dbt-cloud 를 제공하고 Astronomer.io 는 우수한 Airflow 호스팅 서비스를 제공하며 Preset.io 는 곧 출시 될 Superset 호스팅 서비스라는 점도 주목할 가치 가 있습니다. 누락 된 유일한 것은 Meltano이며이를 위해 유사한 호스팅 서비스가 발생할 수 있다고 생각할 수 있습니다. 결국 부분 유료화 모델에서 스택의 모든 구성 요소를 호스팅 할 수있을 것입니다.


그게 다야! 데이터 스택 아키텍처가 있습니다. 이 시리즈의 다음 부분에서는 이러한 모든 구성 요소로 프로젝트를 설정하고 일부 라이브 데이터 시각화와 함께 채워진 데이터웨어 하우스에서 절정에 이르는 방법에 대한보다 공식적인 자습서를 살펴보고자합니다. 그때까지는 Meltano, dbt 및 Superset에 대해 읽어 보는 것이 좋습니다. DS4FNP 튜토리얼을위한 몇 가지 데이터 세트를 만들어야하므로 의견에 제안이나 요청을 자유롭게 보내주십시오. 그 동안 Preset.io 팀 이 함께 만든이 튜토리얼을 즐길 수도 있습니다 . 다음 시간까지!


작가의 이전글 [번역] Biz Idea 필요하다면unbunding!
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari