[HADOOP] 어떻게 하둡 맵에서 브로 출력이 감소 쓰기?
HADOOP어떻게 하둡 맵에서 브로 출력이 감소 쓰기?
나는 TextInputFormat 입력을 받아, 브로 형식으로 출력 단어 개수로 생각 하나 개 하둡 단어 수 프로그램을 썼습니다.
지도 - 절감 작업이 잘 실행되고 있지만,이 작업의 출력은 유닉스가 더 많거나 VI와 같은 명령을 사용하여 읽을 수 있습니다. 나는 아 브로 출력이 바이너리 형식에서와 같이이 출력이 읽을 수 기다리고 있었다.
나는 감속기가 존재하지 만 매퍼를 사용했다. 난 그냥 아 브로 실험 할 그래서 메모리 또는 스택 오버 플로우에 대해 걱정하지입니다. 매퍼의 코드를 다음
public class WordCountMapper extends Mapper<LongWritable, Text, AvroKey<String>, AvroValue<Integer>> {
private Map<String, Integer> wordCountMap = new HashMap<String, Integer>();
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String[] keys = value.toString().split("[\\s-*,\":]");
for (String currentKey : keys) {
int currentCount = 1;
String currentToken = currentKey.trim().toLowerCase();
if(wordCountMap.containsKey(currentToken)) {
currentCount = wordCountMap.get(currentToken);
currentCount++;
}
wordCountMap.put(currentToken, currentCount);
}
System.out.println("DEBUG : total number of unique words = " + wordCountMap.size());
}
@Override
protected void cleanup(Context context) throws IOException, InterruptedException {
for (Map.Entry<String, Integer> currentKeyValue : wordCountMap.entrySet()) {
AvroKey<String> currentKey = new AvroKey<String>(currentKeyValue.getKey());
AvroValue<Integer> currentValue = new AvroValue<Integer>(currentKeyValue.getValue());
context.write(currentKey, currentValue);
}
}
}
다음과 같이 및 드라이버 코드는 다음과 같습니다
public int run(String[] args) throws Exception {
Job avroJob = new Job(getConf());
avroJob.setJarByClass(AvroWordCount.class);
avroJob.setJobName("Avro word count");
avroJob.setInputFormatClass(TextInputFormat.class);
avroJob.setMapperClass(WordCountMapper.class);
AvroJob.setInputKeySchema(avroJob, Schema.create(Type.INT));
AvroJob.setInputValueSchema(avroJob, Schema.create(Type.STRING));
AvroJob.setMapOutputKeySchema(avroJob, Schema.create(Type.STRING));
AvroJob.setMapOutputValueSchema(avroJob, Schema.create(Type.INT));
AvroJob.setOutputKeySchema(avroJob, Schema.create(Type.STRING));
AvroJob.setOutputValueSchema(avroJob, Schema.create(Type.INT));
FileInputFormat.addInputPath(avroJob, new Path(args[0]));
FileOutputFormat.setOutputPath(avroJob, new Path(args[1]));
return avroJob.waitForCompletion(true) ? 0 : 1;
}
나는 아 브로 출력의 모습과 내가이 프로그램에 잘못을하고있는 중이 야 무엇을 수행하는 방법을 알고 싶습니다.
해결법
-
==============================
1.아 브로 라이브러리의 최신 버전은 MRv2 채택 자신의 ColorCount 예제의 업데이트 된 예제를 포함하고 있습니다. 나는 당신이 그것을보고 그들이 클래스를 줄이거 나 단지 AvroMapper을 확장에서 사용하는 것과 동일한 패턴을 사용하는 것이 좋습니다. 대신 AvroKey + AvroValue의 쌍 클래스를 사용하는 것도 하둡에 브로를 실행하기위한 필수적인 있습니다.
아 브로 라이브러리의 최신 버전은 MRv2 채택 자신의 ColorCount 예제의 업데이트 된 예제를 포함하고 있습니다. 나는 당신이 그것을보고 그들이 클래스를 줄이거 나 단지 AvroMapper을 확장에서 사용하는 것과 동일한 패턴을 사용하는 것이 좋습니다. 대신 AvroKey + AvroValue의 쌍 클래스를 사용하는 것도 하둡에 브로를 실행하기위한 필수적인 있습니다.
from https://stackoverflow.com/questions/21876062/how-to-write-avro-output-in-hadoop-map-reduce by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 하둡 스트리밍 파일 읽기 (0) | 2019.10.15 |
---|---|
[HADOOP] 돼지 스크립트를 통해 매개 변수를 전달하면 오류 점점 (0) | 2019.10.15 |
[HADOOP] 대형 데이터 세트를위한 맵리 듀스 코드를 실행하는 동안 Java 힙 공간 오류가 (0) | 2019.10.15 |
[HADOOP] 코드 블록에 대한 magic.wand 기능 사용 (0) | 2019.10.15 |
[HADOOP] 만에 의해 종료 LINES 지금은 '\ n'은 줄 바꿈을 지원합니다 (0) | 2019.10.15 |