[HADOOP] 하둡의 기본 정렬을 무시하는 방법
HADOOP하둡의 기본 정렬을 무시하는 방법
나는 키가 1-200에서 숫자되는지도-감소 작업을해야합니다. 내 의도 출력은 숫자 순서 (숫자 값)이었다. 하지만 출력을 같이 받고 있어요 :
1 value
10 value
11 value
:
:
2 value
20 value
:
:
3 value
나는 이것이의 기본 동작에 의한 알고 오름차순으로 키를 정렬하는지도-줄입니다.
내 키는 숫자 순으로 만 정렬하고 싶습니다. 이걸 어떻게 달성 할 수 있습니까?
해결법
-
==============================
1.키가 IntWritable 인 경우 맵리 듀스 프레임 워크의 기본 WritableComparator은 정상적으로 수치 주문을 처리 할 것입니다. 나는 그것을 따라서 귀하의 경우 사전 편찬 순서의 결과로 텍스트 키를 점점 생각한다. 값을 방출하는 IntWritable 키를 사용하여 샘플 코드에서 참조하시기 바랍니다 :
키가 IntWritable 인 경우 맵리 듀스 프레임 워크의 기본 WritableComparator은 정상적으로 수치 주문을 처리 할 것입니다. 나는 그것을 따라서 귀하의 경우 사전 편찬 순서의 결과로 텍스트 키를 점점 생각한다. 값을 방출하는 IntWritable 키를 사용하여 샘플 코드에서 참조하시기 바랍니다 :
1) 매퍼 구현
package com.stackoverflow.answers.mapreduce; import java.io.IOException; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; public class SourceFileMapper extends Mapper<LongWritable, Text, IntWritable, Text> { private static final String DEFAULT_DELIMITER = "\t"; private IntWritable keyToEmit = new IntWritable(); private Text valueToEmit = new Text(); public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String line = value.toString(); keyToEmit.set(Integer.parseInt(line.split(DEFAULT_DELIMITER)[0])); valueToEmit.set(line.split(DEFAULT_DELIMITER)[1]); context.write(keyToEmit, valueToEmit); } }
2) 감속기 구현
package com.stackoverflow.answers.mapreduce; import java.io.IOException; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Reducer; public class SourceFileReducer extends Reducer<IntWritable, Text, IntWritable, Text> { public void reduce(IntWritable key, Iterable<Text> values, Context context) throws IOException, InterruptedException { for (Text value : values) { context.write(key, value); } } }
3) 드라이버 구현
package com.stackoverflow.answers.mapreduce; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; 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.input.TextInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat; public class SourceFileDriver { public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException { Path inputPath = new Path(args[0]); Path outputDir = new Path(args[1]); // Create configuration Configuration conf = new Configuration(true); // Create job Job job = new Job(conf, "SourceFileDriver"); job.setJarByClass(SourceFileDriver.class); // Setup MapReduce job.setMapperClass(SourceFileMapper.class); job.setReducerClass(SourceFileReducer.class); job.setNumReduceTasks(1); // Specify key / value job.setOutputKeyClass(IntWritable.class); job.setOutputValueClass(Text.class); // Input FileInputFormat.addInputPath(job, inputPath); job.setInputFormatClass(TextInputFormat.class); // Output FileOutputFormat.setOutputPath(job, outputDir); job.setOutputFormatClass(TextOutputFormat.class); // Delete output if exists FileSystem hdfs = FileSystem.get(conf); if (hdfs.exists(outputDir)) hdfs.delete(outputDir, true); // Execute job int code = job.waitForCompletion(true) ? 0 : 1; System.exit(code); } }
감사합니다!
-
==============================
2.내가 추측을해야한다면, 나는 당신이 IntWritable 객체를 텍스트 객체로 번호를 저장하고 있지 말 것.
내가 추측을해야한다면, 나는 당신이 IntWritable 객체를 텍스트 객체로 번호를 저장하고 있지 말 것.
하나 이상의 감속기를 일단 어느 쪽이든은, 감속기 내에서만 항목이 정렬됩니다 있지만 완전히 정렬되지 않습니다.
from https://stackoverflow.com/questions/28898810/how-to-override-the-default-sorting-of-hadoop by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 감속기로 GZIP을 사용하여 손상된 데이터를 생성 (0) | 2019.10.08 |
---|---|
[HADOOP] 저장 및 하둡 작업의 복잡한 쓰기 가능한 값을 읽어 (0) | 2019.10.08 |
[HADOOP] 피닉스 JDBC 작동, 예외없이와 붙어하지 않습니다 (0) | 2019.10.07 |
[HADOOP] 지도 출력 파일을 줄이기 : 파트 R- * 및 파트 - * (0) | 2019.10.07 |
[HADOOP] 실행 하둡은 브라우저에서 명령 (0) | 2019.10.07 |