AWS EMR에서 Spark Streaming 작업을 실행합니다. 이 작업은 10 시간에서 14 시간 사이에 안정적으로 실행되며 stderr, stdout 또는 Cloudwatch 로그에서 식별 가능한 오류없이 중단됩니다. 이 충돌 후 작업을 다시 시작하려고하면 " '메모리를 할당 할 수 없습니다'(errno = 12)"(full message)로 즉시 실패합니다.얀 힙 사용량 증가 시간
Cloudwatch 메트릭과 Ganglia를 사용한 조사에서 driver.jvm.heap.used
이 꾸준히 증가하고 있음을 보여줍니다.
위의 두 가지 관찰을 통해 Spark의 장기 실행 구성 요소 (즉, 작업 수준 이상)가 메모리를 올바르게 사용하지 못하고 있다고 생각하게되었습니다. 이는 hadoop-yarn-resourcemanager를 다시 시작하면 (here에 따라) 힙 사용이 "새로운 클러스터"수준으로 떨어지게 됨으로써 지원됩니다.
내 가정에 실제로 맞으면 - 원사가 점점 더 많은 메모리를 소비하게되는 원인은 무엇입니까? (그렇지 않을 경우 - 그 위조 수있는 방법?)
- 내가 here에서 볼이 true로
spark.streaming.unpersist
디폴트 (I 그냥 어떤이 있는지 여부를 확인 어쨌든 내 작업의 마지막에 수동rdd.unpersist()
를 추가하려고했습니다 있지만, 효과) - - Here에 대한 의견에 따르면
spark.yarn.am.extraJavaOptions
에 대한 의견은 원사 클라이언트 모드 (우리가있는 곳)에서 실행 중일 때은 최대 원사 응용 프로그램 관리자 힙 메모리를 설정한다고 제안합니다. 용법. 이 값은 작업에서 무시되지 않으므로 (기본값은 512m이어야 함) Cloudwatch와 Ganglia 모두 드라이버 힙 사용량을 기가 바이트 단위로 명확하게 보여줍니다.
당신은 우연히 상태 스트리밍을하고 있습니까? 메모리가 유지되는 상태가 신중하게 관리되지 않으면 메모리 사용이 계속 증가 할 수 있습니다. 나는 우리가 EMR에서도 스트리밍 작업을하고 있다고 말할 수 있으며, 메모리 문제없이 실행되므로 일반적인 문제는 아닌 것으로 생각됩니다. –