띵유로그

[데이터 분석 파이프라인] EMR 구조와 실행 본문

DataEngineering

[데이터 분석 파이프라인] EMR 구조와 실행

띵유 2022. 2. 12. 00:30
반응형

EMR은 AWS에서 아파치 하둡, 스파크와 같은 빅데이터 프레임워크를 쉽게 실행할 수 있도록 관리해주는 클러스터 플랫폼입니다. 클러스터 플랫폼이다보니 scale- in/out이 쉽습니다.

 

아래 그림처럼 Master Node와 core node, task node로 구성되어있습니다.

1. Master Node

Master Node는 이름에서 유추할 수 있듯이 클러스터를 관리합니다.
노드들 사이에 작업을 분배하고 정상종료되었는지 모니터링합니다. 

2. Core Node와 TaskNode

Core Node와 Task Node는 Master의 Worker노드입니다.

둘 다 하는 일은 비슷하지만, Core Node는 HDFS(디스크)를 가지고 있지만 Task Node는 HDFS가 없이 컴퓨팅만을 담당합니다.

따라서 task node는 scale in/out이 매우 편리합니다. core node도 scale in/out을 할 수 있지만, scale in시에 만약 1개의 core node만 사용하도록 시도한다면, 이미 working 중이기때문에 scale in 이 안될 수 있다고 합니다.
(추측컨데, scale-in/out 과정에서 HDFS 에 이미 쓰여진 데이터들을 재분배 하는 과정이 필요하기 때문일것같습니다.)


참고)
* 과거에는 master node와 core node가 쌍으로 존재해야 운영가능했습니다.
 그런데 최근 EMR 자체에서 zookeeper를 지원하기때문에 master node 하나만으로도 구성이 가능하다고 합니다.

 

*HDFS 대신 S3를 사용했을 떄의 장점.

- storage와 computing가 decoupling  (저장과 computing이 의존관계 없이 독립적으로 운영 가능)

    -> ex. 어제 수집한 내용을 오늘 다시 분석 가능 / 운영중에 클러스터 추가, 제거 가능 / 여러개의 Cluster 에서 데이터 읽을 수 있음.
- HDFS의 용량 관리의 어려움 해결 가능( S3는 자동으로 용량up 해주기 때문 )

 

이제 EMR 클러스터를 생성해보겠습니다.

EMR 클러스터 생성

1. 클러스터 생성버튼을 누르고 고급옵션 탭으로 이동합니다. (저렴하게 구성하기위해..)

2. 소프트웨어 선택

위와 같이 체크해줍니다.

* Ganglia : 클러스터 상태 모니터링 툴
* Zeppelin : 웹환경에서 커맨드를 날려서  스파크 잡을 실행

* Pig : 하둡의 대용량 데이터 처리를 위한 고급언어
         (맵리듀스가 처리하기 어려운 기능을 사용하기 좋음 - 정렬, Dataset등..)
* Livy : 다른 어플리케이션에서 스파크 잡을 던져서 실행.

* Hive : ETL/데이터웨어하우징 툴. 자체쿼리인 HiveQL 을 실행할수있게 해줌. 내부에서 맵리듀스 job으로 변환되어 실행.

 

3. Glue

 

 4.Cluster 설정

r5d 를 선택해서 SSD를 사용하도록 합니다.
참고로 i로 시작하는 인스턴스유형도 I/O 작업에 좀 더 특화되어있어 데이터 작업에 좋다고 합니다. 

worker 노드는 job 수행에 있어 경쟁을 피하기 위해 홀수로 구성하는 것이 좋습니다.

다음으로 구매옵션입니다.

온디맨드는 무조건 죽으면 안되는 서비스에서 사용합니다. 정해진 가격으로 시간단위로 요금이 책정되며, 할당이 되지 않을 경우가 없습니다.

스팟 옵션은 온디맨드로 할당된 리소스 이외에 남는 아이들을 사용합니다. 따라서 가격이 더 저렴한 편입니다.

인스턴스가 중지 될 수도 있고 이때는 2분전에 알림을 제공한다고 합니다.
스팟 옆 i 버튼에 마우스를 올려두면 서브넷별 가격이 나와있습니다. 

aws 공식문서를 찾아보니 문서 작성시점 기준으로 미국동부(오하이오)리전에서 r42.xlarge의 중단빈도는 5%미만이라고 합니다. 
* 참고로 스팟인스턴스를 사용한다면, 인스턴스가 중단될 경우 spark 에서 재처리해야할 수 있기때문에 데이터 양을 줄이려면 너무 많은 셔플은 피하는게 좋습니다. 

스팟 인스턴스에 대한 설명이 자세히 적혀있어 주소를 남겨둡니다.

https://aws.amazon.com/ko/blogs/korea/best-practices-for-running-apache-spark-applications-using-amazon-ec2-spot-instances-with-amazon-emr/

 

 5. 클러스터 이름과 태그 설정

해당 클러스터가 돌면서 만들어지는 로그는 로깅 S3폴더에 저장되니 나중에 활용하면됩니다.

 

6. 키페어 설정

미리 만들어둔 키페어가 있다면 선택합니다. 

 

7. 클러스터 실행확인 

클러스터가 시작된 것을 확인하고 선택한 어플리케이션도 잘 구성되어있는지 확인합니다.

아래 나와있는 public 주소를 web 페이지에 복붙하면 각 어플리케이션을 확인할 수 있습니다.

보안그룹에서 포트를 안열어준 경우 안열리니 꼭 열어줘야합니다.

 

8. 포트 열기

' 클러스터 - 요약 - 보안 및 액세스 - 마스터보안그룹 ' 으로 접근하면 더 빨리 확인할 수 있습니다.

저는 여러 어플리케이션을 띄울 것이기 때문에 모든 TCP로 설정하고 소스는 내 IP 로 설정했습니다.


9. 확인
url 복사 후 아래와 같이 잘 뜨는지 확인합니다.

 

참고) 

단계 : 클러스터 구성 이후 드라이버 설치, 특정 job 실행 등 추가 작업이 필요한 경우 단계 구성 가능.

부트스트랩 작업 : 클러스터 구성 전 EC2 에 실행할 스크립트 or 작업이 있는 경우 활용가능

반응형
Comments