2016-06-09 4 views
2

cgroup이 활성화되었을 때 Mesos의 Fine-Grained 모드에서 Spark의 동작이 궁금합니다.Sparks에 cgroups를 사용할 때 메소의 동작

하나의 관심사는 ces를 사용하지 않고 Mesos + spark를 사용할 때 실제 스파크 실행 프로세스가 사용하는 메소 (Mesos)에 약속 한 것보다 적어도 10 % 더 많은 메모리를 사용한다는 것입니다. cgroup을 활성화하면 스파크 집행자를 죽일 수 있습니까?

둘째, 파일 캐시는 어떻게 처리됩니까? 스파크는 파일 캐시에 크게 의존합니다. 파일 캐시는 메소 (Mesos)의 메모리 용량과 관련이 있습니까? 아마 아니 겠지만 우리가 이것에 영향을 줄 수 있을까요? 그래서 예를 들어 이상적으로 Spark이 Java 프로세스에 5GB를 사용해야하고 Spark가 잘 실행되고 5GB 이상으로 커지지 않는다고 가정하면 총 8GB를 사용하고 3GB는 파일 캐시 (최대).

이러한 것들을 직접 테스트하려면 cgroup이 한 시점에서 루트 자격 증명에 의존하기 때문에 클러스터 sysadmin에서 많은 지원 요청을 거쳐야 할 것입니다. 다른 사람들에게 물어 보지 않고 헛되이 싫어하십시오.

답변

0

첫 번째 질문에 답하기 위해 cgroup이 작동하는 방식과 혼동을 느낀 것 같습니다. 집행자는 단순히 cgroup이 허용하는 것보다 더 많은 메모리를 할당 할 수는 없다는 것을 확신합니다 (실제로 확인할 수 있습니다). 따라서 Mesos는 사실 프로세스 살인자 또는 기타 *로 행동하지 않습니다. 그러나 어떤 유형의 프로그램은 실제로 더 많은 메모리를 할당 할 수 없으므로 중단되며 프로그램이 종료되거나 정상적으로 실행될 수 있지만 메모리 및/또는 성능이 떨어지면 프로그램에 따라 다릅니다.

두 번째 질문에 대해서는 실제 cgroup 메모리 양에 영향을 미치기 위해 구성 설정이없는 것 같습니다. Executor 메모리 설정과 스파크가 메소 (Mesos)에서 얻는 것 사이에는 일대일 매핑이있는 것으로 보입니다. 그러나 스파크가 대략 5.8GB를 묻는 것을 볼 수 있기 때문에 나는 숨겨진 요인이 있다고 생각하지만, 실제로는 Executor 메모리를 5GB로 설정합니다. (소스 코드에서이 숨겨진 요소가 아마 15 %라는 것을 발견하면 티켓을 업데이트 할 것입니다.)

업데이트, spark.mesos.executor.memoryOverhead으로 설정하십시오. Mesos 리소스로 사용될 총 메모리로 실행 메모리에 추가되는 메가 바이트 단위의 숫자를 cgroup 메모리 제한으로 지정할 수 있습니다.

* = Update2, 실제로 cgroups는 기본적으로 제어 그룹의 제한을 벗어나는 프로세스를 중지합니다. /cgroups/memory/x/memory.oom_control이 '0'(카운터 직관적으로 활성화 됨)으로 설정되어 있는지 확인할 수 있습니다. 그러나 Spark의 경우 OOM과 마주 치지 않을 정도로 충분한 여유를주는 것은 10-15 %의 오버 헤드입니다.