[HADOOP] reudcer 클래스에서 전역 변수 사용
HADOOPreudcer 클래스에서 전역 변수 사용
내 mapreduce 프로그램에서 전역 변수를 사용하여 코드를 다음 코드에서 설정하고 감속기에서 전역 변수를 사용하는 방법이 필요합니다.
public class tfidf
{
public static tfidfMap..............
{
}
public static tfidfReduce.............
{
}
public static void main(String args[])
{
Configuration conf=new Configuration();
conf.set("","");
}
}
해결법
-
==============================
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.클러스터 (로컬이 아닌) 환경에서 map / reduce 프로그램이 Java로 작성된 경우 MapReduce 프로그램은 자체 JVM에서 실행됩니다 (다른 언어에서는 별도 프로세스). 이를 통해 클래스에서 정적 변수 및 값을 선언하고 MapReduce 플로우의 방향을 변경하고 다른 JVM에서 값을 예상 할 수 없습니다. 공유 객체는 mapper / reduce가 값을 설정하고 가져올 수 있도록 필요한 것입니다.
클러스터 (로컬이 아닌) 환경에서 map / reduce 프로그램이 Java로 작성된 경우 MapReduce 프로그램은 자체 JVM에서 실행됩니다 (다른 언어에서는 별도 프로세스). 이를 통해 클래스에서 정적 변수 및 값을 선언하고 MapReduce 플로우의 방향을 변경하고 다른 JVM에서 값을 예상 할 수 없습니다. 공유 객체는 mapper / reduce가 값을 설정하고 가져올 수 있도록 필요한 것입니다.
이것을 달성 할 수있는 방법은 거의 없습니다.
-
==============================
3.하둡 카운터 (사용자 정의)는 다른 종류의 전역 변수입니다. 이 값은 작업이 완료된 후에 볼 수 있습니다. 예 : 입력 (여러 매퍼 / 축소기에 의해 처리되는 오류 / 양호한 레코드 수)을 계산하려면 카운터로 이동하십시오. @ 모 : 요구 사항에 카운터를 사용할 수 있습니다.
하둡 카운터 (사용자 정의)는 다른 종류의 전역 변수입니다. 이 값은 작업이 완료된 후에 볼 수 있습니다. 예 : 입력 (여러 매퍼 / 축소기에 의해 처리되는 오류 / 양호한 레코드 수)을 계산하려면 카운터로 이동하십시오. @ 모 : 요구 사항에 카운터를 사용할 수 있습니다.
from https://stackoverflow.com/questions/16222205/use-global-variable-in-reudcer-class by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] HDFS에서 파일 이름 만 나열하는 방법 (0) | 2019.07.11 |
---|---|
[HADOOP] MapReduce (보조) 정렬 / 필터링 - 어떻게? (0) | 2019.07.11 |
[HADOOP] 매퍼 클래스를 찾을 수 없음 (0) | 2019.07.11 |
[HADOOP] Windows의 Hadoop [폐쇄] (0) | 2019.07.11 |
[HADOOP] 배수 Hadoop FileSystem 인스턴스 (0) | 2019.07.11 |