Amazon EMR에서 Spark의 ‘No space left on device’ 단계 오류를 해결하려면 어떻게 해야 합니까?

2분 분량
0

Apache Spark 애플리케이션을 Amazon EMR 클러스터에 제출했습니다. 다음과 같이 ‘No space left on device’ 단계 오류와 함께 애플리케이션이 실패합니다. Job aborted due to stage failure: Task 31 in stage 8.0 failed 4 times, most recent failure: Lost task 31.3 in stage 8.0 (TID 2036, ip-xxx-xxx-xx-xxx.compute.internal, executor 139): org.apache.spark.memory.SparkOutOfMemoryError: error while calling spill() on org.apache.spark.util.collection.unsafe.sort.UnsafeExternalSorter@1a698b89 : No space left on device

간략한 설명

Spark는 코어 및 태스크 노드의 로컬 디스크를 사용하여 중간 데이터를 저장합니다. 디스크의 공간이 부족하면 ‘no space left on device’ 오류와 함께 작업이 실패합니다. 이 오류를 해결하려면 다음 방법 중 하나를 사용합니다.

  • Amazon EBS(Amazon Elastic Block Store) 용량을 더 추가합니다.
  • Spark 파티션을 더 추가합니다.
  • 부트스트랩 작업을 사용하여 코어 및 태스크 노드에서 스토리지를 동적으로 확장합니다. 자세한 내용과 예제 부트스트랩 작업 스크립트는 Amazon EMR 클러스터에서 스토리지를 동적으로 확장을 참조하세요.

해결 방법

EBS 용량 추가

새 클러스터의 경우: 더 큰 EBS 볼륨 사용

Amazon EMR 클러스터를 시작하고 더 큰 EBS 볼륨의 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스 유형을 선택합니다. 각 인스턴스 유형에 할당된 스토리지 양과 볼륨 수에 대한 자세한 내용은 인스턴스의 기본 Amazon EBS 스토리지를 참조하세요.

실행 중인 클러스터의 경우: EBS 볼륨 더 추가

1.    더 큰 EBS 볼륨으로 문제가 해결되지 않으면 코어와 태스크 노드에 추가 EBS 볼륨을 연결합니다.

2.    연결된 볼륨을 포맷하고 탑재합니다. 올바른 디스크 번호를 사용해야 합니다(예: /data가 아니라 /mnt1 또는 /mnt2).

3.    SSH를 사용하여 노드에 연결합니다.

4.    /mnt2/yarn 디렉터리를 생성한 다음디렉터리의 소유권을 YARN 사용자로 설정합니다.

sudo mkdir /mnt2/yarn
chown yarn:yarn /mnt2/yarn

5.    /etc/hadoop/conf/yarn-site.xmlyarn.nodemanager.local-dirs 속성 내에 /mnt2/yarn 디렉터리를 추가합니다. 예:

<property>
    <name>yarn.nodemanager.local-dirs</name>
    <value>/mnt/yarn,/mnt1/yarn,/mnt2/yarn</value>
</property>

6.    NodeManager 서비스를 다시 시작합니다.

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

Spark 파티션 더 추가

클러스터에 있는 코어 및 태스크 노드의 수에 따라 Spark 파티션의 수를 늘리는 방법을 고려합니다. 다음 Scala 코드를 사용하여 Spark 파티션을 더 추가합니다.

val numPartitions = 500
val newDF = df.repartition(numPartitions)

관련 정보

Amazon EMR에서 Spark 작업의 단계 실패 문제를 해결하려면 어떻게 해야 하나요?

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