[HADOOP] hadoop의 여러 매퍼
HADOOPhadoop의 여러 매퍼
하나의 작업을 사용하는 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.두 매퍼는 동시에 같은 파일을 읽을 수 없습니다.
두 매퍼는 동시에 같은 파일을 읽을 수 없습니다.
해결 방법 (해결 방법) : 입력 파일의 복제본을 만듭니다 (이 경우 중복 된 rec 파일을 rec1로 만듭니다). 그런 다음 mapper1에 rec와 mapper2를 rec1로 입력하십시오.
두 매퍼가 병렬로 실행되므로 매퍼 출력이 모두 셔플되어 두 파일의 등가 키가 동일한 감속기로 이동하므로 감속기 출력에 대해 걱정할 필요가 없습니다.
그래서 출력은 당신이 원하는 것입니다.
희망이 비슷한 문제에 직면하고 다른 사람들에게 도움이됩니다.
-
==============================
2.동일한 파일에서 동시에 두 개의 별도 Mappers를 읽을 수는 없습니다. 적어도 피해야 할 악의적 인 hack-ish 속임수는 없습니다.
동일한 파일에서 동시에 두 개의 별도 Mappers를 읽을 수는 없습니다. 적어도 피해야 할 악의적 인 hack-ish 속임수는 없습니다.
어쨌든 동일한 작업에 대해 두 개의 Mapper 클래스를 설정할 수 없습니다. setMapperClass (클래스)에 대한 후자 호출은 항상 이전 작업을 덮어 씁니다. 두 개의 Mappers를 동시에 실행해야하는 경우 두 개의 별도 작업을 만들어야하며 클러스터에서 동시에 사용할 수있는 충분한 매퍼가 있어야합니다 (첫 번째 작업이 두 번째 작업을 시작한 후 사용할 수있는 것이없는 경우) 작업이 완료 될 때까지 기다려야하며 동시에 실행되는 것이 아니라 순차적으로 실행되어야합니다.)
그러나 Mappers가 동시에 실행된다는 보장이 없기 때문에 MapReduce 작업의 기능이 동시 실행에 의존하지 않도록하십시오.
from https://stackoverflow.com/questions/16207799/multiple-mappers-in-hadoop by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Jobtracker API 오류 - localhost / 127.0.0.1에 대한 호출 : 로컬 예외에서 50030 실패 : java.io.EOFException (0) | 2019.06.28 |
---|---|
[HADOOP] 하이브 JDBC getConnection이 반환하지 않습니다. (0) | 2019.06.28 |
[HADOOP] 스파크 데이터 프레임 : 기둥 기반 피벗 및 그룹 (0) | 2019.06.28 |
[HADOOP] 마스터 'yarn'으로 실행하는 경우 HADOOP_CONF_DIR 또는 YARN_CONF_DIR을 환경에 설정해야합니다. (0) | 2019.06.28 |
[HADOOP] Avro와 MR을 사용하지 않고 Java API를 사용하여 HDFS에 쪽모작 형식 작성 (0) | 2019.06.28 |