Apache Spark Streaming 작업을 실행할 때 로그는 Amazon EMR 클러스터의 코어 및 작업 노드에서 나머지 디스크 공간을 차지합니다.

Spark는 스트리밍 작업의 각 실행기에 대해 하나의 YARN 컨테이너를 할당합니다. Logpusher는 컨테이너가 완료되거나 종료될 때까지 Amazon S3(Amazon Simple Storage Service)에 로그를 업로드하지 않습니다. 컨테이너가 완료되는 데 오래 걸릴수록 클러스터 노드에서 더 많은 디스크 공간이 소모됩니다. 결국 컨테이너는 노드의 나머지 디스크 공간을 소비할 수 있습니다.

이 문제를 해결하려면 /etc/spark/conf 디렉터리에 있는 Log4j 속성 파일을 수정하여 Spark 작업에 대한 로그 회전을 구성하십시오.

5.18.0 이전의 Amazon EMR 릴리스 버전에서 로그 회전을 수동으로 구성하려면 다음 단계를 수행하십시오. (Amazon EMR 릴리스 버전 5.18.0 이상에서는 Spark Streaming 컨테이너 로그가 매시간마다 자동으로 회전합니다.)

1.    SSH를 사용하여 마스터 노드에 연결합니다.

2.    Amazon EMR 클러스터의 각 노드(마스터, 코어 및 작업 노드)에서 /etc/spark/conf/log4j.properties의 콘텐츠를 다음 구성으로 덮어씁니다. 이 구성에서는 RollingFileAppender 클래스를 사용하여 100,000바이트를 초과할 때 컨테이너 로그 파일을 회전합니다. 중복 파일이 S3에 업로드되는 것을 방지하기 위해 회전된 각 파일의 이름은 타임스탬프와 함께 지정됩니다.

log4j.rootLogger=INFO,file
log4j.appender.file.encoding=UTF-8
log4j.appender.file=org.apache.log4j.rolling.RollingFileAppender
log4j.appender.file.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy
log4j.appender.file.RollingPolicy.FileNamePattern=${spark.yarn.app.container.log.dir}/spark-%d{yyyy-MM-dd-HH-mm-ss}.log
log4j.appender.file.TriggeringPolicy=org.apache.log4j.rolling.SizeBasedTriggeringPolicy
log4j.appender.file.TriggeringPolicy.maxFileSize=100000
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
log4j.appender.file.Append=true

3.    권한 오류를 방지하려면 spark-submit를 sudo로 실행합니다.

로그가 100,000바이트를 초과할 경우 다음에 Spark Streaming 작업을 실행할 때 S3에 업로드됩니다. 이렇게 하면 컨테이너가 EMR 클러스터의 코어 및 작업 노드에서 나머지 디스크 공간을 차지하는 것을 방지할 수 있습니다.


페이지 내용이 도움이 되었습니까? | 아니요

AWS 지원 지식 센터로 돌아가기

도움이 필요하십니까? AWS 지원 센터를 방문하십시오.

게시 날짜: 2018-12-04