내 Apache Hadoop 또는 Apache Spark 작업의 사용자 캐시는 파티션의 모든 디스크 공간을 사용합니다. Amazon EMR 작업이 실패하거나 HDFS NameNode 서비스가 안전 모드에 있습니다.
간단한 설명
Amazon EMR 클러스터에서 YARN은 작업이 /mnt/yarn/usercache에 캐시 데이터를 쓸 수 있도록 구성됩니다. 많은 양의 데이터를 처리하거나 여러 동시 작업을 실행하는 경우 /mnt 파일 시스템이 가득 찰 수 있습니다. 이로 인해 일부 노드에서 노드 관리자가 실패하고 작업이 멈추거나 실패합니다.
이 문제를 해결하려면 다음 방법 중 하나를 사용하세요.
- 장기 실행 또는 스트리밍 작업이 없는 경우 YARN NodeManager에 대한 사용자 캐시 보존 설정을 조정합니다.
- 장기 실행 또는 스트리밍 작업이 있는 경우 Amazon Elastic Block Store(Amazon EBS) 볼륨을 확장합니다.
해결 방법
NodeManager의 사용자 캐시 보존 설정을 조정합니다
다음 속성은 캐시 정리 설정을 정의합니다.
- yarn.nodemanager.localizer.cache.cleanup.interval-ms: 캐시 정리 간격입니다. 기본값은 600,000밀리초입니다. 이 간격 후에 캐시 크기가 yarn.nodemanager.localizer.cache.target-size-mb의 설정 값을 초과하면 실행 중인 컨테이너에서 사용하지 않는 파일이 삭제됩니다.
- **yarn.nodemanager.localizer.cache.target-size-mb:**캐시에 허용된 최대 디스크 공간입니다. 기본값은 10,240MB입니다. 캐시 디스크 크기가 이 값을 초과하면 실행 중인 컨테이너에서 사용하지 않는 파일은 yarn.nodemanager.localizer.cache.cleanup.interval-ms에 설정된 간격에 따라 삭제됩니다.
클러스터에서 정리 간격 및 최대 디스크 공간 크기를 설정하려면 다음 단계를 완료하세요.
-
각 코어 및 태스크 노드에서 /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.xmlyarn.nodemanager.localizer.cache.cleanup.interval-ms 400000
yarn.nodemanager.localizer.cache.target-size-mb 5120
-
각 코어 및 태스크 노드에서 다음 명령을 실행하여 NodeManager를 다시 시작합니다.
EMR 5.29 및 이전 버전
sudo stop hadoop-yarn-nodemanager
sudo start hadoop-yarn-nodemanager
EMR 5.30.0 이상
sudo stop hadoop-yarn-nodemanager.service
sudo systemctl start hadoop-yarn-nodemanager.service
-
시작 시 새 클러스터에서 정리 간격 및 최대 디스크 공간 크기를 설정하려면 다음과 유사한 구성 개체를 추가합니다.
[
{
"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 ,
EMR 클러스터 노드의 EBS 볼륨 확장
실행 중인 EMR 클러스터에서 스토리지를 확장하려면 Amazon EMR 클러스터에서 스토리지를 동적으로 스케일 업을 참조하세요.
새 EMR 클러스터에서 스토리지를 확장하려면 EMR 클러스터를 생성할 때 더 큰 볼륨 크기를 지정합니다. 기존 클러스터에 노드를 추가할 때도 이 작업을 수행할 수 있습니다.
- 아마존 EMR 버전 5.22.0 이상: EBS 스토리지의 기본 용량은 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스의 크기에 따라 증가합니다. 각 인스턴스 유형의 기본 스토리지 용량 및 볼륨 수에 대한 자세한 내용은 인스턴스의 기본 Amazon EBS 스토리지 섹션을 참조하세요.
- **아마존 EMR 버전 5.21 이하:**기본 EBS 볼륨 크기는 32GB입니다. 27GB는 ** /mnt ** 파티션용으로 예약되어 있습니다. HDFS, YARN, 사용자 캐시 및 모든 애플리케이션은 /mnt 파티션을 사용합니다. 필요에 따라 EBS 볼륨의 크기를 늘립니다. /mnt1, /mnt2 등으로 마운트된 여러 EBS 볼륨을 지정할 수도 있습니다.
Spark 스트리밍 작업의 경우 데이터가 더 이상 필요하지 않은 후 **RDD.unpersist()**를 수행할 수도 있습니다. 또는 Scala에서는 System.gc() 또는 Python에서는 **sc._jvm.System.gc()**를 명시적으로 호출하여 JVM 가비지 수집을 시작하고 중간 셔플 파일을 제거합니다.