복붙노트

[HADOOP] reudcer 클래스에서 전역 변수 사용

HADOOP

reudcer 클래스에서 전역 변수 사용

내 mapreduce 프로그램에서 전역 변수를 사용하여 코드를 다음 코드에서 설정하고 감속기에서 전역 변수를 사용하는 방법이 필요합니다.

public class tfidf
{
  public static tfidfMap..............
  {
  }
  public static tfidfReduce.............
  {
  }
  public static void main(String args[])
  {
       Configuration conf=new Configuration();
       conf.set("","");
  } 

}

해결법

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

    1.템플릿 코드는 다음과 같을 수 있습니다 (감속기는 표시되지 않지만 동일한 주체입니다)

    템플릿 코드는 다음과 같을 수 있습니다 (감속기는 표시되지 않지만 동일한 주체입니다)

    import java.io.IOException;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.conf.Configured;
    import org.apache.hadoop.io.LongWritable;
    import org.apache.hadoop.io.Text;
    import org.apache.hadoop.mapreduce.Job;
    import org.apache.hadoop.mapreduce.Mapper;
    import org.apache.hadoop.mapreduce.Mapper.Context;
    import org.apache.hadoop.util.Tool;
    import org.apache.hadoop.util.ToolRunner;
    
    public class ToolExample extends Configured implements Tool {
    
        @Override
        public int run(String[] args) throws Exception {
            Job job = new Job(getConf());
            Configuration conf = job.getConfiguration();
    
            conf.set("strProp", "value");
            conf.setInt("intProp", 123);
            conf.setBoolean("boolProp", true);
    
            // rest of your config here
            // ..
    
            return job.waitForCompletion(true) ? 0 : 1;
        }
    
        public static class MyMapper extends
                Mapper<LongWritable, Text, LongWritable, Text> {
            private String strProp;
            private int intProp;
            private boolean boolProp;
    
            @Override
            protected void setup(Context context) throws IOException,
                    InterruptedException {
                Configuration conf = context.getConfiguration();
    
                strProp = conf.get("strProp");
                intProp = conf.getInt("intProp", -1);
                boolProp = conf.getBoolean("boolProp", false);
            }
        }
    
        public static void main(String args[]) throws Exception {
            System.exit(ToolRunner.run(new ToolExample(), args));
        }
    }
    
  2. ==============================

    2.클러스터 (로컬이 아닌) 환경에서 map / reduce 프로그램이 Java로 작성된 경우 MapReduce 프로그램은 자체 JVM에서 실행됩니다 (다른 언어에서는 별도 프로세스). 이를 통해 클래스에서 정적 변수 및 값을 선언하고 MapReduce 플로우의 방향을 변경하고 다른 JVM에서 값을 예상 할 수 없습니다. 공유 객체는 mapper / reduce가 값을 설정하고 가져올 수 있도록 필요한 것입니다.

    클러스터 (로컬이 아닌) 환경에서 map / reduce 프로그램이 Java로 작성된 경우 MapReduce 프로그램은 자체 JVM에서 실행됩니다 (다른 언어에서는 별도 프로세스). 이를 통해 클래스에서 정적 변수 및 값을 선언하고 MapReduce 플로우의 방향을 변경하고 다른 JVM에서 값을 예상 할 수 없습니다. 공유 객체는 mapper / reduce가 값을 설정하고 가져올 수 있도록 필요한 것입니다.

    이것을 달성 할 수있는 방법은 거의 없습니다.

  3. ==============================

    3.하둡 카운터 (사용자 정의)는 다른 종류의 전역 변수입니다. 이 값은 작업이 완료된 후에 볼 수 있습니다. 예 : 입력 (여러 매퍼 / 축소기에 의해 처리되는 오류 / 양호한 레코드 수)을 계산하려면 카운터로 이동하십시오. @ 모 : 요구 사항에 카운터를 사용할 수 있습니다.

    하둡 카운터 (사용자 정의)는 다른 종류의 전역 변수입니다. 이 값은 작업이 완료된 후에 볼 수 있습니다. 예 : 입력 (여러 매퍼 / 축소기에 의해 처리되는 오류 / 양호한 레코드 수)을 계산하려면 카운터로 이동하십시오. @ 모 : 요구 사항에 카운터를 사용할 수 있습니다.

  4. from https://stackoverflow.com/questions/16222205/use-global-variable-in-reudcer-class by cc-by-sa and MIT license