복붙노트

[HADOOP] hadoop의 여러 매퍼

HADOOP

hadoop의 여러 매퍼

하나의 작업을 사용하는 hadoop 프로그램에서 동일한 입력 파일에 2 개의 독립적 인 매퍼를 실행하려고합니다. 두 매퍼의 출력을 하나의 감속기에 넣기를 원합니다. 여러 매퍼를 실행하는 데 문제가 있습니다. MultipleInputs 클래스를 사용하고있었습니다. 두 맵퍼를 모두 실행해도 정상적으로 작동했지만 어제는 두 번째 MultipleInputs 문이 첫 번째 맵 함수를 덮어 쓰는 것처럼 보이는지도 함수가 하나만 실행된다는 것을 알게되었습니다. 나는이 다른 행동을 갑자기 보여주기 위해 코드를 변경 한 것을 발견하지 못했다. (제발 도와주세요 .. 주요 기능은 다음과 같습니다.

    public static void main(String[] args) throws Exception {
            Configuration conf = new Configuration();
            Job job = new Job(conf, "mapper accepting whole file at once");          
            job.setOutputKeyClass(IntWritable.class);
            job.setOutputValueClass(IntWritable.class);
            job.setJarByClass(TestMultipleInputs.class);
            job.setMapperClass(Map2.class);    
            job.setMapperClass(Map1.class);  
            job.setReducerClass(Reduce.class);  
            job.setInputFormatClass(NLinesInputFormat.class);
            job.setOutputFormatClass(TextOutputFormat.class);
            job.setMapOutputKeyClass(IntWritable.class);
**  MultipleInputs.addInputPath(job, new Path("Rec"), NLinesInputFormat.class, Map1.class);
    MultipleInputs.addInputPath(job, new Path("Rec"), NLinesInputFormat.class, Map2.class);**    
            FileOutputFormat.setOutputPath(job,new Path("testMulinput"));
              job.waitForCompletion(true);
}

어떤 Map 클래스가 마지막 MultipleInputs 문에서 사용되는지가 실행됩니다. 여기 에서처럼 Map2.class가 실행됩니다.

해결법

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

    1.두 매퍼는 동시에 같은 파일을 읽을 수 없습니다.

    두 매퍼는 동시에 같은 파일을 읽을 수 없습니다.

    해결 방법 (해결 방법) : 입력 파일의 복제본을 만듭니다 (이 경우 중복 된 rec 파일을 rec1로 만듭니다). 그런 다음 mapper1에 rec와 mapper2를 rec1로 입력하십시오.

    두 매퍼가 병렬로 실행되므로 매퍼 출력이 모두 셔플되어 두 파일의 등가 키가 동일한 감속기로 이동하므로 감속기 출력에 대해 걱정할 필요가 없습니다.

    그래서 출력은 당신이 원하는 것입니다.

    희망이 비슷한 문제에 직면하고 다른 사람들에게 도움이됩니다.

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

    2.동일한 파일에서 동시에 두 개의 별도 Mappers를 읽을 수는 없습니다. 적어도 피해야 할 악의적 인 hack-ish 속임수는 없습니다.

    동일한 파일에서 동시에 두 개의 별도 Mappers를 읽을 수는 없습니다. 적어도 피해야 할 악의적 인 hack-ish 속임수는 없습니다.

    어쨌든 동일한 작업에 대해 두 개의 Mapper 클래스를 설정할 수 없습니다. setMapperClass (클래스)에 대한 후자 호출은 항상 이전 작업을 덮어 씁니다. 두 개의 Mappers를 동시에 실행해야하는 경우 두 개의 별도 작업을 만들어야하며 클러스터에서 동시에 사용할 수있는 충분한 매퍼가 있어야합니다 (첫 번째 작업이 두 번째 작업을 시작한 후 사용할 수있는 것이없는 경우) 작업이 완료 될 때까지 기다려야하며 동시에 실행되는 것이 아니라 순차적으로 실행되어야합니다.)

    그러나 Mappers가 동시에 실행된다는 보장이 없기 때문에 MapReduce 작업의 기능이 동시 실행에 의존하지 않도록하십시오.

  3. from https://stackoverflow.com/questions/16207799/multiple-mappers-in-hadoop by cc-by-sa and MIT license