일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- ec2
- EMR
- 자동
- Kafka
- fastcampus
- SpringBoot
- 간단
- 자바
- 클러스터
- gradle
- 레디스
- java
- Cluster
- login
- vue
- spring
- aws
- Zeppelin
- Jenkins
- Redis
- redash
- 설정
- 예제
- Mac
- 로그인
- config
- 젠킨스
- hive
- Docker
- 머신러닝
- Today
- Total
코알못
Ranger 적용된 EMR 집계 로그 S3 저장 안되는 이유 본문
Yarn 집계 로그가 하둡 용량(EC2 로컬)을 많이 차지하여 저장소를 S3로 변경 하고자 하였다.
아래와 같이 설정하며 (반드시 \/ 로 경로 구분, 로그 경로는 하위 단계가 여러개도 가능)
{
"Classification": "yarn-site",
"Properties": {
"yarn.log-aggregation-enable": "true",
"yarn.log-aggregation.retain-seconds": "-1",
"yarn.nodemanager.remote-app-log-dir":"s3:\/\/[버킷경로]\/[로그경로]"
}
},
Ranger가 적용된 EMR 에서는 아래 오류 로그가 발생하며 로그가 S3에 저장되지 않았다.
2023-05-16 05:06:57,978 WARN org.apache.hadoop.yarn.server.nodemanager.containermanager.logaggregation.LogAggregationService (NM ContainerManager dispatcher): Application failed to init aggregation
org.apache.hadoop.yarn.exceptions.YarnRuntimeException: AccessDeniedException{ message=Failed to retrieve credentials from secret agent for request: GetTemporaryCredentialsForResourcesRequest(userId=null, username=null, resourcePrivileges=[ResourcePrivileges{arn='[버킷경로]/[로그경로]', privilegeFilters=GetObject}]) cause.class=com.amazonaws.emr.secretagent.client.model.SecretAgentClientException}
at org.apache.hadoop.yarn.logaggregation.filecontroller.LogAggregationFileController.createAppDir(LogAggregationFileController.java:446)
at org.apache.hadoop.yarn.server.nodemanager.containermanager.logaggregation.LogAggregationService.initAppAggregator(LogAggregationService.java:273)
at org.apache.hadoop.yarn.server.nodemanager.containermanager.logaggregation.LogAggregationService.initApp(LogAggregationService.java:223)
at org.apache.hadoop.yarn.server.nodemanager.containermanager.logaggregation.LogAggregationService.handle(LogAggregationService.java:366)
at org.apache.hadoop.yarn.server.nodemanager.containermanager.logaggregation.LogAggregationService.handle(LogAggregationService.java:69)
at org.apache.hadoop.yarn.event.AsyncDispatcher.dispatch(AsyncDispatcher.java:219)
at org.apache.hadoop.yarn.event.AsyncDispatcher$1.run(AsyncDispatcher.java:133)
at java.lang.Thread.run(Thread.java:750)
Caused by: AccessDeniedException{ message=Failed to retrieve credentials from secret agent for request: GetTemporaryCredentialsForResourcesRequest(userId=null, username=null, resourcePrivileges=[ResourcePrivileges{arn='[버킷경로]/[로그경로]', privilegeFilters=GetObject}]) cause.class=com.
원인을 보니 아래와 같았다.
1. core,task spot 노드 Ranger host 설정이 안되어 있음
- 원인 : 저자의 Ranger 서버의 경우 도메인 등록을 하지 않아 호스트 설정이 필요했으나 EMR 단계를 이용하여 호스트 설정을 진행하여 master 노드에만 해당 설정이 적용 되었다.
- 해결 : 단계가 아닌 부트스트랩으로 호스트 설정 스크립트가 실행 되어야 task, core, spot 노드 모두 적용된다.
# host_setting.sh
echo "172.X.X.X ranger.co.kr" >> /etc/hosts
람다 부트스트랩 설정 등록
...
BootstrapActions=[
{
"Name": "host_setting.sh",
"ScriptBootstrapAction": {
"Path": "s3://[버킷,경로]/host_setting.sh"
}
}
],
...
2. Ranger에 s3 관련 정책 두가지 설정 되어 있지 않았음
- EMR 시스템 로그 저장 경로 yarn 유저에 대한 권한 없음
- EMR yarn 집계 로그 저장 경로 yarn 유저에 대한 권한이 없음
아래와 같이 레인저 설정을 진행하였다.
꼭 S3 경로 1개당 하나의 정책을 생성하도록 한다.(여러개 입력시 정책 적용이 안되어 동일한 오류 안되는 부분 확인..ㅎ)
수정한 설정이 반영 되었으며
설정뒤에 정상적인 로그 확인되며
2023-05-16 05:22:24,778 INFO com.amazon.ws.emr.hadoop.fs.s3n.MultipartUploadOutputStream (LogAggregationService #3): close closed:false s3://[버킷]/[집계로그저장경로]/application_1684206904867_0005/ip-172-x.x.xx.ap-northeast-2.compute.internal_8041
집계 로그가 정상적으로 S3에 적재 되었다. (-1 로 설정하여 거의 실시간으로 저장)
'ETC' 카테고리의 다른 글
레인저 적용 EMR의 zepplelin에서 spark 사용 (0) | 2023.05.17 |
---|---|
Ranger 설정 수정 및 인증서 교체 (0) | 2023.05.17 |
[kubernetes] 쿠버네티스 Label, Selector 실습 (0) | 2023.05.07 |
[kubernetes] 쿠버네티스 Pod 실습 (0) | 2023.05.07 |
[kubernetes] 쿠버네티스 Pod, Label, Selector 소개 (0) | 2023.05.07 |