AWS

[AWS] AWS Glue 및 Amazon S3를 활용한 Data Lake 구축

또개해삼 2022. 3. 6. 01:56

빅데이터의 시대가 되면서 데이터의 양이 많아지고 ETL 프로세스가 복잡해져가고 있습니다.  빅데이터를 위한 데이터 스토리지 리파지토리인 Data Warehouse와 Data Lake 2가지 방법이 있습니다. 본 포스팅은 Data Lake를 구축해보는 실습입니다.

 

💡 Data Warehose?

먼저 테이블을 설계를 제대로 정한 후에 데이터를 가공하고 축적합니다. 일반적인 RDB와는 달리 대량의 데이터를 장기 보존하는 것에 최적화되어 있습니다.

 

💡 Data Lake?

데이터를 원래의 형태로 축적해두고 나중에 그것을 필요에 따라 가공하고 테이블을 설계합니다. 데이터 저장 형식은 자유지만, 대부분의 경우는 CSV나 JSON 등의 범용적인 텍스트 형식이 사용됩니다.

 

아키텍처

 

💡 AWS Glue?

AWS Glue는 완전 관리형 추출, 변환 및 로드(ETL) 서비스로, 효율적인 비용으로 간단하게 여러 데이터 스토어 및 데이터 스트림 간에 원하는 데이터를 분류, 정리, 보강, 이동할 수 있습니다. AWS Glue는 서버리스이므로 설정하거나 관리할 인프라가 없습니다.

 

💡 서버리스(serverless)?

개발자가 서버를 관리할 필요 없이 애플리케이션을 빌드하고 실행할 수 있도록 하는 클라우드 모델

 

작업순서

1.Python 웹 크롤링을 활용하여 데이터를 수집 후 CSV 파일 형식으로 저장

2.S3에 원시 CSV형태인 4개의 파일을  저장

3.CSV 파일을 AWS Glue 테이블에 저장

4.데이터 분석을 위한 CSV를 Parquet 형식으로 S3에 다시 저장

5.Parquet 데이터를 AWS Glue 테이블에 저장

6.AWS Athena를 활용하여 데이터 조회 및 분석

 

 

웹 크롤링 작업은 아래 포스팅을 참고해주시기 바랍니다. 

[Python] 웹 크롤링하여 csv 파일로 저장 (tistory.com)

 

 

1. 데이터 검색 및 크롤러 구성

1) s3에 데이터를 검색하려면 데이터베이스를 추가해야 합니다.

  • shopping이라는 데이터베이스를 생성합니다.

 

 

2) 데이터베이스를 선택 후 테이블 보기를 클릭하여 데이터베이스 안에 테이블을 생성합니다.

 

 

테이블 추가에서 3가지 메뉴가 존재합니다.

  • 크롤러를 사용하여 테이블 추가 : s3에 저장된 데이터를 크롤링하여 새로운 테이블을 생성합니다.
  • 테이블을 수동으로 추가 : AWS Glue에 생성된 테이블을 참조하여 생성합니다.
  • 스키마를 수동으로 추가 : 기존에 생성된 스키마를 참조하여 생성합니다.

 

💡 크롤러?

크롤러는 데이터 스토어에 연결하여 분류자의 우선순위 지정 목록을 통해 데이터의 스키마를 결정하는 역할을 합니다. AWS Glue는 CSV, JSON, Avro 등과 같은 일반 파일 형식에 대한 분류자를 제공합니다.

 

3) s3에 데이터를 사용할 거기 때문에 크롤러를 사용하여 테이블 추가를 선택합니다.

 

 

4) shopping 데이터베이스에 테이블을 추가합니다.

 

 

 

5) S3에서 데이터를 가져와야 하므로 아래와 같이 설정합니다.

  • Crawl all folders : 전체 데이터 집합을 크롤링합니다.
  • Crawl new folders only : 마지막 크롤러 실행 이후에 추가된 폴더만 크롤링합니다.
  • Crawl changed folders identified by Amazon S3 Event Notifications : 새로운 폴더가 생기는 이벤트가 발생할 때 크롤링하게끔 구현이 가능합니다.

 

 

6) s3에 저장된 데이터를 크롤링하여 AWS Glue 테이블로 저장하는 옵션입니다.

  • 포함 경로에 경로를 s3://Bucket이름/폴더 이름/ 입력해주면 해당 경로에서 데이터를 크롤링합니다.

 

 

7) 다른 데이터 스토어 추가는 아니요를 선택합니다.

 

 

8) IAM 역할을 사용하는 환경에 맞게 설정합니다.

 

💡 IAM?

IAM(Identity and Access Management)은 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스입니다. IAM을 사용하여 리소스를 사용하도록 인증(로그인) 및 권한 부여(권한 있음)된 대상을 제어할 수 있습니다.

 

 

9) 온디맨드를 선택합니다. 활성화할 때 실행되는 트리거입니다.

  • AWS Glue 트리거가 실행되면 지정된 작업 및 크롤러를 시작할 수 있습니다.

 

 

10) 데이터베이스에서 이전에 생성한 shopping를 선택합니다. AWS Glue에서 스키마 변경을 처리는 하는 방법이다. 

 

 

11) 크롤링 설정을 끝났으면 크롤러 실행을 클릭합니다.

 

 

12) 크롤링이 끝나면 AWS Glue 왼쪽 메뉴에서 테이블을 선택 후 테이블 한 개가 추가되어있는 것을 확인할 수 있습니다. 

 

 

13) 테이블을 클릭해서 정보를 확인할 수 있습니다. 

 

 

14) 스키마 편집을 클릭해서 열 이름을 원하는 이름으로 변경할 수 있습니다.

 

 

2. CSV에서 Parquet 형식으로 데이터 변환

 

💡 Parquet?

파케이(Parquet)이란, 많은 양의 데이터를 처리하는데 들어가는 시간과 비용을 절약하기 위해서 기존의 일반적인 행 기반 포맷이 아닌 열 기반 포맷의 처리를 말합니다. 파케이 포맷의 사용은 주로 Apache Spark, Hadoop 등의 대용량 데이터 처리에 지원되고 있습니다.  

 

 

또한 파케이는 Amazon Athena, amazon redshift 같은 AWS 분석 서비스에 적합한 칼럼 형식이며, 쿼리 성능이 개선됩니다.

 

 

1) AWS Glue 메뉴 중 ETL에 작업을 선택 후 작업 추가를 선택합니다. 

 

 

2) 이름은 shopping-csv-parquet 입력, IAM role에서 GlueServiceRole 선택 후 스크립트를 저장할 s3 경로를 입력, 임시 디렉터리에 대한 s3 디렉터리를 입력합니다.

 

 

3) 데이터 원본 선택에서 지정한 AWS Glue 데이터 테이블을 선택합니다.

 

 

4) 스키마 변경을 선택합니다.

 

 

5) 데이터 대상에서 테이블 생성 선택 후 데이터 스토어는 Amazon S3, 형식은 Parquet, 결과를 저장할 새 위치 경로를 지정해줍니다.

 

 

6) 스키마가 정상적으로 매핑되었는지 확인하고 작업 저장 및 스크립트 편집을 클릭합니다.

 

 

7) 작업을 편집, 저장 및 실행할 수 있습니다. 이 스크립트는 AWS Glue에서 자동으로 생성하였고, 필요한 경우에는 스크립트 직접 작성하여 실행할 수 있습니다. 저장 후 작업 실행을 합니다.

 

 

8) 작업 실행이 끝나면 s3지정 경로에 parquet형식으로 데이터가 생성되어 있습니다.

 

 

3. parquet 테이블 및 크롤러 추가

1) 작업이 완료되면 크롤러를 사용하여 Parquet 데이터에 대한 새 테이블을 추가합니다.

 

 

2) 크롤러 소스 타입을 선택합니다.

 

 

3) 포함 경로에 csv에서 parquet 형식으로 변환한 s3 저장 경로를 입력합니다.

 

 

4) 스토어 추가는 아니요를 선택합니다.

 

 

5) IAM 역할 AWSGlueServiceRole-admin을 선택합니다.

 

 

6) 온디맨드 실행을 선택합니다.

 

 

7) shopping 데이터베이스를 선택합니다.

 

 

8) 최종적인 크롤러 정보를 확인합니다.

 

 

9) parquet 데이터를 크롤링할 shopping parquet crawler이 생성되었습니다. 크롤러 실행을 해서 AWS Glue에 테이블을 생성합니다.

 

 

10) AWS Glue 테이블을 확인해보면 Parquet 테이블이 추가되어 있는 것을 확인할 수 있습니다.

 

 

4.Amazon Athena를 사용하여 데이터 분석

  • Amazon Athena는 표준 SQL을 사용해 Amazon S3에 저장된 데이터를 간편하게 분석할 수 있는 대화식 쿼리 서비스입니다.
  • Athena를 사용하여 CSV 데이터를 쿼리할 수 있습니다. 하지만 Parquet 파일 형식을 사용하면 데이터를 쿼리 하는 데 필요한 시간과 비용을 획기적으로 줄일 수 있습니다. 

1) Athena을 검색하여 해당 서비스로 이동합니다.

 

  • Athena 서비스로 이동하면 데이터베이스에 2개의 테이블이 존재합니다.
  • smart_shopping_data테이블은 csv 형태의 테이블이고, parquet테이블은 csv -> parquet 변형된 테이블입니다.

 

 

2) 쿼리를 실행하여 데이터를 분석합니다.

 

  • 편집샵에서 'jil sander'라는 브랜드를 50% 할인하는 곳을 검색합니다.
  • 결과 다운로드를 해보면 S3에 저장된 4개의 CSV 파일의 통합되어서 저장되어 있는 것을 확인할 수 있습니다.

 

 

3) CSV 파일 확인합니다.

 

 

마무리

이번 실습으로 DataLake를 구축해보는 실습을 경험해보면서 DataLake의 작업 흐름을 알 수 있어서 좋았습니다. 다음에 기회가 되면 Amazon QuickSight를 활용하여 데이터 시각화까지 해보면 좋을것같습니다. 감사합니다.