목숨건데이터엔지니어
foot-data-engineering
목숨건데이터엔지니어
전체 방문자
오늘
어제
  • 분류 전체보기 (54)
    • 취업과 기본기 잡기 (11)
      • Python (2)
      • 자료구조 (1)
      • 알고리즘 (1)
      • 운영체제 (2)
      • 네크워크 (1)
      • 데이터베이스 (1)
      • SQL (1)
      • Linux (1)
      • Docker (1)
    • 더 나은 엔지니어가 되기위해 (11)
      • (AWS) api-gateway, kinesis (1)
      • (AWS) MWAA (1)
      • Apache Spark (1)
      • Apache Airflow (1)
      • Apache Kafka (1)
      • Apache Flink (1)
      • Hadoop (1)
      • 알쓸신잡 (4)
    • 데이터와 손잡기 (6)
      • 머신러닝(sklearn) (1)
      • 딥러닝 (3)
      • 오디오 처리 (1)
      • 데이터 시각화 (1)
    • 코딩테스트 잡기 (1)
      • [BOJ] 문제풀이 (0)
      • [프로그래머스] 문제풀이 (0)
      • [HackerRank] SQL (0)
      • 코딩테스트 후기 (1)
    • 토이 프로젝트 (4)
    • 각종 기술 삽질하며 익히기 - onpremise (11)
    • 학습과정 잡동사니 (7)
      • 오답노트 (7)
    • 평소 궁금증 파헤치기 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 아직 한참 부족하고 부끄러운 나의 github 링크

인기 글

태그

  • #데이터수집
  • jupyter
  • spark with elasticsearch
  • kafka
  • spark on centos7
  • filebeat
  • Kinesis
  • Elk
  • EMR
  • Tableau
  • 멀티 프로그래밍
  • ES
  • 쓰레드와 프로세스
  • 프로세스
  • 네트워크 스위치
  • spark to mysql
  • django
  • flink
  • aws builders online series
  • #데이터 수집 절차
  • MWAA
  • CTAS
  • LIVY
  • 도커파일
  • 서비쿼리
  • Api-Gateway
  • logstash
  • spark
  • scikit-learn
  • 파이썬

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
목숨건데이터엔지니어

foot-data-engineering

[TLC trips record analysis 1편] - EMR, AWS Aurora mysql, Glue 활용 (데분을 위한 데엔)
토이 프로젝트

[TLC trips record analysis 1편] - EMR, AWS Aurora mysql, Glue 활용 (데분을 위한 데엔)

2022. 2. 9. 03:15

📃 프로젝트 설명

TLC trips record를 분석하고자한다.

https://www1.nyc.gov/site/tlc/about/tlc-trip-record-data.page

 

TLC Trip Record Data - TLC

TLC Trip Record Data The yellow and green taxi trip records include fields capturing pick-up and drop-off dates/times, pick-up and drop-off locations, trip distances, itemized fares, rate types, payment types, and driver-reported passenger counts. The data

www1.nyc.gov

데이터에 대한 자세한 내용은 위 링크로 대신한다.

 

클라우드 환경에서 TLC trips taxi data의 택시비를 예측하기 위해 데이터 분석 파이프라인을 구축하는 토이 프로젝트이다.

 

1편, 2편, 3편으로 나뉘며 분석을 처리하는 과정을 의식의 흐름대로 기록을 남길 것이다.

raw data를 EDA 진행하는 부분은 상당한 시간이 소요되기에 디테일한 부분은 생략할 것이며

aws 서비스를 활용하는데 포커스를 맞췄다.

1편은 raw data를 spark batch processing으로 dw와 dm으로 사용하는 aurora mysql에 적재,

2편은 ML model을 만들기 전 대용량 데이터란 가정 하에 데이터를 살펴 본 Tool을 설명,

3편은 MWAA를 통해 needs가 필요한 부분을 workflow로 관리하는 것이 목표이다.

 

이 프로젝트의 특징은 EMR에서 hive table을 사용하여 S3에 적재하는 방식을 사용하여 EMR가동시간을 줄이고 사용자 친화적인 Tool로 분석환경을 구성하고자 하였다.


 

1) Aurora mysql (RDS) 생성

1-1) aws rds 탭에서 설정을 진행한다 지속적으로 운영할 데이터가 아니기에 개발용으로 형성하고 외부접속 툴을 사용하기위해 퍼블릭 엑세스로 지정해주었다.

-데이터베이스 생성 클릭

-사용하고자하는 엔진 클릭

-접속을 위한 마스터사용자 이름 암호 설정

-외부 접속 tool을 사용하기위해 퍼블릭 엑세스를 "예"로 설정 후 최하단의 생성 클릭

-생성시 5분정도 걸리면 인스턴스가 두개 생성되는데 첫번째 인스턴스는 main class 이고 나중에 replica를 확장 관리해 주는 인스턴스이고 서버가 따로 뜨지는 않는다. 두번째 인스턴스가 내가 사용할 mysql인스턴스 이다. 다 생성이 완료 되면 밑에 엔드포인트가 생기는데 그 엔드포인트를 사용해 외부에서 접속을 진행한다.

-다음으로 외부에서 접속하기 위해 서버인스턴스에 인바운드 규칙에 들어가 현 ip로 접속이가능하도록 규칙을 편집해준다. 

 

 

1-2) 외부접속 툴 사용 

-필자는 위 db접속용 client로 mysql workbench를 사용한다. 현업자 이면 dataGrip을 추천한다.

-위 클라이언트로 접속해 카피한 엔드포인트로 connection을 생성해준다.

1-3) dw, dm 데이터베이스를 생성을 해준다. 다음과 같이 생성한 이유는 아래링크를 참고하면 이해가 쉽다.

https://blog.lael.be/post/917

 

[MySQL/MariaDB] utf8mb4 언어셋 소개 및 표현범위.

기술이 매우 빠르게 발전한다. 배워도 배워도 계속 배워야 한다.   최근에 라엘이가 앞으로 100년동안은 나타나지 않을 것이라고 예상했던, 4 Byte UTF-8 문자열을 보고 여러 깨닳은 바가 있었고

blog.lael.be

 

2) EMR 구성

emr에서 사용할 notebook으로는 제플린과, 주피터는 상황에 맞게 사용자 친화적으로 구성해주면 된다. 필자는 python이 주언어이고 분석을 편리하게 하기위해 주피터를 사용할 것이다.

 

2-1) emr 클러스터 생성을 클릭해준다.

2-2) 위 사진은 기본 최적화 옵션을 제공하지만 나는 "엔지니어" 이기에 좀더 최적화된 환경을 위해 고급 옵션에서 설정을 진행한다. emr 릴리즈 버전은 6버전도 존재하는데 6버전은 docker구성을 하기위한 환경을 제공한다. k8s는 아직 학습이 부족해 진행을 하지 않는다. Livy는 외부(주피터)에서 spark job을 던져주기 위해 사용하며 Ganglia는 클러스터를 모니터링 하기위해 구성하였다.

2-3) 클러스터에서 코어노드는 hdfs를 가지고있고 작업노드는 hdfs를 가지지 않는다. spark는 메모리기반 이기에 인스턴스로 r유형을 선택했다. 인스턴스 수는 경쟁이 붙지않기위해 워커노드들을 홀수로 유지시키는 것이 좋으며 구매옵션에는 스팟으로 설정하여 컴퓨팅이 유휴시에 사용자에게 bidding을 붙여 가격을 저렴하게 사용할 수 있도록 설정하였다.

2-4) 클러스터 이름을 설정하고 태그는 모든서비스를 만들때 비용관리를 위해 추가하자.

2-5) 키페어는 emr을 생성할 때 기본적으로 ec2인스턴스가 위 설정값만큼 생기는데 이에 대한 접속 키페어를 선택해주고 클러스터를 생성한다. 생성은 10분정도 소요된다.

2-6) 클러스터를 통해 aurora db에 연동하기위해서는 spark가 java기반이기에 jdbc설정을 진행 해주어야 한다. 클러스터에 단계를 추가하여 다음 배쉬 설정을 진행한다.

2-7) 위에 컴퓨팅에 관련된 설정을 마치고 주피터 workspace 설정을 진행한다 노트북 탭에서 위에서 만든 클러스터를 지정하고 주피터 노트북에서 저장할 파일들의 위치를 s3에 지정할 수도 있다. 더 나아가 현업에서 git reposity에 연결하여 관리해줄수도 있다. 여기서 주의할점은 노트북은 aws root사용자가 생성하면 접속이 실패하는 경우가 생긴다. 반드시 iam사용자로 만들어줘야한다.

(여기서 많은 시간의 노가다 작업을 거쳤다..)

2-8) 위에 노트북을 만들고 열기를 클릭하면 다음과 같이 workspace가 형성되고 사용법은 사용자 친화적으로 잘 구성되어있다.

 

3) jupyter on emr 로 데이터 preprocessing 후 RDS 적재 

  및 GLUE 메타데이터 생성(glue crawler와 DDL로 두가지 방안으로)

  

3-1) 소스코드 링크

 

jupyter on emr 로 데이터 preprocessing 후 RDS 적재 링크 = https://github.com/industrial-engineering-person/tlc_trips_analysis_on_aws/blob/main/notebook/TLC_analysis.ipynb

 

GitHub - industrial-engineering-person/tlc_trips_analysis_on_aws

Contribute to industrial-engineering-person/tlc_trips_analysis_on_aws development by creating an account on GitHub.

github.com

 

3-2) spark job들이 어떻게 실행되고 있는지는 spark.describe를 이용하면되고 모니터링은 emr설정에서 했던 ganglia로 가능하다. 

3-3) 데이터 적재 확인

 

3-4) 그러나 데이터 엔지니어는 무엇인가 데이터에 대한 관리를 이렇게만 하면 되겠는가? 데이터 종류가 방대해지고 종류도 많아지면 일일이 데이터를 언제 찾아보고 있을까? 그러므로 메타데이터를관리하기 위해 GLUE 를 사용한다. glue Data Catalog는 DDL로 만들거나 UI환경에서 click으로 수작업하거나 Athena에서도 연결되어 있어서 DDL로 가능하다. 그리고 간단하게 aws glue crawler로도 가능하다. 필자는 한 테이블만 aws에 익숙해지기위해 S3에 있는 데이터를 위 서비스로 생성 할 것이다. 이렇게 data catolog를 만들어 놓으면 Athena, emr, redshift 환경에서 접근해서 분석이 가능하다.

 

먼저 glue에 catalog를 저장 할 데이터베이스를 추가해준다.

 

3-5) 데이터를 긁어올 크롤러를 생성한다.

3-6) 크롤러의 추가 정보설정을 쭉 입력한다.

이하 생략

최종으로 만든 크롤러를 실행시킨다.

3-7) 크롤러를 실행시킨 곳의 raw data의 메타데이터를 다음과 같이 확인할 수 있다.

 

3-8) 다음은 실버데이터를 DDL로 glue catalog를 형성하는 방법이다. 그리고 차후 태블로로 시각화도 해보기 위해 glod데이터도 생성한다.(추가적으로 emr에 pig를 enable해서 생성한다.)

=> 이와 같이 Hive table을 만들어 데이터를 넣는것이 파케이로 저장하는 것보다 10배 정도 빠르다

소스파일링크 = https://github.com/industrial-engineering-person/tlc_trips_analysis_on_aws/blob/main/notebook/TLC_analysis_glue_hive.ipynb

 

GitHub - industrial-engineering-person/tlc_trips_analysis_on_aws

Contribute to industrial-engineering-person/tlc_trips_analysis_on_aws development by creating an account on GitHub.

github.com

 

위 소스파일의 코드를 진행하면 다음과 같이 glue table이 생성되고

 

EMR 플랫폼 기반의 Spark 워크로드 실행 최적화 방안은 다음 링크를 참조했다.

유툽링크 https://www.youtube.com/watch?v=hPvBst9TPlI&t=574s

파티션 설정에서 요일을 파티션으로 설정하여 다음과 같이 확인할 수 있다.

파일보기를 누르면 s3에 지정된 장소에 데이터가 저장되어 있음을 알 수 있다.

mysql에서도 소스코드 마지막에 만든 glod 데이터가 정상적으로 확인 된다.

 


이상으로 1편을 마치도록하고 2편의 중점은 대용량데이터를 살펴볼 때 사용한 aws서비스를 설명 해볼 것이다.

 

'토이 프로젝트' 카테고리의 다른 글

[TLC trips record analysis 3편] - EMR을 활용한 TLC taxi data 분석 및 MWAA로 워크플로우 관리  (0) 2022.02.18
[TLC trips record analysis 2편] - Aurora mysql에 저장한 데이터 살펴보기(Presto, Tableau, Athena)  (0) 2022.02.09
Api-Gateway, Kinesis, S3 데이터 전송하기(데이터수집 on aws)  (0) 2022.02.06
    '토이 프로젝트' 카테고리의 다른 글
    • [TLC trips record analysis 3편] - EMR을 활용한 TLC taxi data 분석 및 MWAA로 워크플로우 관리
    • [TLC trips record analysis 2편] - Aurora mysql에 저장한 데이터 살펴보기(Presto, Tableau, Athena)
    • Api-Gateway, Kinesis, S3 데이터 전송하기(데이터수집 on aws)
    목숨건데이터엔지니어
    목숨건데이터엔지니어

    티스토리툴바