기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon EMR 클러스터 오류: 가져오기 실패가 너무 많음
"Too many fetch-failures(가져오기 실패 횟수가 너무 많습니다.)" 또는 "Error reading task output(작업 출력을 읽는 중 오류가 발생했습니다.)" 오류 메시지가 단계 또는 작업 시도 로그에 있는 경우 이는 실행 중인 작업이 다른 작업의 출력에 따라 좌우됨을 의미합니다. 대체로 이 상황은 감소 작업이 실행 대기 중이며 하나 이상의 map 작업 출력이 필요하지만 출력을 아직 사용할 수 없는 경우에 발생합니다.
출력을 사용할 수 없는 이유는 몇 가지가 있을 수 있습니다.
-
필수 선행 작업이 여전히 처리 중입니다. 이 작업은 대체로 map 작업입니다.
-
데이터가 다른 인스턴스에 있는 경우 네트워크 연결 상태가 좋지 않아서 데이터를 사용하지 못할 수도 있습니다.
-
HDFS가 출력을 불러오는 데 사용되는 경우 HDFS 관련 문제가 있을 수 있습니다.
이 오류의 가장 일반적인 원인은 이전 작업이 여전히 처리 중이라는 점입니다. 특히 reduce 작업을 먼저 실행하려 할 때 오류가 발생하는 경우는 아마도 이 상황에 해당될 것입니다. 오류를 반환하는 클러스터 단계에 대해 syslog 로그를 검토하여 이 경우에 해당하는지 여부를 확인할 수 있습니다. syslog에 map 작업과 reduce 작업이 둘 다 진행 중인 것으로 표시되면 이는 아직 완료되지 않은 map 작업이 있는 상태에서 reduce 단계가 시작되었음을 나타냅니다.
로그에서 찾아볼 사항 중 하나는 100%에 도달하고 나서 그보다 낮은 값으로 내려가는 map 진행률입니다. map 백분율이 100%에 도달하는 경우 이것이 모든 map 작업이 완료되었음을 의미하지는 않습니다. 단순히 하둡이 모든 map 작업을 실행 중임을 의미할 뿐입니다. 이 값이 100% 미만으로 내려가면 map 작업이 실패했음을 의미하며 구성에 따라 하둡에서 해당 작업을 다시 예약하려 할 수도 있습니다. 로그에서 map 백분율이 100%로 유지되면 CloudWatch 지표(특히 RunningMapTasks
)를 살펴봄으로써 해당 map 작업이 여전히 처리 중인지 확인합니다. 마스터 노드의 하둡 웹 인터페이스를 사용하여 이 정보를 찾아볼 수도 있습니다.
이 문제를 발생한 경우 몇 가지를 시도해 볼 수 있습니다.
-
reduce 단계의 시작 전 대기 시간을 늘립니다. 이렇게 하려면 하둡 구성 설정인 mapred.reduce.slowstart.completed.maps를 더 긴 시간으로 변경하면 됩니다. 자세한 내용은 부트스트랩 작업을 생성하여 Amazon EMR 클러스터에서 추가 소프트웨어 설치 단원을 참조하십시오.
-
reducer 수를 클러스터의 총 reducer 용량에 맞춥니다. 이렇게 하려면 해당 작업에 대한 하둡 구성 설정인 mapred.reduce.tasks를 조정하면 됩니다.
-
combiner 클래스 코드를 사용하여 가져와야 하는 출력 수를 최소화합니다.
-
클러스터의 네트워크 성능에 영향을 미치는 Amazon EC2 서비스 관련 문제가 없는지 확인합니다. 이렇게 하려면 서비스 상태 대시보드
를 사용합니다. -
클러스터 내 인스턴스의 CPU 및 메모리 리소스를 검토하여 노드의 리소스 중 너무 많은 부분이 데이터 처리에 사용되고 있지는 않은지 확인합니다. 자세한 내용은 Amazon EMR 클러스터 하드웨어 및 네트워킹 구성 단원을 참조하십시오.
Amazon EMR 클러스터에 사용된 Amazon Machine Image(AMI)의 버전을 확인합니다. 버전이 2.3.0 ~ 2.4.4이면 더 최신 버전으로 업데이트합니다. 위에 지정된 범위에 속하는 AMI 버전에는 map 단계에서 출력을 제공하지 못할 수도 있는 Jetty 버전이 사용됩니다. reducer가 map 단계에서 출력을 가져올 수 없는 경우 가져오기 오류가 발생합니다.
Jetty는 하둡 클러스터 내에서 시스템 간 통신에 사용되는 오픈 소스 HTTP 서버입니다.