AWS 기술 블로그
Apache Atlas on Amazon EMR을 사용하여 Data Lineage 구성하기
데이터 거버넌스는 효율적인 데이터 관리를 위해 필수적인 요소입니다. 대부분의 데이터 지향 조직에서 데이터레이크의 메타데이터(Metadata) 관리, 카탈로깅(Cataloging), 데이터 리니지(Data Lineage), 데이터 분류(Classification) 등을 통해 효과적으로 그들의 데이터를 검색하고 활용하기를 원하고 있습니다.
이번 게시글에서는 Apache Atlas를 Amazon EMR 위에 설치하여, AWS Glue에서 관리되고 있는 카탈로그와 메타데이터를 포함하여 Apache Atlas에서 통합적으로 관리하고, 데이터 리니지 생성을 통해 데이터 흐름을 쉽게 파악할 수 있는 방법을 소개합니다.
Apache Atlas의 많은 기능 중에서 이번 게시글에서 핵심으로 다루는 기능은 Apache Hive 메타데이터 관리와 데이터 리니지입니다. Apache Atlas는 Hive 테이블을 임포트하는 기능을 제공하고 있어서 여러분은 데이터 리니지를 직관적으로 파악하고, 데이터를 분석하는데 활용할 수 있습니다. 자세한 Apache Atlas에 대한 내용은 Atlas 웹사이트를 참고하세요.
솔루션 개요
Apache Atlas는 그래프 데이터베이스용으로 JanusGraph, 텍스트 검색을 위해 Apache Solr, 메타스토어로 Apache HBase를 사용하고, Solr 관리용으로 Apache ZooKeeper를 이용합니다. Apache Kafka는 메타데이터 소스의 CRUD를 감지하여 Apache Atlas에 변경사항이 반영되도록 합니다. HBase와 ZooKeeper는 Apache Atlas 에 포함되어 있는 것을 이용할 수 있지만, 이번 게시글에서는 Amazon EMR에 설치되는 것을 이용하겠습니다.
Hive 메타스토어로 Amazon RDS 또는 Amazon Aurora 데이터베이스를 활용할 수 있지만, 이번 게시글에서는 AWS Glue Data Catalog를 Hive 메타스토어로 설정하여, Glue 카탈로그와 연동되도록 설정하겠습니다.
다음 다이어그램은 이번 게시글의 아키텍처를 보여줍니다.
앞서 설명한 것처럼, HBase와 ZooKeeper는 Amazon EMR에서 관리되는 애플리케이션을 이용합니다. 이와 다르게 Apache Atlas에 임베드된 HBase와 ZooKeeper를 이용할 수 있으며, 이 방법은 게시글의 본문에 설명됩니다.
단계 요약
이번 게시글에서 설명되는 솔루션은 아래 과정으로 구성됩니다.
- 단계 1 : Amazon EMR 클러스터 생성
- 단계 2 : Apache Atlas 설치
- 단계 3 : Amazon Athena를 이용하여 Glue Data Catalog 생성
- 단계 4 : AWS Glue Data Catalog 임포트
- 단계 5 : Apache Atlas Web UI에서 Data Lineage 확인
- 단계 6 : Apache Atlas DSL(Domain-Specific Language)로 메타데이터 검색
사전 준비사항
솔루션을 배포하기 위해서는 아래와 같은 사항을 미리 준비해야 합니다.
- An AWS account
- Amazon EC2 Key Pair
- Amazon VPC 및 Subnet
- AWS CLI
단계 1 : Amazon EMR 클러스터 생성
Amazon EMR 클러스터는 AWS CLI, AWS CloudFormation, Amazon EMR 콘솔을 통해 생성할 수 있습니다. 이번 게시글에서는 AWS CLI와 Amazon EMR 콘솔을 이용하는 방법을 다룹니다.
A. AWS CLI를 이용한 Amazon EMR 클러스터 생성
여러분의 PC에 AWS CLI가 설치되어있지 않은 경우, AWS CLI 설치 가이드를 따라 설치합니다.
AWS CLI 버전을 확인하고, AWS CLI Configuration을 아래와 같이 실행합니다.
aws --version
aws configure
AWS Access Key ID [None]: 입력 후 엔터
AWS Secret Access Key [None]: 입력 후 엔터
Default region name [None]:ap-northeast-2
Default output format [None]:
AWS CLI를 통해 아래와 같이 Amazon EMR 클러스터를 생성합니다.
- application에는 Hive, HBase, Hadoop, ZooKeeper를 입력합니다.(만약 Apache Atlas Embedded HBase를 사용한다면, HBase와 ZooKeeper를 제외합니다.)
- release-label에는 현재 최신 버전인 emr-6.9.0을 입력합니다.
- KeyName은 여러분의 Amazon EC2 Key Pair Name으로 변경합니다.
- SubnetId는 여러분의 VPC에 있는 Public Subnet ID를 입력합니다. 여기서는 테스트 목적으로 Public Subnet을 선택했습니다. 운영 환경이라면, 여러분 조직의 보안 정책을 준수해야 합니다.
- configuration에는 External Hive Metastore로 Glue Data Catalog를 지정하기 위한 설정을 합니다.
aws emr create-cluster --applications Name=Hive Name=HBase Name=Hadoop Name=ZooKeeper \
--name 'Atlas-on-EMR' \
--release-label emr-6.9.0 \
--ec2-attributes KeyName=IRONPE3-ICN,SubnetId=subnet-09eab05593cc1ff55 \
--use-default-roles \
--ebs-root-volume-size 100 \
--instance-groups '[{"InstanceCount":1,"InstanceGroupType":"CORE","InstanceType":"m5.xlarge","Name":"Core - 1"},{"InstanceCount":1,"InstanceGroupType":"MASTER","InstanceType":"m5.xlarge","Name":"Master - 1"}]' \
--configurations '[
{
"Classification": "hive-site",
"Properties": {
"hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory"
}
}
]' \
--region ap-northeast-2
B. Amazon EMR 콘솔을 이용한 클러스터 생성
- Amazon EMR 콘솔에서 Create cluster(클러스터 생성)을 선택한 후, Go to advanced options(고급 옵션으로 이동) 링크를 선택합니다. 아래와 같이 Software Configuration, AWS Glue Data Catalog settings, HBase storage settings를 선택합니다. (만약 Apache Atlas Embedded HBase를 사용한다면, HBase와 ZooKeeper를 제외합니다.)
- Next(다음)을 누릅니다.
- Network(네트워크)에서 여러분의 VPC를 선택하고, EC2 Subnet(EC2 서브넷)에 Public Subnet을 선택합니다. 여기서는 테스트 목적으로 Public Subnet을 선택했습니다. 운영 환경이라면, 여러분 조직의 보안 정책을 준수해야 합니다.
- Cluster Nodes and Instances에서 MASTER/CORE Node의 Instance type에 m5.xlarge를 선택하고 Core Node Instance count는 1을 입력합니다.
- Root device EBS volume size는 100GiB를 입력하고, Next(다음)을 선택합니다.
- Cluster name(클러스터 이름)에는 Atlas-on-EMR을 입력하고, Next(다음)을 선택합니다.
- EC2 Key pair에는 여러분의 Key Pair를 선택합니다.
- 나머지는 기본 값으로 두고 Create cluster(클러스터 생성)을 선택합니다.
Amazon EMR 클러스터 생성이 완료되면, 아래와 같이 Status가 Waiting으로 표시됩니다.
단계 2 : Apache Atlas 설치
Apache Atlas를 설치하는 방법은 아래 2가지를 선택할 수 있습니다. 첫번째는 EMR에서 관리되는 HBase를 이용하는 방법이고, 두번째는 Apache Atlas에 함께 빌드된 Embedded HBase를 이용하는 방법입니다. 메타 스토리지 역할을 하는 HBase의 운영 안정성을 위해 첫번째 방법이 권고됩니다.
A. Amazon EMR Managed HBase를 이용하는 경우
설치 스크립트를 EMR 마스터 노드에 다운로드합니다.
cd /tmp
wget https://aws-korea-tech-blog-public.s3.ap-northeast-2.amazonaws.com/artifacts/aws-blog-emr-atlas/v2.3.0-embed/install-atlas-emr-hbase.sh
chmod +x install-atlas-emr-hbase.sh
설치 스크립트를 실행합니다.
cd /tmp
./install-atlas-emr-hbase.sh
위 설치 스크립트 내용 중 MANAGE_LOCAL_HBASE=false는 Apache Atlas 외부, 즉 EMR에 설치된 HBase를 사용하다는 의미로, 이 경우 Atlas 시작/중지와 별개로 HBase가 관리되어야 합니다.
B. Apache Atlas Embedded HBase를 이용하는 경우
이 설치 방법은 앞서 언급한 것처럼, Apache Atlas와 함께 빌드된 HBase와 Solr를 사용하는 방법이므로 EMR 클러스터를 생성할 때 HBase와 ZooKeeper를 선택할 필요는 없습니다.
설치 스크립트를 EMR 마스터 노드에 다운로드합니다.
cd /tmp
wget https://aws-korea-tech-blog-public.s3.ap-northeast-2.amazonaws.com/artifacts/aws-blog-emr-atlas/v2.3.0-embed/install-atlas-embed-hbase.sh
chmod +x install-atlas-embed-hbase.sh
설치 스크립트를 실행합니다.
cd /tmp
./install-atlas-embed-hbase.sh
위 설치 스크립트 내용 중 MANAGE_LOCAL_HBASE=true는 Apache Atlas와 함께 빌드된 HBase를 사용하다는 의미로, 이 경우 Atlas가 시작/중지될 때 HBase도 함께 시작/중지됩니다.
참고 : Apache Atlas Package빌드 방법
여러분이 Apache Atlas를 직접 빌드하는 경우, 아래와 같은 절차로 진행하면 됩니다.
- EMR 콘솔에서 마스터 노드의 Public DNS name을 확인합니다.
- SSH를 이용해 EMR 마스터 노드에 접속합니다.
ssh -i <Key Pair Name> hadoop@<EMR 마스터 노드 Public DNS Name>
- Apache Atlas 소스를 다운로드하여, maven 툴로 빌드합니다. 더 자세한 빌드 방법은 여기를 참조합니다. maven 툴은 https://dlcdn.apache.org/maven/maven-3에서 최신 버전을 확인하여 다운로드하고 설치합니다. 게시글 작성 시점에서 최신 버전은 3.8.7입니다.
mkdir -p /mnt/build cd /mnt/build wget https://dlcdn.apache.org/maven/maven-3/3.8.7/binaries/apache-maven-3.8.7-bin.tar.gz tar xvf apache-maven-3.8.7-bin.tar.gz sudo cat << EOL >> /home/hadoop/.bash_profile export PATH=$PATH:/mnt/build/apache-maven-3.8.7/bin EOL source /home/hadoop/.bash_profile cd /mnt/build wget https://dlcdn.apache.org/atlas/2.3.0/apache-atlas-2.3.0-sources.tar.gz tar xvfz apache-atlas-2.3.0-sources.tar.gz cd /mnt/build/apache-atlas-sources-2.3.0 export MAVEN_OPTS="-Xms2g -Xmx2g" mvn clean -DskipTests package -Pdist,embedded-hbase-solr -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.validity.dates=true -Dcheckstyle.skip
-Pdist,embedded-hbase-solr 옵션은 Apache Atlas Package에 Apache HBase와 Solr를 포함하여 빌드하기 위한 것입니다. 이번 게시글에서는 HBase는 EMR에서 관리되도록 설치하고 Solr는 Apache Atlas에 포함된 것을 이용합니다.
Atlas 빌드가 완료될 때까지 약 20분 정도 소요됩니다.
단계 3 : Amazon Athena를 이용하여 Glue Data Catalog 생성
이번 단계에서는 Apache Atlas에 임포트될 AWS Glue Data Catalog 테이블을 생성합니다. 테이블을 생성하는 방법은 AWS Glue Crawler을 이용할 수 있지만, 이번 게시글에서는 Amazon Athena를 이용하여 External Table로 생성하겠습니다.
아래 스크립트를 Amazon Athena Query Editor에서 수행합니다.
create database salesdb;
create external table salesdb.customers(
cbgid bigint,
customer_id string,
education_level string,
first_name string,
last_name string,
marital_status string,
region string,
state string)
LOCATION
's3://aws-bigdata-blog/artifacts/aws-blog-emr-ranger/data/staging/customers';
create external table salesdb.products(
company string,
link string,
price double,
product_category string,
release_date string,
sku string)
LOCATION
's3://aws-bigdata-blog/artifacts/aws-blog-emr-ranger/data/staging/products';
create external table salesdb.orders(
customer_id string,
order_date string,
price double,
sku string)
LOCATION
's3://aws-bigdata-blog/artifacts/aws-blog-emr-ranger/data/staging/orders';
DDL 쿼리를 실행한 후에 아래와 같이 테이블과 뷰가 생성된 것을 확인할 수 있습니다.
단계 4 : AWS Glue Data Catalog 임포트
Apache Atlas에 AWS Glue Data Catalog를 임포트하기 위해 아래 쉘 스크립트를 수행합니다. 이 스크립트는 EMR 마스터 노드에서 실행합니다. 기본 Username과 Password는 admin입니다.
source /home/hadoop/.bash_profile
cd /mnt/apache-atlas/atlas/bin
./import-hive.sh --database salesdb
위 스크립트에서 –database salesdb를 지정하여 salesdb 데이터베이스에 있는 모든 Hive Table을 임포트하였습니다. –database 파라미터를 지정하지 않으면, 모든 데이터베이스에 있는 Hive Table이 임포트됩니다.
하이브 임포트 로그 파일은 /mnt/apache-atlas/atlas/logs/import-hive.log 이며, 로그 구성 파일 /mnt/apache-atlas/atlas/conf/atlas-hive-import-log4j.xml 에 설정되어 있습니다.
/mnt/apache-atlas/atlas/bin/import-hive.sh에서 아래 내용은 Hive Metastore로 Glue Data Catalog를 사용할 때, Glue Data Catalog에 존재하는 메타데이터를 Apache Atlas에 임포트하기 위한 것입니다.
CP="${HIVE_CP}:${HADOOP_CP}:${ATLASCPPATH}:/usr/share/aws/hmclient/lib/aws-glue-datacatalog-hive3-client.jar
Hive Hook은 Hive Table이 생성될 때 자동으로 Atlas Repository에 등록되도록 하는 기능입니다. 하지만 Glue Data Catalog를 Hive Metastore로 사용할 때는 Hive Hook이 작동하지 않습니다. 따라서 이런 경우에는 Glue Data Catalog가 변경될 때 import-hive.sh을 수행해야만 Atlas에 등록됩니다.
import-hive.log 파일을 확인하면 아래와 같이 Glue Data Catalog에 생성된 3개 테이블이 Atlas에 등록된 것을 확인할 수 있습니다.
단계 5 : Apache Atlas Web UI에서 Data Lineage 확인
- SSH 터널링을 통해 Apache Atlas Web UI에 접속합니다.
ssh -L 21000:localhost:21000 -i <Key Pair> hadoop@<EMR 마스터 노드 Public DNS Name>
- 여러분의 PC 브라우저에서 Apache Atlas Web UI를 엽니다.
http://localhost:21000
- Apache Atlas Login 화면에서 사용자명과 패스워드를 입력합니다. (기본 값은 admin입니다.)
- Search By Type에 hive_table을 선택하고, Search 버튼을 누르면 Amazon Athena에서 External Table로 생성한 테이블이 조회됩니다.
- 각 테이블을 선택하고, Lineage 탭을 선택하면 테이블에 대한 Data Lineage를 확인할 수 있습니다.
단계 6 : Apache Atlas DSL(Domain-Specific Language)로 메타데이터 검색
Apache Atlas DSL을 이용하여 엔터티를 검색할 수 있습니다. DSL은 SQL과 비슷한 구문을 이용하기 때문에 Atlas 리포지토리를 검색하기 쉽습니다.
Advanced Search를 선택하고, Search By Type에 hive_column을 선택합니다. Search By Query에는 아래와 같이 입력하여 컬럼명이 product_category인 엔터티를 검색합니다.
리소스 정리하기
이번 게시글에서 사용했던 리소스는 향후 불필요한 과금을 방지하기 위해 삭제합니다.
- 생성했던 Amazon EMR 클러스터를 삭제합니다.
- 생성했던 Amazon Athena 데이터베이스와 테이블을 삭제합니다. Amazon Athena Query Editor에서 아래 명령을 수행합니다.
drop database salesdb cascade;
- 보안 그룹(Security Group)을 삭제합니다. Security group name은 ElasticMapReduce-*입니다. Amazon EC2 콘솔에서 Security Groups 메뉴에서 ElasticMapReduce로 시작하는 Security Group을 찾아 삭제합니다.
- 새로운 VPC를 생성했다면, Amazon VPC콘솔에서 해당 VPC를 찾아서 삭제합니다.
결론
이번 게시글에서는 Amazon EMR과 함께 Apache Atlas를 설치하고 Atlas를 사용하는 방법에 대해 알아보았습니다. Apache Atlas는 데이터 리니지, 검색, 분류 등 데이터 거버넌스를 위한 도구로 활용될 수 있습니다.