Dataplex와 DPMS를 사용한 데이터 탐색

김민형·2023년 4월 14일
0

GCP - Data

목록 보기
39/44

Dataplex


Dataplex란 데이터 레이크, 데이터 웨어하우스, 데이터 마트의 데이터를 중앙에서 관리, 모니터링, 제어하고 이 데이터를 다양한 분석 및 데이터 사이언스 툴에 안전하게 제공할 수 있는 지능형 데이터 패브릭으로 기존의 Data Catalog 서비스와 통합된 상품이다.

아래 그림과 같이 도메인 별로 레이크를 나누고 해당 도메인의 빅데이터 리소스들을(DL/DW/DM 등) 영역 별로 나눠서 관리할 수 있다.

단순히 데이터 거버넌스 측면에서 관리를 위한 기능 뿐 아니라 중앙에서 원하는 도메인에 대한 Cloud Storage 및 BigQuery에 대한 데이터를 쿼리하고 분석할 수 있는데 그러기 위해선 DPMS 인스턴스 엔드포인트와 Dataplex 레이크와 연결해줘야 한다.

DPMS

Dataproc Metastore의 약자로 Google Cloud에서 실행되는 완전 관리형의 고가용성, 자동 복구 메타스토어로 Apache Hive Meastore(HMS)기반이고 서버리스 상품이다.
내부적으로 Dataproc 클러스터와 연결하여 Hive, Spark SQL 또는 기타 쿼리 서비스로 테이블 정보에 쿼리 가능

DPMS 설정

Dataproc API만 활성화 했다고 해서 사용할 순 없고 따로 DPMS API를 활성화 해줘야 한다

DPMS 생성

추후에 gRPC 엔드포인트를 노출해야 Dataplex 레이크와 연결이 가능하므로 엔드포인트 프로토콜은 gRPC로 설정해준다.

개개인마다 다르겠지만 Active되는데 40분이 걸렸다...

Cloud Shell에서 아래 명령어 수행

gRPC 엔드포인트 노출

curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://metastore.googleapis.com/v1beta/projects/<프로젝트 ID>/locations/<리전>/services/<DPMS 서비스 ID>?updateMask=hiveMetastoreConfig.endpointProtocol" \
-d '{"hiveMetastoreConfig": {"endpointProtocol": "GRPC"}}'

Dataplex 레이크 생성

레이크 생성

생성할 때 위에서 만든 DPMS와 연결

영역 추가

raw와 curated 영역이 있다. 여기선 raw 선택

자산 추가

환경 생성
기본 환경으로 만들면 default 이름으로 생성이 되고 이 환경에 기반하여 DPMS와 연동해 Spark SQL을 사용할 수 있다.

아래와 같이 기본 환경으로 구성하지 않고 커스텀하여 생성할 수도 있다.
커스텀하게 된다면 컴퓨팅 리소스 커스텀 및 소프트웨어 패키지 지정이 가능하다.

데이터 탐색

환경이 생성되면 탐색에 해당 레이크에 있는 에셋들을 한 눈에 볼 수 있고 노트북 및 SparkSQL 스크립트를 실행할 수 있다.

아래와 같은 쿼리 형식으로 탐색이 가능하다.

select * from <영역 ID>.<테이블 ID>

빅쿼리와 마찬가지로 스크립트를 저장하여 스케줄링을 할 수 있고 SQL 스크립트 뿐 아니라 Notebook도 마찬가지로 스케줄링을 할 수 있기 때문에 ML모델 구축 및 시각화 작업을 주기적으로 실행시킬 수도 있다.

리소스 삭제

이 부분에서 약간 애를 먹었다.
SparkSQL 혹은 노트북 스크립트를 작성한 후에 삭제하지 않아도 해당 레이크와 연결된 DPMS, 환경을 삭제하면 통으로 삭제가 되는 줄 알았는데 아니었다.
레이크에 속한 영역, 자산, 환경을 모두 지워도 스크립트는 남아있게 된다.
그럴 수 있지 라고 생각을 하지만 문제는 DPMS, 환경을 삭제하면 Dataplex의 탐색에 접근할 수가 없다. 즉, 스크립트가 남아있어도 확인할 수가 없는 것이다.
또한 삭제가 실패한 로그를 보면 아래와 같다.

Failed to delete 'projects/<프로젝트 ID>/locations/<리전>/lakes/<레이크 이름>' since it has child resources

child resources가 남아있다고만 알려주고 정확히 어떤게 삭제되지 않았는지 알려주지 않는다.

해결 방법은 아래와 같다.
Get a Dataplex Content 여기서 name 부분에 content/까지만 입력하고 실행시켜서 content_id를 확인한다.

위에서 content_id를 알았으면 Delete a Dataplex Content 여기서 삭제해준다.

(삭제 전에 Dataplex 콘솔에서 혹시나해서 검색을 해봐도 역시 찾을 수 없었다.)

그리고 콘솔에서 삭제하면 레이크가 삭제될 것이다.

[Dataplex 참고]
https://cloud.google.com/blog/ko/products/data-analytics/introducing-google-cloud-dataplex

profile
Solutions Architect (rlaalsgud97@gmail.com)

0개의 댓글