복붙노트

[HADOOP] 지도 축소를 위해 여러 개의 출력 파일을 가질 수 있습니까?

HADOOP

지도 축소를 위해 여러 개의 출력 파일을 가질 수 있습니까?

내 입력 파일에는 국가로 열이 있습니다. 이제는 특정 국가의 레코드를 해당 국가의 파일 이름에 배치하는 작업을 수행합니다. Map-reduce에서이 작업을 수행 할 수 있습니까? 이와 관련하여 의견을 공유하십시오.

해결법

  1. ==============================

    1.예, hadoop에서 generateFileNameForKeyValue 메소드를 사용하여 MultipleOutputFormat을 사용하여 정확히 수행 할 수 있습니다.

    예, hadoop에서 generateFileNameForKeyValue 메소드를 사용하여 MultipleOutputFormat을 사용하여 정확히 수행 할 수 있습니다.

    국가 이름을 키로 사용하고 레코드를 값으로 사용하면 필요에 따라 정확하게 작동해야합니다.

  2. ==============================

    2.새 API를 사용하는 경우 MultipleOutputs 클래스를 살펴 봐야합니다. 이 클래스 안에 예제가 있습니다.

    새 API를 사용하는 경우 MultipleOutputs 클래스를 살펴 봐야합니다. 이 클래스 안에 예제가 있습니다.

    작업 제출에 대한 사용 패턴 :

    
    
    
        Job job = new Job();
    
        FileInputFormat.setInputPath(job, inDir);
        FileOutputFormat.setOutputPath(job, outDir);
    
        job.setMapperClass(MOMap.class);
        job.setReducerClass(MOReduce.class);
        ...
    
        // Defines additional single text based output 'text' for the job
        MultipleOutputs.addNamedOutput(job, "text", TextOutputFormat.class,
        LongWritable.class, Text.class);
    
        // Defines additional sequence-file based output 'sequence' for the job
        MultipleOutputs.addNamedOutput(job, "seq",
          SequenceFileOutputFormat.class,
          LongWritable.class, Text.class);
        ...
    
        job.waitForCompletion(true);
        ...
    
    

    감속기의 사용법 :

    
    
        String generateFileName(K k, V v) {
           return k.toString() + "_" + v.toString();
        }
    
        public class MOReduce extends
           Reducer {
             private MultipleOutputs mos;
             public void setup(Context context) {
              ...
                  mos = new MultipleOutputs(context);
              }
    
             public void reduce(WritableComparable key, Iterator values,
                    Context context)
                    throws IOException {
              ...
         mos.write("text", , key, new Text("Hello"));
         mos.write("seq", LongWritable(1), new Text("Bye"), "seq_a");
         mos.write("seq", LongWritable(2), key, new Text("Chau"), "seq_b");
         mos.write(key, new Text("value"), generateFileName(key, new Text("value")));
         ...
          }
    
        public void cleanup(Context) throws IOException {
             mos.close();
         ...
        }
       }
    
    
  3. from https://stackoverflow.com/questions/16438615/is-it-possible-to-have-multiple-output-files-for-a-map-reduce by cc-by-sa and MIT license