AWS 노트

Amazon Athena 를 사용해 SageMaker 노트북에서 SQL 쿼리 실행하기 (Amazon Web Services 블로그 번역)

Jonchann 2020. 7. 17. 12:15

원글: Amazon Athena を使用した SageMaker ノートブックからの SQL クエリの実行方法

 

  인터넷이 등장하고 데이터가 방대해지고 고속화되고 다양화되고 있다. 많은 기업은 이러한 '빅 테이터' 관리라는 문제를 안고 있으며 '빅 데이터'를 해석해서 최적의 결과를 도출하는데 어려움을 겪고 있다. 데이터 수집, 보존, 공유, 분석, 가시화를 어렵게 하는 원인으로 기업에서 데이터를 저장하는 방식, 끊기지 않는 여러 포맷의 데이터 유입, 기술 환경의 끝 없는 변화 등을 들 수 있다. 그렇다면 데이터 스토어에 접속하는 견고한 데이터 파이프라인을 구축해 데이터에서 인사이트를 취득할 수 있는 플랫폼을 데이터 사이언티스트나 엔지니어에게 제공하려면 어떻게 해야 할까.

 

  데이터 스토어 일원화에 투자하는 기업이 늘고 있다. 또한 Amazon Simple Storage Service (S3) 를 데이터레이크로 사용하는 이점을 알게 되었다. 데이터레이크에 접속하는 데이터 파이프라인을 구축하는 경우 데이터 디스커버리 프로세스가 필요하다. 이러한 프로세스에는 데이터 포맷 및 스키마 식별, 데이터의 카탈로그화, 테이블 정의 작성을 위한 메타데이터의 파악, 데이터를 쿼리하기 위한 기능 제공 등이 포함된다.

 

  본 블로그 글에서는 데이터 파이프라인 구축에 필요한 모든 단계를 소개한다. Amazon S3 에 격납되어있는 데이터를 대상으로 한 크롤러 작성, 데이터 디스커버리 및 카탈로그화를 위한 AWS Glue 사용법부터 테이블 메타데이터를 보존 및 취득하기 위한 Amazon Athena 사용, Athena 테이블에 대해 쿼리를 실행하기 위한 Amazon SageMaker 사용까지 여러 단계로 나눌 수 있다.

 

  Amazon SageMaker 는 엔드포인트 기계학습 (ML) 플랫폼이며 AWS 상에서 기계학습 모델을 구축, 훈련, 디플로이할 때 사용할 수 있다. 이 서비스에는 고도의 모듈 방식을 채용했으며 각 구성 요소는 단일 요소로 혹은 조합으로 사용할 수 있게 설계되었다. Amazon SageMaker 노트북 모듈을 사용하면 데이터를 로컬로 불러올 때 발생하는 대기 시간 (latency) 를 억제하여 데이트 조작 효율성을 향상시킨다. 이제부터 Amazon SageMaker 의 Jupyter 노트북을 사용하여 Athena 와 통합하고 데이터 프레임에 입력하여 데이터 조작을 실현하는 방법에 대해 설명한다.

 

  본 블로그 글에서는 예로 항공회사의 정시운행에 관한 2008년 데이터셋을 사용한다. 이 데이터셋은 1987년 10월부터 4월까지 미국내 모든 민간항공편을 대상으로 하고 있으며 각 항공기의 이착륙에 관한 상세 정보가 들어있다. 이 데이터를 먼저 Amazon S3 에 업로드해 AWS Glue 와 Athena 를 사용할 수 있는 환경을 만들고 Amazon SageMaker 에서 사용할 수 있도록 한다.

AWS Glue 에 의한 데이터 디스커버리

  AWS Glue 데이터 카탈로그 기능과 Amazon S3 로의 내장통합기능에 의해 데이터 식별 프로세스와 발견한 데이터에서 스키마 정의를 도출하는 프로세스를 간단하게 할 수 있다. 데이터 카탈로그 내에서 AWS Glue 크롤러를 사용하면 Amazon S3 에 보존된 데이터를 트래버스 (한쪽에서 반대쪽으로 조사 또는 시료(試料)를 채취해 가는 선(線)) 해 데이터 카탈로그 내에서 정의된 메타데이터 테이블을 구축할 수 있다.

테이블 정의를 갖는 데이터베이스의 정의가 데이터 카탈로그에 첫번째로 입력된다.

 

  1. AWS Glue 콘솔에서 '데이터베이스 추가'를 선택한다. 데이터베이스 이름을 입력하고 '작성'을 클릭한다.
  2. AWS Glue 크롤러를 작성해 작성된 데이터베이스에 테이블을 추가한다. 크롤러는 Amazon S3 상의 데이터를 크롤링 해 데이터베이스에 테이블 정의를 추가한다.
  3. 데이터 스토어를 선택한다. 여기서 보이는 URL 은 Amazon S3 에 보존되어있는 데이터 주소이다. '다음'을 클릭한다.
  4. IAM 역할에 AWS Glue 가 Amazon S3 에 격납되어있는 파일에 접근할 수 있도록 권한을 부여하고 그 파일의 암호화 권한을 갖도록 해 새롭게 작성해야 한다.
  5. '다음'을 클릭하고 '빈도'에서 '온디맨드 실행'을 지정해 크롤러 스케줄을 설정한다.
    1. 에서 작성한 데이터베이스를 선택한다.
  6. '완료'를 누른다. 이것으로 크롤러가 실행 가능한 상태가 되었다. '지금 바로 실행하겠습니까?'를 선택하면 Amazon S3 에 격납되어있는 데이터의 테이블 정의가 작성된다.

Athena 를 사용한 Amazon S3 데이터 쿼리

  Athena 에서는 표준 SQL 인터페이스를 사용해 Amazon S3 데이터를 쿼리한다. AWS Glue 데이터 카탈로그를 사용해 인터랙티브한 쿼리를 작성할 수 있으며 그 이후의 처리에 필요한 데이터 조작 실행이 가능해진다. Amazon Athena 콘솔에서는 AWS Glue 카탈로그 내의 데이터베이스와 테이블이 자동적으로 반영된다. AWS 관리 콘솔에 로그인 해 Amazon Athena 콘솔에 이동하는 것 만으로 위에서 작성한 데이터베이스와 테이블이 '쿼리 에디터'에 표시된다.

 

  오른쪽 위에 있는 '설정'을 클릭해 결과를 출력할 디렉토리를 미리 설정해 놓아야 한다. Amazon Athena 는 쿼리 결과를 S3 버킷에 보존하기 때문이다. S3 버킷은 Amazon SageMaker 가 Athena 에서 쿼리를 실행한 다음 필요하다.

Amazon SageMaker 를 사용해 데이터를 분석/관리하기

  Amazon SageMaker 의 Jupyter 노트북 인스턴스에서 테이블 정의를 이용 가능하게 하는 것이 데이터 파이프라인 구축의 마지막 단계이다. Jupyter 노트북은 일반적으로 데이터 가시화, 통계적인 분석 실행, 데이터 조작, 기계학습 작업을 위한 데이터 준비 등을 하는 데이터 사이언티스트가 사용한다.

  1. Amazon SageMaker 콘솔에서 '노트북 인스턴스 작성'을 선택한다.

  2. '노트북 인스턴스 설정'에서 노트북 인스턴스명을 입력하고 인스턴스 타입을 선택한다. Amazon SageMaker 노트북 인스턴스가 Amazon S3 와 소통하기 위한 역할을 선택한다.

  3. 노트북 인스턴스가 작성되어 '상태'가 'InService'가 될 때까지 기다린다.

  4. '열기' 링크를 선택하면 브라우저의 다른 창에서 노트북 인터페이스가 열린다.

  5. 'New'에서 'Terminal'을 클릭해 쿼리 인증을 위한 AWS 인증 정보 파일을 갱신한다.

  6. 유저의 인증정보 및 지역을 설정하고 AWS 인증정보 파일을 갱신한다. 가장 이상적인 방법으로 일정 기간을 지나면 소실되는 일시적 인증정보를 사용하길 권장한다.

  7. 'New'를 클릭하고 Jupyter 에 새 노트북을 작성한다. Amazon SageMaker 는 Python2, 3, MXNet, TensorFlow, PySpark 를 서포트하는 Jupyter 를 위한 커널을 제공한다. 오늘 연습에서는 Pandas 라이브러리가 설치되어있는 Python 을 커널로 선택한다. 노트북에서 다음 커맨드를 실행해 Athena JDBC 드라이버를 설치한다. PyAthena 는 Amazon Athena JDBC 드라이버를 위한 Python DB API 2.0 (PEP 249) 와 호환되는 클리언트이다.

    import sys
    !{sys.executable} -m pip install PyAthena
  8. Athena 드라이버가 설치되면 JDBC 접속을 사용해 Athena 에 접속하면 Pandas 데이터 프레임에 입력할 수 있게 된다. 데이터 사이언티스트의 데이터 작업은 일반적으로 데이터 먼징 (Munging, 어떠한 포맷을 갖는 데이터를 받아 다른 포맷으로 변환하는 작업) 및 클리닝, 데이터 분석 및 모델링, 플롯에 맞는 형태나 표 형식으로 분석결과를 변환하는 등의 여러 단계로 나눌 수 있다. 이러한 작업을 위한 툴로 Pandas 가 이상적이다.

    from pyathena import connect
    import pandas as pd
    conn = connect(s3_staging_dir='<ATHENA QUERY RESULTS LOCATION>',
                region_name='<YOUR REGION, for example, us-west-2>')
    df = pd.read_sql("SELECT * FROM athenaquery. limit 8;", conn)
    df
    

결론

  본 블로그 글에서 설명한 해결책은 수신 데이터가 데이터 스토어에 입력되면 자동적으로 카탈로그화 하는 방법이다. 데이터를 쿼리해 데이터 조작이나 분석을 진행한다. 또한 데이터에서 인사이트를 도출해 더 큰 사업 성과를 거두기 위하여 특색 있는 엔지니어링, 훈련, 스코어링을 통해 ML 모델을 더 창출할 수 있는 단계를 설정한다.