Search

DataHub 버전 업데이트 트러블슈팅

1. 배경

DataHub 버전 기존 0.13.3 → 1.0.0 업데이트
목적
DataHub SDK(acryl-datahub Python 라이브러리)를 사용해
데이터셋(dataset) 및 컬럼 설명(description) 자동화
Python 스크립트로 일괄 업데이트 작업
하지만 최신 SDK 버전의 update 호출 시
/aspects?action=ingestProposalBatch 경로 관련 PROPOSAL BATCH 에러 발생
해당 API 엔드포인트는 v0.14.0부터 도입된 기능이므로(공식 릴리즈 목록 참고)
1.0.0으로 업그레이드해야 정상 동작
# 발생 에러 예시 requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://datahub-dns/api/gms/aspects?action=ingestProposalBatch
Bash
복사

기존 사항

이전에 설치해둔 데이터허브(0.13.3)는 공식문서 가이드의 quickstart 사용
# DataHub v1.0.0 Quickstart (docker-compose.yml 생성) datahub docker quickstart --version v0.13.3
Bash
복사
위 명령 실행 시, 로컬 홈 디렉토리(~/.datahub/quickstart)에 docker-compose.yml 파일이 생성
# 생성된 docker-compose.yml 파일 위치 확인 cd ~/.datahub/quickstart ls -1 # └─ docker-compose.yml
Bash
복사
폴더 구조
repository/ ├─ app/ │ ├─ metadata/ # DataHub 메타데이터 관리용 │ ├─ src/ # 파이썬 애플리케이션 소스 코드 │ ├─ conf/ # DataHub 설정 파일 모음 │ │ ├─ datahub-frontend/ # 프론트엔드 설정 │ │ │ └─ application.conf │ │ ├─ user_group/ # 사용자 그룹별 권한 정의 │ │ │ └─ *.yaml │ │ └─ user.props # DataHub GMS 접근·인증에 필요한 프로퍼티 │ └─ source-recipe/ # DataHub Ingestion 소스 설정 모음 │ └─ *.yaml │ └─ docker-compose.yml
Bash
복사
quickstart로 얻어낸 docker-compose 파일과 데이터 허브 설정 파일(conf, source-recipe등)들로 EC2 인스턴스에 설치하여 운영중

2. 환경변수 설정

DataHub Python SDK 사용을 위해 아래 환경변수 필수 설정
DATAHUB_GMS_TOKEN
DataHub UI에서 Access Token 생성 후 설정
DATAHUB_GMS_URL
로컬 개발환경: https://datahub-dns/api/gms
EC2 인스턴스: http://localhost:8080

3. 버전 업데이트

docker-compose 이미지 태그 변경
처음부터 설치할거라면 quickstart —version v1.0.0 사용해도 되지만 기존 데이터를 그대로 두고 업데이트 해야 했기에 docker-compose만 수정하여 올리기로함
docker-compose.yaml 에서 이미지 0.13.31.0.0으로 모두 변경하여 배포
적용 대상 컨테이너(총 8개 중 acryldata가 제공하는 공식 이미지 5종만 해당)
acryldata/datahub-frontend-react
acryldata/datahub-gms
acryldata/datahub-upgrade
acryldata/kafka-setup
acryldata/elasticsearch-setup
업데이트 커맨드
# (1) 기존 컨테이너 내려주기 docker-compose down # (2) 이미지 새로 받기 docker-compose -p datahub pull # (3) upgrade job 먼저 실행 docker-compose -p datahub up -d datahub-upgrade docker-compose -p datahub logs -f datahub-upgrade # (4) 전체 재시작 docker-compose -p datahub up -d
Bash
복사
경로명 prefix 불일치 에러
기존 경로가 datahub 여서 프리픽스로 datahub가 붙어있음 → 새로 설치하면서 git 프로젝트 경로명으로 변경됨
볼륨 프리픽스 불일치 → 기존 볼륨 마운트 실패
-p datahub 옵션으로 프리픽스 고정해 재 업데이트했더니 기존 볼륨으로 다시 붙음

4. 설치한 DataHub Docker 확인

Docker 컨테이너 목록 확인

Up(health) 상태
- datahub-datahub-actions-1 - datahub-datahub-frontend-react-1 - datahub-datahub-gms-1 - datahub-schema-registry-1 - datahub-broker-1 - datahub-elasticsearch-1 - datahub-zookeeper-1 - datahub-mysql-1
Bash
복사
setup/upgrade 실행 후 exited 상태
- datahub-elasticsearch-setup-1 - datahub-mysql-setup-1 - datahub-datahub-upgrade-1 - datahub-kafka-setup-1
Bash
복사

도커 볼륨 목록

local datahub_broker local datahub_esdata local datahub_mysqldata local datahub_zkdata local datahub_zklogs local <랜덤문자열> # datahub-zookeeper-1 관련 local <랜덤문자열> # datahub-broker-1 관련 local <랜덤문자열> # datahub-schema-registry-1 관련
Bash
복사

5. 업데이트 후 발생한 주요 이슈 및 해결

5.1 GUI 화면이 비어 있는 문제

원인: GraphQL 설정이 빠져서 프론트엔드 서버 에러
에러 메시지
Internal server error, for (POST) [/api/v2/graphql]
No configuration setting found for key 'graphql'
해결
1.
conf/datahub-frontend/application.conf에 GraphQL 블록 추가
graphql { enabled = true endpoint = "/api/v2/graphql" subscriptions-path = "/api/v2/graphql/websocket" ui { enabled = true path = "/graphql" } verbose { logging = false slowQueryMillis = 2500 } }
JSON
복사
2.
프론트엔드 컨테이너만 재시작
docker-compose -p datahub restart datahub-frontend-react
Bash
복사

5.2 Elasticsearch 인덱스 누락

증상: MySQL에는 데이터가 있지만, ES 인덱스별 도큐먼트 수가 모두 0개
데이터만 있고 인덱스는 하나도 생성이 안되어 GUI에서 아무런 값을 찾을 수 없었음
확인
# DB에 메타데이터가 남아있는지 확인 sudo docker exec -it datahub-mysql-1 \ mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -D datahub \ -e "SELECT COUNT(*) FROM metadata_aspect_v2;" # -> 39244개 있음 확인 # 엘라스틱서치 인덱스 목록 & 도큐먼트 수 확인 curl -s 'http://localhost:9200/_cat/indices?v' # -> datasetindex dataplaformindex 같은 중요 인덱스 전부 0개
Bash
복사
해결: 엘라스틱 인덱스 재생성
docker-compose -p datahub run --rm \ -e ELASTICSEARCH_HOST=elasticsearch \ datahub-upgrade \ -u RestoreIndices -a clean
Bash
복사
GMS, frontend 재시작
docker-compose -p datahub restart datahub-gms datahub-frontend-react
Bash
복사
여기서 헤맸던것 사항
인덱스 재생성 명령어는 당장 생성이 되는게 아니고 큐로 보내는 역할.
엘라스틱서치 인덱스 생성에 시간이 꽤 오래 걸리는데 이걸 모르고 당장 값이 조회되지 않아서, 제대로 동작하지 않는줄 알고 카프카 컨슈머를 따로 띄워야하는 줄 알았음.
datahub-gms 서버에서 처리한다는 것을 보고 gms 컨테이너 로그를 보니 느리지만 천천히 인덱스를 생성하고 있었음 → 다음날 확인해보니 다시 잘 생성되어 조회가 되었다

5.3 Kafka 인제스트(ingestion) 실패

원인: Kafka 관련 패키지 미설치
해결: 로그 확인해 누락된 패키지 설치
pip install 'acryl-datahub[datahub-kafka]'
Bash
복사