2017-12-21 33 views
1

원사 클러스터에서 스파크 작업을 실행하고 리소스가 충분하지 않아도 스파크 작업이 시작된다는 것을 알았습니다.YARN에서 Spark 응용 프로그램을 시작하기 전에 모든 실행 프로그램이 할당 될 때까지 기다리는 방법은 무엇입니까?

극단적 인 예로, 스파크 작업은 1000 명의 실행자 (코어 4 개와 램 20GB)를 요구합니다. 전체 클러스터에는 r3.xlarge (노드 4 코어 및 32GB 램)의 노드가 30 개 밖에 없습니다. 작업은 30 명의 집행자 만 실제로 시작하고 실행할 수 있습니다. 우리는 동적 할당을 false로 설정하려고 시도했으며 용량 스케줄러와 실의 공정한 스케줄러를 모두 시도했습니다. 그것은 동일합니다.

아이디어가 부족하여 리소스가 충분하지 않아서 일을 시작할 수 없습니까? 이것에 대한 스파크면 또는 원사면 설정이 있습니까?

답변

1

나는 방금 a very similar question으로 대답 한 것 같습니다. 수가 충분히에서 작업을 시작하는 같이


는 사용 가능한 모든 자원을 기다리고 빨리 시작하지 않으 사용 사례에 대해 생각해.

YARN의 스파크 (Spark on YARN)가 응용 프로그램이 작업을 실행하기 전에 요청한 코어의 최소 80 % 인 추가 검사 (별칭 minRegisteredRatio)를 가지고있는 이유입니다.

Spark 응용 프로그램을 시작하기 전에 모든 코어를 사용할 수있게하려면 spark.scheduler.minRegisteredResourcesRatio Spark 속성을 사용하여 비율을 제어하십시오. the official Spark documentation (강조 광산) 인용

:

spark.scheduler.minRegisteredResourcesRatio YARN 모드

0.8

등록 자원의 최소 비율 (등록 자원/총 예상 리소스) (리소스는 실 모드의 집행자, 독립 실행 형 모드의 CPU 코어 및 Mesos의 coarsed-grained 모드 [ 'spark.cores.max'값 e는 Mesos의 거친 입자 모드에 대해 예상되는 총 자원 임))가 스케줄링이 시작되기 전에 대기해야합니다. 0.0에서 1.0 사이의 double로 지정됩니다.. 자원의 최소 비율에 도달했는지 여부에 관계없이 스케줄링이 시작되기까지 대기하는 최대 시간은 config spark.scheduler.maxRegisteredResourcesWaitingTime에 의해 제어됩니다.