paint-brush
데이터 레이크의 미스터리 공개: Nessie, Dremio 및 MinIO가 물결을 일으키다~에 의해@minio
8,080 판독값
8,080 판독값

데이터 레이크의 미스터리 공개: Nessie, Dremio 및 MinIO가 물결을 일으키다

~에 의해 MinIO6m2024/02/22
Read on Terminal Reader

너무 오래; 읽다

이 문서에서는 Nessie, Dremio 및 MinIO가 어떻게 협력하여 데이터 엔지니어링 워크플로에서 데이터 품질과 협업을 향상하는지 보여주는 단계별 가이드를 제공합니다.
featured image - 데이터 레이크의 미스터리 공개: Nessie, Dremio 및 MinIO가 물결을 일으키다
MinIO HackerNoon profile picture


우리 중 많은 사람들이 나중에 발전하는 요구 사항에 따라 데이터를 변경했습니다. 우리가 그것을 깨닫는 순간에는 롤백이 불가능해집니다. 변화는 단지 상수가 아닙니다. 이는 정교한 접근 방식이 필요한 데이터 관리의 필수적인 부분입니다. Dremio의 데이터 카탈로그 Nessie의 Git과 유사한 기능을 입력하세요.


Git이 소프트웨어 개발의 기본이 된 것처럼 데이터 엔지니어에게는 병렬 작업, 데이터 버전 비교, 프로덕션 변경 사항 촉진, 필요할 때 데이터 롤백을 위한 유사한 도구가 필요합니다. Nessie는 데이터 버전, 분기, 병합 및 커밋을 관리하기 위한 Git과 유사한 버전 제어 시스템을 데이터 엔지니어에게 제공합니다. 이는 여러 데이터 엔지니어가 동시에 데이터를 작업하고 변환할 때 매우 유용할 수 있습니다. Nessie는 각 엔지니어가 메인 브랜치 형태로 단일 정보 소스를 유지하면서 별도의 브랜치에서 작업할 수 있도록 해줍니다. 이 기능을 통해 데이터 엔지니어링 팀은 끊임없는 변화에 직면하여 공동으로 데이터 품질을 유지할 수 있습니다.


이 문서에서는 Nessie, Dremio 및 MinIO가 어떻게 협력하여 데이터 엔지니어링 워크플로에서 데이터 품질과 협업을 향상하는지 보여주는 단계별 가이드를 제공합니다. 데이터 엔지니어, ML 엔지니어 또는 최신 데이터 레이크 매니아인지 여부에 관계없이 이 블로그는 데이터 버전 관리 방식을 효과적으로 향상하는 데 필요한 지식과 도구를 제공합니다.

기본 사항 이해: Nessie 워크로드

Nessie는 테스트, 개발 및 프로덕션 환경으로 푸시할 수 있는 Git과 유사한 워크로드를 허용합니다. 몇 가지 주요 개념을 분석해 보겠습니다.


  • 분기: Git과 마찬가지로 Nessie의 분기를 사용하면 다양한 데이터 엔지니어링 작업을 동시에 수행할 수 있습니다. 예를 들어 기능 개발, 데이터 정리 및 데이터 변환을 위한 분기가 있을 수 있습니다. 각 분기에는 고유한 데이터 변경 세트가 있을 수 있습니다.


  • 커밋: Nessie에서 커밋은 특정 시점의 데이터 스냅샷을 나타냅니다. 데이터를 변경할 때 해당 변경 사항을 기록하는 새 커밋을 생성합니다. 커밋은 특정 분기에 연결됩니다. 데이터를 안정적이거나 알려진 양호한 상태로 되돌려야 할 때 Nessie를 사용하면 쉽게 특정 커밋을 선택하고 해당 데이터 버전으로 롤백할 수 있습니다. 이는 데이터 품질과 일관성을 보장합니다.


  • 병합 : Nessie를 사용하면 한 분기의 변경 사항을 다른 분기로 병합할 수 있습니다. 이는 Git의 코드 변경 사항을 병합하는 것과 유사합니다. 분기를 병합하면 해당 분기에서 변경된 데이터가 대상 분기의 일부가 됩니다.

구성 요소



Dremio 는 오픈 소스 플랫폼으로 작동하는 분산 분석 엔진으로, 데이터 탐색, 변환 및 협업을 위한 직관적인 셀프 서비스 인터페이스를 제공합니다. 그 디자인은 다음 사항에 기반을 두고 있습니다. 아파치 애로우, 고속 원주형 메모리 형식입니다.


우리는 이미 Kubernetes와 함께 Dremio를 배포하는 방법과 Dremio를 사용하여 MinIO의 Iceberg 테이블 쿼리 . Dremio에 대한 자세한 내용은 다음을 참조하세요. 드레미오 리소스 .


MinIO 는 고성능 객체 스토리지입니다. 뛰어난 것으로 유명함 속도 그리고 확장성 , MinIO는 최신 데이터 레이크 인프라를 구축하고 유지 관리하는 데 중추적인 구성 요소 역할을 합니다. MinIO는 설계자가 온프레미스, 베어메탈, 엣지 또는 퍼블릭 클라우드에서 대량의 데이터를 효율적으로 관리하고 저장할 수 있도록 지원합니다.


아파치 빙산 데이터 레이크의 대용량 데이터를 관리하는 데 적합한 오픈 테이블 형식입니다. 시간 여행, 동적 스키마 진화, Partition Evolution과 같은 고유한 기능은 쿼리 엔진이 동일한 데이터에 대해 안전하고 효율적으로 동시에 작업할 수 있도록 하여 게임 체인저를 만듭니다. 보다 Iceberg와 MinIO를 사용한 Lakehouse 아키텍처에 대한 최종 가이드 Iceberg 기능에 대한 자세한 내용은

시작하기

당신은 도커 엔진 그리고 도커 작성 이 튜토리얼에서는. 아직 가지고 있지 않은 경우 두 가지를 모두 얻는 가장 쉬운 방법은 Docker Desktop을 설치하는 것입니다.


튜토리얼의 이 부분은 Dremio의 블로그 게시물 . 이 프로젝트에 대한 저장소를 얻을 수 있습니다 여기 .


시작하려면 터미널을 열고 리포지토리를 복제/다운로드한 폴더로 이동한 후 아래 명령을 실행하여 Dremio를 시작하세요.


 docker-compose up dremio


잠시 기다린 후 http://localhost:9047 로 이동하여 Dremio에 액세스하세요. 요청된 필드를 업데이트하고 다음을 클릭합니다.



그런 다음 다음 명령을 실행하여 MinIO를 시작합니다.


 docker-compose up minio


아래의 최종 docker-compose up 명령은 Nessie를 시작합니다.


 docker-compose up nessie


http://localhost:9001 로 이동하여 minioadmin:minioadmin 의 사용자 이름과 비밀번호로 MinIO에 로그인하세요. 버킷을 생성하라는 메시지가 표시됩니다.



iceberg-datalake 라는 이름을 만드세요.



그런 다음 Dremio http://localhost:9047 로 돌아가 소스 추가를 클릭하고 Nessie를 선택하세요.



  • 이름을 nessie 로 설정하세요.
  • 엔드포인트 URL을 http://nessie:19120/api/v2 로 설정합니다.
  • 인증을 none 으로 설정



아직 저장을 클릭하지 마세요. 대신 왼쪽 탐색 패널에서 스토리지를 클릭하세요. MinIO는 S3-API 호환 객체 스토리지이며 AWS S3와 동일한 연결 경로를 사용할 수 있습니다.


  • 액세스 키의 경우 minioadmin 설정하세요.
  • 비밀 키의 경우 minioadmin 설정하세요.
  • 루트 경로를 /iceberg-datalake 로 설정



다음 지침을 보려면 아래로 스크롤하세요.

  • Connection Properties 아래 Add Property 버튼을 클릭하여 다음 속성을 생성하고 구성합니다.
    • fs.s3a.path.style.access true 로 설정
    • minio:9000 에 대한 fs.s3a.endpoint
    • dremio.s3.compat true 로 설정
    • Encrypt connection 선택 취소하세요.



그런 다음 저장을 클릭합니다. 이제 데이터 소스에 Nessie 카탈로그가 표시됩니다.



데이터 소스 생성

Dremio에서 왼쪽의 SQL Runner로 이동합니다. 텍스트 편집기의 오른쪽 상단 영역에 있는 Context Nessie 소스로 설정되어 있는지 확인하세요. 그렇지 않으면 이 쿼리를 실행하려면 SalesData 대신 nessie.SalesData 와 같은 컨텍스트를 참조해야 합니다. 아래 SQL을 복사해서 붙여넣고 실행해 보세요.


 CREATE TABLE SalesData (    id INT,    product_name VARCHAR,    sales_amount DECIMAL,    transaction_date DATE ) PARTITION BY (transaction_date); 



방금 만든 테이블에 데이터를 삽입하려면 아래 쿼리를 실행하세요.


 INSERT INTO SalesData (id, product_name, sales_amount, transaction_date) VALUES    (1, 'ProductA', 1500.00, '2023-10-15'),    (2, 'ProductB', 2000.00, '2023-10-15'),    (3, 'ProductA', 1200.00, '2023-10-16'),    (4, 'ProductC', 1800.00, '2023-10-16'),    (5, 'ProductB', 2200.00, '2023-10-17'); 



MinIO로 다시 이동하여 데이터 레이크가 Iceberg 테이블로 채워졌는지 확인하세요.


Nessie를 사용한 분기 및 병합

http://localhost:9047 에서 Dremio로 돌아갑니다. AT BRANCH 구문을 사용하여 기본 분기의 테이블을 쿼리하는 것으로 시작합니다.


 SELECT * FROM nessie.SalesData AT BRANCH main; 



프로덕션에 영향을 주지 않고 데이터를 가지고 놀고 변환할 수 있도록 ETL(Extract Transform and Load) 브랜치를 생성합니다.


 CREATE BRANCH etl_06092023 in nessie


ETL 분기 내에서 테이블에 새 데이터를 삽입합니다.

 USE BRANCH etl_06092023 in nessie; INSERT INTO nessie.SalesData (id, product_name, sales_amount, transaction_date) VALUES (6, 'ProductC', 1400.00, '2023-10-18');


ETL 분기 내에서 새 데이터의 즉각적인 가용성을 확인합니다.

 SELECT * FROM nessie.SalesData AT BRANCH etl_06092023;


기본 분기의 사용자로부터 변경 사항이 격리된다는 점에 유의하세요.

 SELECT * FROM nessie.SalesData AT BRANCH main;


ETL 분기의 변경 사항을 기본 분기에 다시 병합합니다.

 MERGE BRANCH etl_06092023 INTO main in nessie;


변경 사항이 실제로 병합되었는지 확인하려면 기본 분기를 다시 선택하세요.

 SELECT * FROM nessie.SalesData AT BRANCH main


이 분기 전략을 통해 데이터 엔지니어는 여러 테이블에 걸쳐 수많은 트랜잭션을 독립적으로 처리할 수 있습니다. 준비가 되면 데이터 엔지니어는 이러한 트랜잭션을 기본 분기 내의 포괄적인 단일 다중 테이블 트랜잭션으로 병합할 수 있습니다.

결론

이 블로그 게시물은 데이터 엔지니어링에서 Git과 같은 버전 제어의 힘을 자세히 살펴보며 네시 데이터 버전, 분기 및 병합을 원활하게 관리합니다. 이 단계별 가이드에서는 개체 스토리지 기반인 Dremio 및 MinIO와 협력하여 Nessie가 데이터 엔지니어링 워크플로에서 데이터 품질과 협업을 향상시키는 방법을 보여줍니다.


귀하의 데이터 레이크하우스가 어떤 모습인지 알려주세요. [email protected] 또는 우리 슬랙 채널 .


여기에도 나타납니다.