복붙노트

[HADOOP] hadoop - 맵 작업 및 정적 변수 감소

HADOOP

hadoop - 맵 작업 및 정적 변수 감소

방금 일부 hadoop / hbase MapReduce 작업 (cloudera 사용)을 시작했고 다음 질문을했습니다.

예를 들어 주 변수와 정적 변수가있는 java 클래스가 있다고 가정 해 보겠습니다. 이 클래스는 Mapper 및 Reducer 작업에 해당하는 내부 클래스를 정의합니다. 작업을보기 전에 주 변수는 정적 변수를 초기화합니다. 이 변수는 Mapper 클래스에서 읽습니다. 그런 다음 클러스터에서 'hadoop jar'를 사용하여 클래스를 시작합니다.

내 질문 : 다른 노드에서 Map 및 Reduce 작업이 정적 변수를 볼 수있는 방법을 알지 못합니다. 노드가 jvm 또는 정적 변수를 공유 할 수있게하는 "hadoop magic"이 있습니까? 이것도 어떻게 작동할까요? 나는 그저 클래스를 작업해야만하고 non-mononode 클러스터에서 이것이 어떻게되는지를 알 수 없다. 고맙습니다

해결법

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

    1.분산 Hadoop 클러스터에서 각 Map / Reduce 작업은 자체 JVM에서 실행됩니다. 따라서 다른 JVM (그리고 다른 노드)에서 실행중인 다른 클래스 인스턴스간에 정적 변수를 공유 할 수있는 방법은 없습니다.

    분산 Hadoop 클러스터에서 각 Map / Reduce 작업은 자체 JVM에서 실행됩니다. 따라서 다른 JVM (그리고 다른 노드)에서 실행중인 다른 클래스 인스턴스간에 정적 변수를 공유 할 수있는 방법은 없습니다.

    그러나 작업간에 불변의 데이터를 공유하려면 Configuration 클래스를 사용할 수 있습니다.

    // driver code
    Configuration config = Configuration.create();
    config.setLong("foo.bar.somelong",1337);
    ...
    
    // mapper code
    public class SomeMapper ... {
        private long someLong = 0;
        public void setup(Context context) {
            Configuration config = context.getConfiguration();
            someLong = config.getLong("foo.bar.somelong");
        }
    }
    
  2. from https://stackoverflow.com/questions/24280415/hadoop-map-reduce-task-and-static-variable by cc-by-sa and MIT license