복붙노트

[HADOOP] 여러 CPU 코어에서 독립 실행 형 Hadoop 응용 프로그램 실행

HADOOP

여러 CPU 코어에서 독립 실행 형 Hadoop 응용 프로그램 실행

우리 팀은 Hadoop 라이브러리를 사용하여 여러 개의 입력 파일을 유용한 출력으로 변환하는 Java 응용 프로그램을 만들었습니다. 현재의 부하를 감안할 때 단일 멀티 코어 서버는 향후 1 년 동안 잘 수행 할 것입니다. 우리는 (아직) 다중 서버 Hadoop 클러스터를 갈 필요가 없지만이 프로젝트를 "준비 중"으로 시작했습니다.

이 앱을 명령 행 (또는 eclipse 또는 netbeans)에서 실행할 때 아직 한 번에 하나 이상의 맵을 사용하거나 쓰레드를 줄 이도록 설득하지 못했습니다. 이 도구가 CPU를 많이 사용한다는 사실을 감안할 때 "단일 threadedness"가 현재의 병목입니다.

netbeans 프로파일 러에서 실행할 때 응용 프로그램이 다양한 목적으로 여러 스레드를 시작하지만 동일한 map / reduce 만 동시에 실행된다는 것을 알 수 있습니다.

입력 데이터는 여러 입력 파일로 구성되어 있으므로 Hadoop은 맵 단계에서 입력 파일 당 적어도 하나의 스레드를 동시에 실행할 수 있어야합니다.

최소한 2 또는 4 개의 활성 스레드를 실행하려면 무엇을해야합니까? (이 응용 프로그램의 대부분의 처리 시간에 가능해야합니다)?

나는 이것이 내가 간과 한 바보 같이 될 것으로 기대하고 있습니다.

방금 찾았습니다 : https://issues.apache.org/jira/browse/MAPREDUCE-1367 이것은 내가 Hadoop 0.21에서 찾고 있던 기능을 구현합니다. 그것을 제어하기 위해 mapreduce.local.map.tasks.maximum 플래그가 도입되었습니다.

현재로서는이 질문에서 설명한 해결책을 발견했습니다.

해결법

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

    1.내가 맞는지 확실하지 않지만 로컬 모드에서 작업을 수행 할 때 다중 맵퍼 / 축소기를 사용할 수 없습니다.

    내가 맞는지 확실하지 않지만 로컬 모드에서 작업을 수행 할 때 다중 맵퍼 / 축소기를 사용할 수 없습니다.

    어쨌든, 실행중인 매퍼와 리듀서의 최대 수를 설정하려면 mapred.tasktracker.map.tasks.maximum과 mapred.tasktracker.reduce.tasks.maximum 옵션을 기본값으로 사용합니다.

    마지막으로 다중 노드 클러스터를 준비하려면 완전히 분산 된 방식으로 실행하고 모든 서버 (namenode, datanode, tasktracker, jobtracker, ...)를 단일 시스템에서 실행하십시오.

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

    2.단지 설명을 위해 ... hadoop이 로컬 모드에서 실행된다면 태스크 레벨에서 병렬 실행을하지 못합니다 (단, 실행중인 => hadoop 0.21 (MAPREDUCE-1367) 제외). 한 번에 여러 작업을 제출할 수 있지만 이러한 작업이 동시에 실행됩니다.

    단지 설명을 위해 ... hadoop이 로컬 모드에서 실행된다면 태스크 레벨에서 병렬 실행을하지 못합니다 (단, 실행중인 => hadoop 0.21 (MAPREDUCE-1367) 제외). 한 번에 여러 작업을 제출할 수 있지만 이러한 작업이 동시에 실행됩니다.

    모두

    속성은 분산 모드에서 실행중인 hadoop에만 적용됩니다!

    HTH 요하네스

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

    3.hadoop.core 사용자 이메일 목록의이 스레드에 따르면 mapred.tasktracker.tasks.maximum 설정을 컴퓨터에서 처리 할 수있는 최대 작업 수 (코어 수 ).

    hadoop.core 사용자 이메일 목록의이 스레드에 따르면 mapred.tasktracker.tasks.maximum 설정을 컴퓨터에서 처리 할 수있는 최대 작업 수 (코어 수 ).

    이 (및 구성 할 수있는 기타 등록 정보)는 클러스터 / 데몬을 설정하는 방법에 대한 기본 설명서에도 설명되어 있습니다.

  4. ==============================

    4.Hadoop을 "가상 배포"모드로 실행하면됩니다. 하나의 시스템이지만 태스크 추적기와 이름 노드를 실제 클러스터처럼 실행합니다. 그런 다음 여러 근로자를 (잠재적으로) 운영 할 것입니다.

    Hadoop을 "가상 배포"모드로 실행하면됩니다. 하나의 시스템이지만 태스크 추적기와 이름 노드를 실제 클러스터처럼 실행합니다. 그런 다음 여러 근로자를 (잠재적으로) 운영 할 것입니다.

    입력 값이 작 으면 Hadoop은 병렬화 할 가치가 없다고 판단합니다. 기본 분할 크기를 변경하여 동축 케이블을 사용해야 할 수도 있습니다.

    내 경험상, "전형적인"Hadoop 작업은 CPU 바운드되기 전에 I / O 바인딩, 때로는 메모리 바인딩 방식입니다. 이러한 이유로 하나의 시스템에서 모든 코어를 완벽하게 활용하는 것이 불가능할 수도 있습니다.

  5. from https://stackoverflow.com/questions/3406839/running-a-standalone-hadoop-application-on-multiple-cpu-cores by cc-by-sa and MIT license