cloud bee

S3와 EMR을 활용하여 데이터 변환작업 구성 본문

AWS/data

S3와 EMR을 활용하여 데이터 변환작업 구성

who you 2023. 1. 10. 23:22

EMR과 S3를 활용하여 amazon web service console 환경에서 해당 아키텍처를 구축해 보도록 할 것이다.

 

아키텍처 이미지

오늘 구현할 아키텍쳐이다.

 

 

블로그 과정에서 필요로 하는 서비스 목록

✅  Amazon EMR

✅  Amazon S3

✅  IAM ( Identity and Access Management )

 

블로그 실습 조건

amazon console account

region: ap-northeast-2( 서울 리전 )

 

Amazon Web Service Steps

Step1. Create default vpc

Step2. Create Key Pair & Security Group

Step3. Create S3 Bucket

Step4. Create a Role in Identity and Access Management

Step5. Create EMR Cluster

Step6. Advanced Settings

 

Step1. Create default vpc

VPC console Link!: https://console.aws.amazon.com/vpc

 

https://console.aws.amazon.com/vpc/home

 

console.aws.amazon.com

우선 기본 VPC를 생성해 주도록 한다.

VPC > VPC > 기본 VPC 생성

기본 VPC 생성

 

라우팅 테이블에 모든 서브넷을 연결한다.

라우팅 테이블 설정

 

Step2. Create Key pair & Security Group

다음 절차에 따라서 키페어를 하나 생성해 주도록 한다.

EC2 > 키 페어 > 키 페어 생성

키페어 생성하기

 

이번 실습 같은 경우 퍼블릭으로 진행하기 때문에 보안그룹은 모든 트래픽을 허용해 주도록 한다.

https://docs.aws.amazon.com/ko_kr/emr/latest/ManagementGuide/emr-man-sec-groups.html

 

Amazon EMR에서 관리하는 보안 그룹과 협력하기 - Amazon EMR

2020년 12월 이전에 ElasticMapReduce -master 보안 그룹에는 모든 소스의 포트 22에 대한 인바운드 트래픽을 허용하는 사전 구성된 규칙이 있었습니다. 이 규칙은 마스터 노드에 대한 초기 SSH 연결을 단

docs.aws.amazon.com

 

EC2 > 보안 그룹 > 보안 그룹 생성에 들어가 준다.

아래 사진과 같이 보안그룹을 하나 생성해 준다.

보안그룹 설정

 

Step3. Create S3 Bucket

https://console.aws.amazon.com/s3에 접속하여 S3를 하나 생성해 주도록 한다.

Amazon S3 > 버킷 >  버킷 만들기에서 다음을 생성해 준다.

버킷 생성

이후 해당 버킷에 input, data, output이라는 폴더를 하나씩 생성해 주어야 한다.

input 폴더 생성

input 폴더에는 다음을 업로드한다.

tripdata.csv
1.43MB
data 폴더 생성

data 폴더에는 다음을 업로드한다.

 

sales.csv
1.19MB
output 생성

 

Step4. Create a Role in Identity and Access Management

https://console.aws.amazon.com/iam에 접속하여 EMR 관련 역할을 하나 생성해 주도록 한다.

 

IAM > 역할 > 역할 생성에 접속한다.

신뢰할 수 있는 엔터티에서 AWS서비스를 선택하고, EMR을 선택한다.

역할 만들기
AWS 서비스 선택하기

 

 

해당 EMR 역할 이름은 EMR_role로 설정한다.

EMR 역할 생성하기

 

혹시 모르니 다음과 같은 정책도 연결해 준다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::yourbucket",
                "arn:aws:s3:::yourbucket/*"
            ]
        }
    ]
}

 

 

Step5. Create EMR Cluster

이제 emr cluster를 생성해 주도록 한다.

https://console.aws.amazon.com/emr에 접속하여 emr 클러스터를 하나 생성해 주도록 한다.

EMR 클러스터 생성

 

name: emr-cluster

Application: PySpark

운영 체제: Amazon Linux 릴리스

EMR 클러스터 이름 설정

 

프라이머리, 코어 등 전부 인스턴스 타입을 비용 절감을 위해 c4.large로 지정해 준다.

EMR 클러스터 구성

 

Step6. Advanced Settings

ssh를 통해 emr cluster에 접속해 준다.

vim 편집기를 열어 spark-etl.py를 작성한다.

import sys
from datetime import datetime

from pyspark.sql import SparkSession
from pyspark.sql.functions import *

if __name__ == "__main__":

    print(len(sys.argv))
    if (len(sys.argv) != 3):
        print("Usage: spark-etl [input-folder] [output-folder]")
        sys.exit(0)

    spark = SparkSession\
        .builder\
        .appName("SparkETL")\
        .getOrCreate()

    nyTaxi = spark.read.option("inferSchema", "true").option("header", "true").csv(sys.argv[1])

    updatedNYTaxi = nyTaxi.withColumn("current_date", lit(datetime.now()))

    updatedNYTaxi.printSchema()

    print(updatedNYTaxi.show())

    print("Total number of records: " + str(updatedNYTaxi.count()))

    updatedNYTaxi.write.parquet(sys.argv[2])

 

이후 parquet 형식으로 데이터를 작성해 주도록 한다.

spark-submit spark-etl.py s3://<YOUR-BUCKET>/input/ s3://<YOUR-BUCKET>/output

 

몇 분 정도 기다리고, output 폴더를 확인하면 parquet 형식으로 변환된 것을 확인할 수 있다.

'AWS > data' 카테고리의 다른 글

sqs + cloudwatch로 안전하게 인스턴스 관리하기  (0) 2023.01.09
AWS cloudwatch-agent로 로깅하기  (0) 2023.01.08
csv data athena 쿼리  (0) 2023.01.07
kinesis data analyfice flink 실습  (0) 2022.10.24
Comments