하둡은 기본적으로 병합 소팅 프레임워크이다. 문자열 소팅은 맵퍼와 리듀서를 별도로 구현하지 않아도 수팅이 가능하다. 맵퍼와 리듀서의 기본 클래스를 아이덴터티 맵퍼, 리듀서라고 하는데 아이덴터티 맵퍼와 리듀서로 문자열 소팅이 가능하다.
즉 다음의 메인 코드만으로도 텍스트 소팅이 가능하다.
public class stringsort { public static void main(String[] args) { Configuration conf=new Configuration(); try { Job job=Job.getInstance(); job.setJarByClass(stringsort.class); job.setMapperClass(Mapper.class); job.setReducerClass(Reducer.class);
job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(Text.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(Text.class);
job.setInputFormatClass(KeyValueTextInputFormat.class); job.setOutputFormatClass(SequenceFileOutputFormat.class);
FileInputFormat.addInputPath(job, new Path(args[0])); SequenceFileOutputFormat.setOutputPath(job, new Path(args[1])); SequenceFileOutputFormat.setOutputCompressionType(job, SequenceFile.CompressionType.BLOCK); job.waitForCompletion(true); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } System.exit(-1); } } |
이 코드에서 출력 저장은 SequenceFileOutputFormat을 이용하였다. 결과를 보려면 hdfs dfs -cat 명령으로 하지 말고 hdfs dfs -text 로 출력을 봐야 한다.