복붙노트

[HADOOP] 단일 JVM에서 hadoop 멀티 스레드 방식을 실행하는 방법은 무엇입니까?

HADOOP

단일 JVM에서 hadoop 멀티 스레드 방식을 실행하는 방법은 무엇입니까?

나는 4 코어 데스크탑을 가지고 있으며 hadoop으로 로컬 데이터 처리를 위해 모든 코어를 사용하고 싶습니다. (때로는 로컬에서 데이터를 처리 할 수있는 충분한 권한이있는 경우가 있습니다. 때때로 동일한 작업을 클러스터에 제출합니다).

기본적으로 hadoop 로컬 모드는 하나의 매퍼와 하나의 감속기를 실행하므로 로컬 작업이 실제로 느립니다. "고통스러운"구성으로 인해 단일 머신에서 클러스터를 먼저 설정하고 싶지 않으며 매번 jar를 작성해야합니다. 완벽한 솔루션은 단일 머신에서 임베디드 Hadoop을 실행하는 방법입니다.

PS 의사 분산 모드는 단일 노드로 클러스터를 생성하기 때문에 잘못된 옵션이므로 매퍼를 하나만 가져오고 추가 구성에 시간을 소비해야합니다.

해결법

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

    1.MultithreadedMapRunner를 사용해야합니다. JobConf의 setMapRunnerClass 메소드에서 설정하고 mapred.map.multithreadedrunner.threads를 원하는 동시성 레벨로 설정하는 것을 잊지 마십시오.

    MultithreadedMapRunner를 사용해야합니다. JobConf의 setMapRunnerClass 메소드에서 설정하고 mapred.map.multithreadedrunner.threads를 원하는 동시성 레벨로 설정하는 것을 잊지 마십시오.

    또한 다른 방법이 있습니다.

    그러나 매퍼 클래스는 스레드 안전해야하며 설정 및 정리 방법이 여러 번 호출되므로 MultithreadedMapper에서 영감을 얻은 클래스를 구현하지 않으면 MultithreadedMapper와 MultipulOutput을 혼합하는 것이 현명하지 않습니다.

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

    2.하둡은 격리 목적으로 하나의 JVM에서 동시에 둘 이상의 작업을 실행하지 않습니다. 독립형 (로컬) 모드에서는 하나의 JVM 만 사용됩니다. 4 개의 코어를 사용하려면 의사 분산 모드에서 실행하고 최대 동시 작업 수를 4로 늘려야합니다. mapred.tasktracker.map.tasks.maximum 및 mapred.tasktracker.reduce.tasks.maximum 특성을 사용하여이를 수행 할 수 있습니다.

    하둡은 격리 목적으로 하나의 JVM에서 동시에 둘 이상의 작업을 실행하지 않습니다. 독립형 (로컬) 모드에서는 하나의 JVM 만 사용됩니다. 4 개의 코어를 사용하려면 의사 분산 모드에서 실행하고 최대 동시 작업 수를 4로 늘려야합니다. mapred.tasktracker.map.tasks.maximum 및 mapred.tasktracker.reduce.tasks.maximum 특성을 사용하여이를 수행 할 수 있습니다.

  3. ==============================

    3.

        Configuration conf = new Configuration();
    
        Job job = new Job(conf, "SolerRandomHit");
    
        job.setOutputKeyClass(Text.class);
    
        job.setOutputValueClass(IntWritable.class);
    
    
        job.setMapperClass(MultithreadedMapper.class);
    
  4. from https://stackoverflow.com/questions/12504690/how-to-run-hadoop-multithread-way-in-single-jvm by cc-by-sa and MIT license