[Hands On]Glue를 통한 Csv to Parquet 파일 변환하기

<사전 준비>

[Hands On]S3 트리거에 의한 Lambda의 압축 파일 처리

위 링크된 페이지의 Lambda 실습을 통해 S3에 적재된 csv 파일에 대한 Parquet 변환 작업을 해봅니다.

< Glue Crawler로 CSV 파일 스키마 생성>
  • 크롤러를 사용하여 테이블로 AWS Glue Data Catalog를 채웁니다.
  • ETL 작업은 원본 및 대상 Data Catalog 테이블에 지정된 데이터 스토어에서 읽기와 쓰기를 수행합니다.
  • Aws Management Console에서 Aws Glue > Crawler 메뉴 진입
  • 크롤러 추가 > 크롤러 이름 입력
  • Crawler Source Type는 “Data Stores” 선택
  • Repeat crawls of S3 data stores는 “Crawl all folders” 선택 > 다음
  • 데이터 스토어 추가 > 데이터 스토어 선택은 “S3” > 다음위치의 데이터 크롤링은 “내 계정의 지정된 경로” 선택 > 포함경로는 Lambda실습시 csv가 업로드된 버킷의 폴더를 선택> 다른 데이터 스토어 추가는 “아니요” 선택 > 다음
  • IAM 역할 선택 > IAM 역할 생성 > 생성할 IAM 역할 이름 입력 > 다음
  • IAM 메뉴 > 역할 > 생성한 IAM 역할 조회 > 권한추가 > 인라인 정책 추가 > 정책검토 > 추가
  • 크롤러의 출력 구성 > 데이터베이스 > 데이터베이스 추가 버튼 클릭 > 생성할 “데이터베이스 이름” 입력 > 생성
  • 빈도(실행 주기 선택) > 온디맨드 실행 > 다음
  • 구성옵션(선택사항) > “변경 사항을 무시하고 데이터 카탈로그에서 테이블 업데이트 안 함” 선택 (csv 원본 데이터의 변환오류로 인해 카탈로그 테이블의 역직렬화 라이브러리를 수동으로 변경해주기 때문에 크롤러로 스키마 생성시 해당 옵션 선택해 줌) > 다음 > 마침
  • 크롤러 목록에서 생성해 준 크롤러 선택 > 크롤러 실행 > 테이블 추가됨 확인
  • AWS Glue > 데이터베이스 메뉴 진입
  • 크롤러 작업시 생성해 준 데이터베이스 선택 > 테이블 정보 확인 > 크롤링 된 테이블 스키마 확인 가능

주의!

이 상태로 Athena에서 조회해보면 원본 파일이 csv 파일인 이유로 기본 역직렬화 라이브러리인 org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe 로 인해 텍스트가 깨지고 숫자형식 컬럼이 정상적으로 조회되어지지 않는 현상 발생

  • AWS Glue > 데이터 카탈로그 > 데이터베이스 > 테이블(크롤링한 테이블명 선택)
  • 테이블 편집 버튼 클릭 > Serde직렬화라이브러리를 org.apache.hadoop.hive.serde2.OpenCSVSerde로 변경 > 적용

Athena에서 조회해 보면 정상적으로 보이는 것을 확인 가능하다

< Glue Studio로 Csv to Parquet ETL 작업 구성 >
  • AWS Glue Studio 메뉴 진입 > View Jobs
  • Create Job > Visual with a source and target 선택 > Source 는 Amazon S3 선택 > Target은 Amazon S3 선택 > Create 버튼 클릭
  • Source S3 버킷 아이콘 클릭 > Data Source Properties S3 설정 > S3 source type은 “Data Catalog table” 선택
  • Database는 위에 생성해준 데이터베이스 선택 > Table은 위에 크롤링 해서 생성된 테이블명 선택
  • ApplyMapping단계에서 Souce Schema와 Target Schema의 매핑 컬럼정보를 설정 가능
  • Target S3 버킷 아이콘 클릭 > Data Source Properties S3 설정 
  • Format은 “Parquet” 선택  Compression Type은 “Snappy” 선택
  •  S3 Target Location은 생성되는  파일 업로드할 S3 버킷내 폴더 경로를 설정(source 버킷과 동일한 버킷에서 업로드 폴더만 새롭게 생성하여 테스트 진행함)
  • Add a Partition Key 버튼 클릭 > “strd_yymm” 컬럼 선택(추후 분석시 성능에 영향을 미칠 수 있는 컬럼을 판단하여 파티션 키로 생성하는 것을 권장)
  •  Job Details 선택 > IAM Role은 크롤러 테스트시 생성한 IAM Role로 선택(Target S3 버킷을 새로 생성해준 경우 그에 맞는 정책 추가)
  • Number of retries은 “0” 입력 
  • Job timeout (minutes)은 “5” 입력
  • Script path, Spark UI logs path, Temporary path 은 자신이 생성한 버킷의 폴더들을 생성하여 선택(테스트 후 자원 삭제등의 편의를 위해)
  • Save 버튼 클릭 > Run 버튼 클릭
  • AWS Glue Studio 화면 상단 메뉴의 Run Details 선택 > Run 실행되고 있는 상태 및 결과 확인 가능
< Glue ETL 결과 S3 확인 >
  • S3 메뉴 진입
  • Glue ETL 작업시 Target 대상 S3 버킷의 폴더로 진입
  • 파티셔닝 된 폴더들이 생성되었는지 확인
  • ETL 작업으로 생성된 snnapy.parquet 파일 확인가능
< Glue Crawler로 Parquet 파일 스키마 생성>
  • Aws Glue > Crawler 메뉴 진입
  • 크롤러 추가 > 크롤러 이름 입력 > 다음
  • Crawler Source Type는 “Data Stores” 선택 > Repeat crawls of S3 data stores는 “Crawl all folders” 선택
  • 데이터 스토어 추가 > 데이터 스토어 선택은 “S3”
  • 다음위치의 데이터 크롤링은 “내 계정의 지정된 경로” 선택 > 포함경로는 ETL작업으로 인해 parquet 파일이 업로드 된 버킷내 폴더를 선택
  • IAM 역할 선택 > IAM 역할 생성 > 기존 IAM 역할 선택 > 위에서 생성해준 IAM 역할 선택 > 다음
  • 빈도(실행 주기 선택) > 온디맨드 실행 > 다음
  • 크롤러 목록에서 생성해 준 크롤러 선택 > 크롤러 실행 > 테이블 추가됨 확인
  • AWS Glue > 데이터베이스 메뉴 진입
  • 크롤러 작업시 생성해 준 데이터베이스 선택 > 테이블 정보 확인
  • 크롤링 된 테이블 스키마 확인 가능
  • Athena에서 정상 조회됨 확인