첫 번째지도 축소 작업의 출력에서 다른지도 축소 작업의 입력으로 복잡한 값 (쓰기 가능 구현)을 이동해야합니다. 첫 번째 작업의 결과가 파일에 저장되었습니다. 파일은 텍스트 데이터 또는 BytesWritable (기본 출력 \ 입력 형식)을 저장할 수 있습니다. 그래서 Writable을 Text 나 To BytesWritable로 변환하는 간단한 방법이 필요합니다. 그것이 존재합니까? 이 작업을 수행 할 수있는 다른 방법은 없습니까? 감사합니다.Hadoop 작업에서 복잡한 쓰기 가능한 값을 저장하고 읽음
답변
사용자가 정확합니다. SequenceFileOutputFormat을 사용하십시오. SequenceFile은 Text Writable로 변환하지 않고이 정확한 문제를 해결합니다. 작업을 설정할 때 사용중인 쓰기 가능한 하위 클래스를 설정하는 job.setOutputKeyClass 및 job.setOutputValueClass를 사용
job.setOutputKeyClass(MyWritable1.class);
job.setOutputValueClass(MyWritable2.class);
job.setOutputFormatClass(SequenceFileOutputFormat.class);
이 당신의 Writables를 저장하기 위해 하둡 SequenceFile 형식을 사용합니다. 원래 이전 작업의 출력으로 지정된 두 개의 쓰기 가능 클래스가 될 것입니다이 작업의 매퍼에 대한
job.setInputFormatClass(SequenceFileInputFormat.class);
그런 다음 입력 키와 값 : 그런 다음 작업에서, SequenceFileInputFormat를 사용합니다.
복잡한 Writable 하위 클래스가 올바르게 구현되는 것이 중요합니다. 빈 생성자가 있어야한다는 것 외에도 클래스의 Writable 필드가 정보를 쓰고 읽도록 write 및 readFields 메서드를 구현해야합니다.
나는 간단하게 유지하는 팬이므로이 주석을이 주석에 추가 할 것입니다. 어떤 시점에서 Java API 이외의 다른 것을 사용하여 파일을 읽으려는 경우 언어 독립적 인 직렬화 형식 인 Avro 대신에 Avro를 사용하려고합니다. 돼지와 같은 유용한 도구 나 MapReduce 스트리밍과 호환되는 모든 프로그램으로 데이터를 쉽게 처리 할 수 있습니다. SequenceFiles를 사용하고 후회할 때의 고통을 겪었습니다.이 질문을보십시오 : http://stackoverflow.com/questions/18884666/handling-writables-fully-qualified-name-changes-in-hadoop-sequencefile –
필자는 직접 시도하지 않았지만 출력을 시퀀스 파일에 쓸 수 있으며 변환이 필요하지 않을 수도 있습니다. 누군가 다른 사람이이를 상세히 설명 할 수있을 것입니다. 그것은 당신을 시작할 수 있습니다. http://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapred/SequenceFileOutputFormat.html – DDW