[HADOOP] 아래 코드에서 객체가 어떻게 생성됩니까?
HADOOP아래 코드에서 객체가 어떻게 생성됩니까?
하나의 Java 코드를 이해하려고합니다. (Java 기본 지식)
여기있다.
WordCountMapper 클래스
package com.company;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import java.io.IOException;
public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
@Override
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String line = value.toString();
for (String word : line.split(" ")) {
if (word.length() > 0) {
context.write(new Text(word), new IntWritable(1));
}
}
매퍼 클래스
package org.apache.hadoop.mapreduce;
import java.io.IOException;
import org.apache.hadoop.classification.InterfaceAudience.Public;
import org.apache.hadoop.classification.InterfaceStability.Stable;
@InterfaceAudience.Public
@InterfaceStability.Stable
public class Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT> {
public Mapper() {
}
protected void setup(Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>.Context context)
throws IOException, InterruptedException {
}
protected void map(KEYIN key, VALUEIN value, Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>.Context context)
throws IOException, InterruptedException {
context.write(key, value);
}
protected void cleanup(Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>.Context context)
throws IOException, InterruptedException {
}
public void run(Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>.Context context) throws IOException, InterruptedException {
setup(context);
while (context.nextKeyValue()) {
map(context.getCurrentKey(), context.getCurrentValue(), context);
}
cleanup(context);
}
public abstract class Context implements MapContext<KEYIN, VALUEIN, KEYOUT, VALUEOUT> {
public Context() {
}
}
}
기본 메소드 클래스
package com.company;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public class WordCount {
public static void main(String[] args) throws Exception {
if(args.length !=2){
System.err.println("Invalid Command");
System.err.println("Usage: WordCount <input path> <output path>");
System.exit(0);
}
Configuration conf = new Configuration();
Job job = new Job(conf, "wordcount");
job.setJarByClass(WordCount.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
job.setMapperClass(WordCountMapper.class);
job.setReducerClass(WordCountReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
}
내 의심은 WordCount 클래스에 어떻게 텍스트 가치가 존재하게 될까요? 나는 그것의 객체를 의미하지만 생성되는 곳은 Text 클래스의 인스턴스를 인스턴스화하기위한 main 메소드 클래스의 사인이 없다.
그리고 이것이 의미하는 바는 - 나는 아래의 형식처럼 클래스를 생성하기 전에 이것을 본 적이 없다.
public class Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>
{
어떤 제안?
해결법
-
==============================
1.붙여 넣은 코드는 Hadoop MapReduce 프레임 워크를 사용하여 실행됩니다.
붙여 넣은 코드는 Hadoop MapReduce 프레임 워크를 사용하여 실행됩니다.
기본적으로 여기에 세 개의 클래스가 있습니다.
실제로 나는 당신의 질문에 WordCountReducer 클래스를 예상했을 것입니다,하지만 거기에없는 것 같습니다.
어떤 방식 으로든 : 텍스트는 Hadoop 클러스터에 파일로 복사하여 "존재하게 될 것"이며 작업을 실행하기 전에 HDFS (Hadoop File System)에 있어야합니다.
이 코드 행은 하나의 HDFS 경로를 나타냅니다.
FileInputFormat.addInputPath(job, new Path(args[0]));
그리고 코드에 관한 질문 :
public class Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>
이들은 매퍼 (mapper)를 서브 클래스 할 때마다 선언되어야하는 제네릭 타입 (이 튜토리얼 참조)이다.
WordCount 매퍼는 실제로이 Mapper 클래스를 하위 클래스로 지정하고 네 가지 유형을 지정합니다.
public class WordCountMapper extends Mapper<LongWritable,Text,Text,IntWritable>
다음은 해당 사항입니다.
KEYIN = LongWritable VALUEIN = Text KEYOUT = Text VALUEOUT = IntWritable
-
==============================
2.Hadoop API는 필요한 클래스를 생성합니다.
Hadoop API는 필요한 클래스를 생성합니다.
선택적으로 InputFormat을 설정할 수 있습니다.이 형식은 setMapperClass (KEYIN, VALUEIN 필드)의 클래스에서 사용하는 입력 형식과 동일해야합니다. 마찬가지로 출력 형식도 설정되며 감속기의 입력과 출력이 있습니다.
기본 형식은 LongWritable, Text 키 값 쌍을 읽는 TextInputFormat입니다. InputSplit 클래스는 FileSystem에서 바이트를 읽고 Mapper에 전달되는 Writable 클래스를 작성합니다.
당신이 직업을 시작할 때까지 아무 것도 창조되지 않는다는 것을 언급할만한 가치가 있습니다.
System.exit(job.waitForCompletion(true) ? 0 : 1);
from https://stackoverflow.com/questions/46862129/how-object-is-getting-generated-in-below-code by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Map 이클립스 2.4.1에 대한 클라이언트 jar 줄이기 (0) | 2019.07.02 |
---|---|
[HADOOP] mongo 's out과 동등 : hadoop의 옵션 감소 (0) | 2019.07.02 |
[HADOOP] 하이브에서 XML 태그 반복 구문 분석 (0) | 2019.07.02 |
[HADOOP] Google Bigquery : 호환되지 않는 테이블 분할 사양 (0) | 2019.07.02 |
[HADOOP] override SemanticException [오류 10001] (0) | 2019.07.02 |