[HADOOP] Hadoop JobConf 클래스는 더 이상 사용되지 않으며 업데이트 된 예제가 필요합니다.
HADOOPHadoop JobConf 클래스는 더 이상 사용되지 않으며 업데이트 된 예제가 필요합니다.
나는 hadoop 프로그램을 작성 중이며, 더 이상 사용하지 않는 클래스를 가지고 놀고 싶지 않습니다. 어디서나 온라인 업데이트 된 프로그램을 찾을 수 없습니다.
수업 대신에
수업.
public static void main(String[] args) throws Exception {
JobConf conf = new JobConf(Test.class);
conf.setJobName("TESST");
conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(IntWritable.class);
conf.setMapperClass(Map.class);
conf.setCombinerClass(Reduce.class);
conf.setReducerClass(Reduce.class);
conf.setInputFormat(TextInputFormat.class);
conf.setOutputFormat(TextOutputFormat.class);
FileInputFormat.setInputPaths(conf, new Path(args[0]));
FileOutputFormat.setOutputPath(conf, new Path(args[1]));
JobClient.runJob(conf);
}
내 메인 () 모양입니다. 누구든지 업데이트 된 기능을 제게 제공 할 수 있습니까?
해결법
-
==============================
1.여기는 고전적인 WordCount 예제입니다. 필요하지 않을 수도있는 다른 수입품이 있음을 알게 될 것입니다. 알아낼 코드를 읽어보십시오.
여기는 고전적인 WordCount 예제입니다. 필요하지 않을 수도있는 다른 수입품이 있음을 알게 될 것입니다. 알아낼 코드를 읽어보십시오.
뭐가 달라? 도구 인터페이스와 GenericOptionParser를 사용하여 작업 명령 a.k.a : hadoop jar ....을 구문 분석합니다.
매퍼 (mapper)에서는 달리기를 보게 될 것입니다. 이 메소드는 Map 메소드의 코드를 제공 할 때 기본적으로 호출된다. 여기에 매핑 단계를 추가로 제어 할 수있는 정보를 제공합니다. 이것은 모두 새로운 API를 사용하고 있습니다. 유용하다고 생각하길 바랍니다. 다른 질문이라도 알려주세요.
import java.io.IOException; import java.util.*; import org.apache.commons.io.FileUtils; import org.apache.hadoop.conf.*; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.*; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.input.TextInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat; import org.apache.hadoop.util.Tool; import org.apache.hadoop.util.ToolRunner; import org.apache.hadoop.util.GenericOptionsParser; public class Inception extends Configured implements Tool{ public static class Map extends Mapper<LongWritable, Text, Text, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String line = value.toString(); StringTokenizer tokenizer = new StringTokenizer(line); while (tokenizer.hasMoreTokens()) { word.set(tokenizer.nextToken()); context.write(word, one); } } public void run (Context context) throws IOException, InterruptedException { setup(context); while (context.nextKeyValue()) { map(context.getCurrentKey(), context.getCurrentValue(), context); } cleanup(context); } } public static class Reduce extends Reducer<Text, IntWritable, Text, IntWritable> { public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { int sum = 0; for (IntWritable val : values) { sum += val.get(); } context.write(key, new IntWritable(sum)); } } public int run(String[] args) throws Exception { Job job = Job.getInstance(new Configuration()); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); job.setMapperClass(Map.class); job.setReducerClass(Reduce.class); job.setInputFormatClass(TextInputFormat.class); job.setOutputFormatClass(TextOutputFormat.class); FileInputFormat.setInputPaths(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); job.setJarByClass(WordCount.class); job.submit(); return 0; } public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs(); ToolRunner.run(new WordCount(), otherArgs); } }
-
==============================
2.또한 고전적인 WordCount를 예로 들어보십시오.
또한 고전적인 WordCount를 예로 들어보십시오.
org.apache.hadoop.mapred.JobConf가 오래되었습니다. 새 버전에서는 Configuration 및 Job을 사용합니다.
org.apache.hadoop.mapreduce.lib. * (새로운 API)를 org.apache.hadoop.mapred.TextInputFormat (오래된 것) 대신 사용하십시오.
매퍼 (Mapper)와 감속기 (Reducer)는 새로운 기능이 아니며 주요 기능을 참조하십시오. 상대적으로 전반적인 구성을 포함하고 있으며 특정 요구 사항에 따라 자유롭게 변경할 수 있습니다.
import java.io.IOException; import java.util.StringTokenizer; 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.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.input.TextInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat; class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> { private Text outputKey; private IntWritable outputVal; @Override public void setup(Context context) { outputKey = new Text(); outputVal = new IntWritable(1); } @Override public void map(Object key, Text value, Context context) throws IOException, InterruptedException { StringTokenizer stk = new StringTokenizer(value.toString()); while(stk.hasMoreTokens()) { outputKey.set(stk.nextToken()); context.write(outputKey, outputVal); } } } class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> { private IntWritable result; @Override public void setup(Context context) { result = new IntWritable(); } @Override public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { int sum = 0; for(IntWritable val: values) { sum += val.get(); } result.set(sum); context.write(key, result); } } public class WordCount { public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException { Configuration conf = new Configuration(); if(args.length != 2) { System.err.println("Usage: <in> <out>"); System.exit(2); } Job job = Job.getInstance(conf, "Word Count"); // set jar job.setJarByClass(WordCount.class); // set Mapper, Combiner, Reducer job.setMapperClass(TokenizerMapper.class); job.setCombinerClass(IntSumReducer.class); job.setReducerClass(IntSumReducer.class); /* Optional, set customer defined Partioner: * job.setPartitionerClass(MyPartioner.class); */ // set output key job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(IntWritable.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); // set input and output path FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); // by default, Hadoop use TextInputFormat and TextOutputFormat // any customer defined input and output class must implement InputFormat/OutputFormat interface job.setInputFormatClass(TextInputFormat.class); job.setOutputFormatClass(TextOutputFormat.class); System.exit(job.waitForCompletion(true) ? 0 : 1); } }
from https://stackoverflow.com/questions/8603788/hadoop-jobconf-class-is-deprecated-need-updated-example by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Hadoop 2.2 및 Maven (0) | 2019.06.13 |
---|---|
[HADOOP] HDFS 파일의 크기를 찾는 방법 (0) | 2019.06.13 |
[HADOOP] JDBC를 사용하여 Java에서 Hive로 연결 (0) | 2019.06.13 |
[HADOOP] hadoop.tmp.dir은 무엇이되어야합니까? (0) | 2019.06.13 |
[HADOOP] Hadoop 2.2.0 : "이름 또는 서비스를 알 수 없음"경고 (0) | 2019.06.13 |