일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 클러스터
- java
- 레디스
- 로그인
- 머신러닝
- fastcampus
- Mac
- 설정
- vue
- Jenkins
- Kafka
- 자동
- 간단
- spring
- Zeppelin
- Docker
- Cluster
- 젠킨스
- login
- config
- gradle
- aws
- ec2
- 예제
- SpringBoot
- redash
- EMR
- Redis
- 자바
- hive
- Today
- Total
코알못
[AWS] EMR(hadoop) - Step Function 이용해보자! 본문
EMR Step Function 은 내가 원하는 스크립트를 제출할 수 있는 기능이며 서버리스 서비스이다.
클러스터 생성시점 또는 생성후 단계탭에서 제출 가능하며, 쉽게 이용 가능하다.
기존에 배치의 경우 oozie 를 사용하였으나 step Function 으로도 배치 제출이 가능하여 이용해 보았으며 그 내용은 아래와 같다.
- 소요시간 : oozie, step 동일
- 한글 처리 : 온프레미스 환경에서 설치한 hadoop의 oozie 의 경우 한글 이슈가 없었으나 EMR oozie 이용시 한글 사용에 대한 이슈가 있었다. (hue 에서 정상적으로 저장, 읽기 가능하나 배치 실행 시키면 한글을 인식하지 못했다.)
그러나 step 사용시에는 한글에 대한 이슈가 발생하지 않았다.
- 관리 측면 : step 이 oozie보다 관리 측면에서 더 좋다고 판단했다. 그이유는 아래와 같다.
- oozie 사용시 oozie 서비스에 대한 관리 + 스케쥴링 정보를 DB 로 관리하고 있어 DB 를 추가로 관리 해야함, 그러나 step 사용시에는 serverless 이므로 관리해야 할 부분이 없음
- oozie 사용시 클러스터 기동도 사실상 배치이므로 (일정한 시간에 기동/중단) oozie 배치까지 두벌로 관리해야함, 그러나 step 사용시에는 클러스터 기동 시점이 곧 배치 시작 시점이므로 클러스터 배치만 관리하면 된다.
위와 같은 내용으로 step 을 사용하려고 했으며, 이는 저자의 판단이니 참고만 하고 각자 상황과 서비스에 맞게 더 나은 서비스를 선택하면 된다.
이제 step 을 이용하기 위한 두가지 기본 입력값에 대해 알아본다.
1. JAR 위치
- EMR 기본 jar 파일로 클러스터 내 명령 수행시 사용 : command-runner.jar (경로 안적어도 된다.)
- 클러스터 아닌 외부에서 명령 수행시 사용 : s3://<region>.elasticmapreduce/libs/script-runner/script-runner.jar
command-runner.jar 에서 제공하는 도구중 'hive-script' 는 하이브 쿼리 제출시 사용하는 도구이며 그 외 도구는 아래 공식 페이지에서 확인 하여 사용하면 된다.
- https://docs.aws.amazon.com/ko_kr/emr/latest/ReleaseGuide/emr-commandrunner.html
2. 인수
인수의 경우 command-runner 이라면 제공하는 도구를 사용하여 아래와 같은 명령어를 입력하면 된다.
ex) hive-script --run-hive-script --hive-versions 3.1.2 --args -f s3://.../test.hql --hivevar DT=20220427
만약 script-runner.jar 이라면 스크립트 위치를 입력하면 된다.
ex) s3://... or localfile Path
위에 정리한 글만 보면 대충 이해는 되나 예시를 보지 않으면 사실 정확하게 알기 어려우므로 실습을 통해 알아보자!
실행할 하이브 쿼리는 아래와 같다.
insert overwrite directory 's3a://test/user_favority_db_${DT}'
row format delimited
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
select
*
from test;
이제 두가지 유형별로 실습 해본다!
1. command-runner.jar
단계 추가를 눌러 추가한다.
- JAR 위치 (명칭만 적으면 된다.) : command-runner.jar
- 인수 (실행할 도구 사용하여 명령어 제출) : hive-script --run-hive-script --hive-versions 3.1.2 --args -f s3://.../test.hql --hivevar DT=20220427
추가 되었음을 확인 할 수 있으며
완료시 로그 확인 및 경과 시간 확인 가능하다.
이제 정상적으로 만들어졌는지 확인 해보면 정상적으로 만들어졌으며
2. script-runner.jar
단계 제출하기를 눌러 아래와 같이 입력한다.
- JAR 위치 (서울 리전) : s3://ap-northeast-2.elasticmapreduce/libs/script-runner/script-runner.jar
- 인수 (실행할 스크립트) : s3://emr-hong-script/hive/test/test.sh
제출할 스크립트(test.sh)는 아래와 같다.
date2=`date -d '1 days ago' +%Y%m%d`
echo $date2
hive-script --run-hive-script --hive-versions 3.1.2 --args -f s3://.../test.hql --hivevar DT=$date2
스크립트 안에 사용된 hive 쿼리(test.hql)는 아래와 같다.
insert overwrite directory 's3a://test/user_favority_db_${DT}'
row format delimited
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
select
*
from test;
위와 같이 입력시 실제로 서버에서 실행되는 명령어는 아래와 같다.
1. s3 > 로컬에 script-runner.jar 이동
2. hadoop jar /mnt/var/lib/hadoop/steps/../script-runner.jar s3://../test.sh
제출 완료시 step 제출된 부분은 아래와 같이 확인 가능하다.
제출하고 스크립트 실행이 완료되면 아래와 같이 소요시간과 로그가 남는다. 실패해도 로그는 남으니 오류시 쉽게 트러블 슈팅이 가능하다.
실제로 s3 에 'user_favority_db_어제날짜' 로 파일 생성되었는지 확인 한다.
정상적으로 생성 되었으며
데이터도 정상적으로 만들어졌다.
'BIG DATA' 카테고리의 다른 글
filebeat에서 다중 logstash 서버로 로그 이동시 한대 재기동시? (0) | 2022.04.29 |
---|---|
[AWS] EMR(hadoop) - 클러스터 고정 IP 지정 해보자! (0) | 2022.04.28 |
[AWS] 서비스 private 로 구성시 다른 서비스 연결 방법 (0) | 2022.04.27 |
[ Zeppelin] JDBC 인터프리터를 추가 해보자! (0) | 2022.04.18 |
[Redash] 권한별 DB 접근 제어를 해보자! (0) | 2022.04.18 |