중복 제거를 위해 Map/Reduce를 사용하고 작업에 여러 대의 컴퓨터를 사용하려는 경우 에이 있으면 네트워크를 통해 모든 데이터를 전송할 수 있습니다. 이것이 하둡이하는 일입니다!
물론 한 대의 컴퓨터에서 모든 것을 실행할 수도 있습니다. 시간이 오래 걸릴 것입니다. 핵심에서 중복 제거는 Hadoop이 자연스럽게 수행하는 기능 중 하나이며 대부분의 기능을 무료로 사용할 수 있습니다. Hadoop은 Map 단계에서 모든 "키"를 해시하고 "키"에 속한 모든 "값"이 같은 감속기.
작업 자체는 매우 간단합니다. 실제로는 가장 간단한 Map/Reduce 작업 중 하나 인 WordCount 예제와 거의 같습니다. 카운트 출력을 건너 뛰고 키만 출력하십시오 (값으로 NullWritable 사용). 아래에지도를 포함하고 기능을 축소했습니다. 참고 : 리 듀서에 N 개의 여러 기계를 사용하는 경우 하나의 파일을 되 찾으려면 각 감속기의 결과 N 출력 파일을 연결해야합니다. 여기 코드는 다음과 같습니다
public void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
String line = value.toString(); //process your data here
context.write(line, NullWritable.get());
}
public void reduce(Text key, Iterable<IntWritable> values, Context context)
throws IOException, InterruptedException {
context.write(key, NullWritable.get());
}
편집 1 : 다른 대답에 의해 제안 결합기를 사용하려는 경우, 당신은 그렇게 쉽게 할 수 있습니다. 데이터가 네트워크를 통해 전송되기 전에 결합기가 실행되므로 로컬 Reducer로 간주 할 수 있습니다. 그냥 설정
job.setCombinerClass(Reduce.class);
여기서 Reduce는 reduce() 메소드가 포함 된 클래스입니다.
편집 2 : 당신은 단지 다루는 문자열을 가지고 전혀 처리를 할 필요가없는 경우 value.toString()
이 불필요하고 필요한되지 않습니다 : 내가받은 제안에 따라 경찰. 그런 다음 Mapper
를 조금 단순화 수 :
public void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
context.write(value, NullWritable.get());
}