하둡 또는 Spark 작업의 사용자 캐시가 Amazon EMR에서 너무 많은 디스크 공간을 사용하지 않도록 하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 2월 11일

Apache 하둡 또는 Apache Spark 작업의 사용자 캐시가 파티션의 모든 디스크 공간을 차지하고 있습니다. Amazon EMR 작업이 실패하거나 HDFS NameNode 서비스가 안전 모드에 있습니다. 이 문제를 해결하려면 어떻게 해야 합니까?

간략한 설명

Amazon EMR 클러스터에서 YARN은 작업이 /mnt/yarn/usercache에 캐시 데이터를 쓸 수 있도록 구성됩니다. 대량의 데이터를 처리하거나 여러 동시 작업을 실행할 경우 /mnt 파일 시스템이 가득 찰 수 있습니다. 이로 인해 일부 노드에서 노드 관리자 오류가 발생하여 작업이 중단되거나 실패합니다.

이 문제를 해결하려면 다음 방법 중 하나를 사용하십시오.

  • YARN NodeManager에 대한 사용자 캐시 보존 설정을 조정합니다. 장기 실행 작업 또는 스트리밍 작업이 없는 경우 이 옵션을 선택합니다.
  • Amazon Elastic Block Store(Amazon EBS) 볼륨 확장 장기 실행 작업 또는 스트리밍 작업이 있는 경우 이 옵션을 선택합니다.

​해결 방법

옵션 1: NodeManager에 대한 사용자 캐시 보존 설정 조정

다음 속성은 캐시 정리 설정을 정의합니다.

  • yarn.nodemanager.localizer.cache.cleanup.interval-ms: 캐시 정리 간격입니다. 기본값은 600,000밀리초입니다. 이 간격 이후 – 캐시 크기가 yarn.nodemanager.localizer.cache.target-size-mb에 설정된 값을 초과하면 실행 중인 컨테이너에서 사용하지 않는 파일이 삭제됩니다.
  • yarn.nodemanager.localizer.cache.target-size-mb: 캐시에 허용되는 최대 디스크 공간입니다. 기본값은 200입니다. 캐시 디스크 크기가 이 값을 초과하면 실행 컨테이너에서 사용하지 않는 파일은 yarn.nodemanager.localizer.cache.cleanup.interval-ms에서 설정된 간격에 따라 삭제됩니다.

실행 중인 클러스터에서 정리 간격 및 최대 디스크 공간 크기를 설정하려면 다음을 실행합니다.

1.    각 코어 및 작업 노드에서 /etc/hadoop/conf/yarn-site.xml을 열고 yarn.nodemanager.localizer.cache.cleanup.interval 값 및 yarn.nodemanager.localizer.cache.target-size-mb 값을 줄입니다. 예:

sudo vim /etc/hadoop/conf/yarn-site.xml

yarn.nodemanager.localizer.cache.cleanup.interval-ms 400000
yarn.nodemanager.localizer.cache.target-size-mb 5120

2.    NodeManager 서비스를 다시 시작하려면 각 코어 및 작업 노드에서 다음 명령을 실행합니다.

sudo stop hadoop-yarn-nodemanager
sudo start hadoop-yarn-nodemanager

참고: Amazon EMR 릴리스 버전 5.21.0 이상에서는 다음과 유사한 구성 객체를 사용하여 클러스터 구성을 재정의하거나 실행 중인 클러스터에 대한 추가 구성 분류를 지정할 수도 있습니다. 자세한 내용은 실행 중인 클러스터에서 인스턴스 그룹에 대한 구성 제공을 참조하십시오.

새 클러스터에서 정리 간격과 최대 디스크 공간 크기를 설정하려면 클러스터를 시작할 때 다음과 비슷한 구성 객체를 추가합니다.

[
    {
      "Classification": "yarn-site",
     "Properties": {
       "yarn.nodemanager.localizer.cache.cleanup.interval-ms": "400000",
       "yarn.nodemanager.localizer.cache.target-size-mb": "5120"
      }
    }
]

삭제 서비스는 실행 중인 컨테이너에서 실행되지 않습니다. 즉, 사용자 캐시 보존 설정을 조정한 후에도 데이터가 다음 경로로 유출되어 파일 시스템이 채워질 수 있습니다.

{'yarn.nodemanager.local-dirs'}/usercache/user/appcache/application_id ,

옵션 2: EMR 클러스터 노드에서 EBS 볼륨 확장

실행 중인 EMR 클러스터에서 스토리지를 확장하려면 Amazon EMR 클러스터에서 스토리지를 동적으로 확장을 참조하십시오.

새 EMR 클러스터에서 스토리지를 확장하려면 EMR 클러스터를 생성할 때 더 큰 볼륨 크기를 지정합니다. 기존 클러스터에 노드를 추가할 때도 이 작업을 수행할 수 있습니다.

  • Amazon EMR 릴리스 버전 5.22.0 이상: EBS 스토리지의 기본 용량은 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스의 크기에 따라 증가합니다. 각 인스턴스 유형에 기본으로 할당된 스토리지 양과 볼륨 수에 대한 자세한 내용은 인스턴스의 기본 EBS 스토리지를 참조하십시오.
  • Amazon EMR 릴리스 버전 5.21 이하: 기본 EBS 볼륨 크기는 32GB입니다. 27GB는 /mnt 파티션에 예약되어 있습니다. HDFS, YARN, 사용자 캐시 및 모든 애플리케이션은 /mnt 파티션을 사용합니다. 필요에 따라 EBS 볼륨의 크기를 늘립니다(예: 100~500 GB 이상). 여러 EBS 볼륨을 지정할 수도 있습니다. 여러 EBS 볼륨이 /mnt1, /mnt2 등으로 마운트됩니다.

Spark 스트리밍 작업의 경우 처리가 완료되고 데이터가 더 이상 필요하지 않을 때unpersist()RDD.unpersist를 수행할 수도 있습니다. 또는 Scala에서 System.gc()(Python의 sc._jvm.System.gc())를 명시적으로 호출하여 JVM 가비지 수집을 시작하고 중간 셔플 파일을 제거합니다.


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?