Amazon EMR에서 실행한 Spark 작업이 완료된 후에도 YARN 애플리케이션이 리소스를 계속 사용하는 이유는 무엇인가요?

3분 분량
0

Amazon EMR 클러스터에서 Jupyter 또는 Zeppelin 노트북을 실행하고 있습니다. 제출한 Apache Spark 작업이 완료된 후에도 YARN 애플리케이션이 계속 실행됩니다.

간략한 설명

Zeppelin 또는 Jupyter에서 Spark 노트북을 실행하면 Spark가 인터프리터를 시작합니다. 인터프리터는 YARN 애플리케이션을 생성합니다. 이 애플리케이션은 애플리케이션 나열 시 표시되는 Spark 드라이버입니다. 노트북에서 작업 실행을 마칠 때 드라이버가 종료되지 않습니다. 설계상 Spark 드라이버는 코드를 즉시 실행하기 위해 애플리케이션 컨테이너를 요청할 수 있도록 활성 상태로 유지됩니다. 단점은 YARN 애플리케이션이 다른 작업에 필요한 리소스를 사용 중일 수 있다는 것입니다. 이 문제를 해결하려면 YARN 애플리케이션을 수동으로 중지하면 됩니다. 또는 애플리케이션을 자동으로 중지하는 제한 시간 값을 설정하면 됩니다.

해결 방법

Zeppelin

옵션 1: Spark 인터프리터 다시 시작

시작하기 전에 먼저, Zeppelin에서 인터프리터를 다시 시작할 수 있는 권한이 있는지 확인합니다.

1.    Zeppelin을 여십시오.

2.    사용자 이름 옆의 드롭다운 목록에서 인터프리터를 선택합니다.

3.    Spark 인터프리터를 찾은 다음, 재시작을 선택하십시오. 인터프리터가 다시 시작될 때 Zeppelin은 YARN 작업을 종료합니다.

옵션 2: 수동으로 YARN 작업 중지

시작하기 전에 먼저, 다음 사항을 확인합니다.

  • Amazon EMR 클러스터에 대한 SSH 액세스 권한이 있어야 합니다.
  • YARN 명령을 실행할 수 있는 권한이 있어야 합니다.

-kill 명령을 사용하여 애플리케이션을 종료합니다. 다음 예에서 application_id를 자신의 애플리케이션 ID로 바꿉니다.

yarn application -kill application_id

옵션 3: 인터프리터 제한 시간 값 설정

Zeppelin 버전 0.8.0 이상(Amazon EMR 버전 5.18.0 이상에서 사용 가능)에는 인터프리터용 수명 주기 관리자가 포함되어 있습니다. TimeoutLifecycleManager 설정을 사용하여 지정된 유휴 제한 시간 후에 인터프리터를 종료하십시오.

1.    다음 내용으로 etc/zeppelin/conf/zeppelin-site.xml 파일을 만듭니다. 이 예에서 제한 시간은 120,000밀리초(2분)로 설정됩니다. 고유한 환경에 적합한 제한 시간 값을 선택합니다.

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>

<property>
  <name>zeppelin.interpreter.lifecyclemanager.class</name>
  <value>org.apache.zeppelin.interpreter.lifecycle.TimeoutLifecycleManager</value>
  <description>This is the LifecycleManager class for managing the lifecycle of interpreters. The interpreter terminates after the idle timeout period.</description>
</property>

<property>
  <name>zeppelin.interpreter.lifecyclemanager.timeout.checkinterval</name>
  <value>60000</value>
  <description>The interval for checking whether the interpreter has timed out, in milliseconds.</description>
</property>

<property>
  <name>zeppelin.interpreter.lifecyclemanager.timeout.threshold</name>
  <value>120000</value>
  <description>The idle timeout limit, in milliseconds.</description>
</property>
</configuration>

2.    다음 명령을 실행하여 Zeppelin을 다시 시작합니다.

$ sudo stop zeppelin
$  sudo start zeppelin

Jupyter

옵션 1: 수동으로 노트북 종료

작업이 완료된 후 다음 방법 중 하나를 사용하여 Jupyter 사용자 인터페이스에서 커널을 중지합니다.

  • Jupyter 노트북 인터페이스에서 [파일] 메뉴를 연 후 [닫기 및 중단]을 선택합니다.
  • Jupyter 대시보드에서 실행 중 탭을 여십시오. 중지하려는 노트북에 대해 [종료]를 선택합니다.

옵션 2: 수동으로 커널 종료

Jupyter 노트북 인터페이스에서 [커널] 메뉴를 연 후 [종료]를 선택합니다.

옵션 3: 제한 시간 속성 구성

커널을 종료하기 전에 노트북 탭이나 브라우저 창을 닫으면 YARN 작업이 계속 실행됩니다. 이 문제를 방지하려면 NotebookApp.shutdown_no_activity_timeout 속성을 구성합니다. 이 속성을 구성하면 탭 또는 브라우저 창을 닫은 경우 지정된 유휴 제한 시간 후에 YARN 작업이 종료됩니다.

다음을 수행하여 NotebookApp.shutdown_no_activity_timeout 속성을 구성합니다.

1.    프라이머리 노드에서 /etc/jupyter/jupyter_notebook_config.py 파일을 열고 다음과 비슷한 항목을 추가합니다. 이 예에서 제한 시간 속성은 120초로 설정됩니다. 환경에 적합한 제한 시간 값을 선택하십시오.

c.NotebookApp.shutdown_no_activity_timeout = 120

2.    다음 명령을 실행하여 jupyterhub를 다시 시작합니다.

sudo docker stop jupyterhub
sudo docker start jupyterhub

관련 정보

Apache Zeppelin

Amazon EMR에서 Zeppelin 사용 시 고려 사항

Amazon EMR의 Jupyter 노트북

AWS 공식
AWS 공식업데이트됨 3년 전