TaskTracker에 의해 생성 된 각 프로세스가 특정 cgroup에 할당되는 방식으로 cgroups
또는 Hadoop을 구성 할 수 있습니까?Hadoop : TaskTracker 작업에 cgroup 사용
cgroups
을 사용하여 메모리 제한을 적용하려고합니다. TaskTracker에 cgroup을 할당하는 것이 가능하지만 작업이 혼란을 초래하면 TaskTracker는 아마도 같은 그룹에 있기 때문에 oom-killer
에 의해 살해 될 것입니다.
컴퓨터에 8GB 메모리가 있다고 가정 해 봅시다. DataNode와 시스템 유틸리티에 1,5GB를 예약하고 Hadoop TaskTracker가 6,5GB의 메모리를 사용하게하고 싶습니다. 이제 저는 스트리밍 API를 사용하여 4 개의 매퍼와 2 개의 감속기 (이론적으로 1GB RAM을 사용할 수 있음)를 허용하는 것보다 많은 메모리를 사용하는 작업을 시작합니다. 이제 cgroup
메모리 제한에 도달하고 oom-killer가 작업을 중단하기 시작합니다. 차라리 각지도 및 축소 작업에 대해 cgroup을 사용하고 싶습니다. cgroup
은 1GB 메모리로 제한됩니다.
이론적 인 문제입니까? oom-killer
이 실제로 Hadoop TaskTracker를 죽이게 될까요, 아니면 먼저 fork 된 프로세스를 죽이기 시작할 것입니까? 후자가 대부분 사실이라면 내 아이디어가 효과가있을 것입니다. 그렇지 않으면 나쁜 작업은 여전히 모든 클러스터 컴퓨터에서 TaskTracker를 죽이고 수동으로 다시 시작해야합니다.
cgroup을 사용할 때 찾아야 할 다른 것이 있습니까?
예 : http://www.ibm.com/developerworks/library/os-hadoop-scheduling/index.html
는 하둡이 링크를 사용하여 구성합니다. 문제는'ulimit' 만 가상 메모리를 다루기 때문에 좋은 한계를 설정하는 것이 어렵고 스트리밍 작업이 Java 작업의 한계에 미치지 못하기 때문입니다. 클러스터가 학생과 교직원의 많은 부분에서 사용될 것이므로 문제없이 작동해야하므로 강력한 솔루션이 필요합니다. –