복붙노트

[HADOOP] Hadoop mapreduce 작업에서 JVM 재사용

HADOOP

Hadoop mapreduce 작업에서 JVM 재사용

JVM 재사용을 위해 "mapred.job.reuse.jvm.num.tasks"속성을 설정할 수 있음을 알고 있습니다. 내 질문은 다음과 같습니다.

(1) 여기에 설정할 작업 수를 결정하는 방법, -1 또는 다른 양의 정수?

(2) 이미 JVM을 재사용하고 mapreduce 작업에서이 등록 정보를 -1로 설정하는 것이 좋습니다.

대단히 감사합니다!

해결법

  1. ==============================

    1.서로간에 매우 작은 작업이있는 경우이 속성을 -1로 설정하면 유용합니다 (스폰 된 JVM이 무제한으로 재사용 됨). 그래서 당신은 단지 (당신의 작업에 사용 가능한 당신의 클러스터에있는 작업의 수) - (작업의 수) 대신 -JVM -JVM.

    서로간에 매우 작은 작업이있는 경우이 속성을 -1로 설정하면 유용합니다 (스폰 된 JVM이 무제한으로 재사용 됨). 그래서 당신은 단지 (당신의 작업에 사용 가능한 당신의 클러스터에있는 작업의 수) - (작업의 수) 대신 -JVM -JVM.

    이것은 엄청난 성능 향상입니다. 장기 실행 작업에서 새 JVM을 설정하는 것과 비교할 때 런타임의 비율은 매우 낮으므로 성능이 크게 향상되지는 않습니다.

    또한 장기 실행 태스크에서는 성능을 저하시키는 힙 분할과 같은 문제점으로 인해 태스크 프로세스를 다시 작성하는 것이 좋습니다.

    또한 중간에 실행되는 작업이있는 경우 작업을 2-3 번만 재사용 할 수 있으므로 좋은 균형을 유지할 수 있습니다.

  2. ==============================

    2.JVM 재시작 (MR1에서만 가능)은 JVM의 시작 지연을 제거하기 때문에 성능에 도움이되지만 한계가 있으며 많은 부작용이 있습니다 (대부분의 작업은 오랜 시간 (수십 초) 또는 심지어 분)과 시작 시간은 그 작업 실행 시간을 볼 때 문제가되지 않습니다. 깨끗한 슬레이트에서 새 작업을 시작하고 싶습니다 .JVM을 다시 사용할 때 힙이 완전하지 않을 가능성이 있습니다 (이전 실행에서 조각난입니다.) 조각화는 더 많은 GC를 가져오고 모든 시작 시간을 무효화 할 수 있습니다. 메모리 누수가 있으면 메모리 사용 등에 영향을 줄 수 있습니다. 따라서 새 JVM을 시작하는 것이 좋습니다 (작업이 합리적으로 작지 않은 경우) MR2 (YARN)에서 새 JVM은 항상 작업을 위해 시작되고 Uber 작업의 경우 로컬 JVM에서만 작업이 실행됩니다.

    JVM 재시작 (MR1에서만 가능)은 JVM의 시작 지연을 제거하기 때문에 성능에 도움이되지만 한계가 있으며 많은 부작용이 있습니다 (대부분의 작업은 오랜 시간 (수십 초) 또는 심지어 분)과 시작 시간은 그 작업 실행 시간을 볼 때 문제가되지 않습니다. 깨끗한 슬레이트에서 새 작업을 시작하고 싶습니다 .JVM을 다시 사용할 때 힙이 완전하지 않을 가능성이 있습니다 (이전 실행에서 조각난입니다.) 조각화는 더 많은 GC를 가져오고 모든 시작 시간을 무효화 할 수 있습니다. 메모리 누수가 있으면 메모리 사용 등에 영향을 줄 수 있습니다. 따라서 새 JVM을 시작하는 것이 좋습니다 (작업이 합리적으로 작지 않은 경우) MR2 (YARN)에서 새 JVM은 항상 작업을 위해 시작되고 Uber 작업의 경우 로컬 JVM에서만 작업이 실행됩니다.

  3. from https://stackoverflow.com/questions/10484658/reuse-jvm-in-hadoop-mapreduce-jobs by cc-by-sa and MIT license