[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.내가 맞는지 확실하지 않지만 로컬 모드에서 작업을 수행 할 때 다중 맵퍼 / 축소기를 사용할 수 없습니다.
내가 맞는지 확실하지 않지만 로컬 모드에서 작업을 수행 할 때 다중 맵퍼 / 축소기를 사용할 수 없습니다.
어쨌든, 실행중인 매퍼와 리듀서의 최대 수를 설정하려면 mapred.tasktracker.map.tasks.maximum과 mapred.tasktracker.reduce.tasks.maximum 옵션을 기본값으로 사용합니다.
마지막으로 다중 노드 클러스터를 준비하려면 완전히 분산 된 방식으로 실행하고 모든 서버 (namenode, datanode, tasktracker, jobtracker, ...)를 단일 시스템에서 실행하십시오.
-
==============================
2.단지 설명을 위해 ... hadoop이 로컬 모드에서 실행된다면 태스크 레벨에서 병렬 실행을하지 못합니다 (단, 실행중인 => hadoop 0.21 (MAPREDUCE-1367) 제외). 한 번에 여러 작업을 제출할 수 있지만 이러한 작업이 동시에 실행됩니다.
단지 설명을 위해 ... hadoop이 로컬 모드에서 실행된다면 태스크 레벨에서 병렬 실행을하지 못합니다 (단, 실행중인 => hadoop 0.21 (MAPREDUCE-1367) 제외). 한 번에 여러 작업을 제출할 수 있지만 이러한 작업이 동시에 실행됩니다.
모두
속성은 분산 모드에서 실행중인 hadoop에만 적용됩니다!
HTH 요하네스
-
==============================
3.hadoop.core 사용자 이메일 목록의이 스레드에 따르면 mapred.tasktracker.tasks.maximum 설정을 컴퓨터에서 처리 할 수있는 최대 작업 수 (코어 수 ).
hadoop.core 사용자 이메일 목록의이 스레드에 따르면 mapred.tasktracker.tasks.maximum 설정을 컴퓨터에서 처리 할 수있는 최대 작업 수 (코어 수 ).
이 (및 구성 할 수있는 기타 등록 정보)는 클러스터 / 데몬을 설정하는 방법에 대한 기본 설명서에도 설명되어 있습니다.
-
==============================
4.Hadoop을 "가상 배포"모드로 실행하면됩니다. 하나의 시스템이지만 태스크 추적기와 이름 노드를 실제 클러스터처럼 실행합니다. 그런 다음 여러 근로자를 (잠재적으로) 운영 할 것입니다.
Hadoop을 "가상 배포"모드로 실행하면됩니다. 하나의 시스템이지만 태스크 추적기와 이름 노드를 실제 클러스터처럼 실행합니다. 그런 다음 여러 근로자를 (잠재적으로) 운영 할 것입니다.
입력 값이 작 으면 Hadoop은 병렬화 할 가치가 없다고 판단합니다. 기본 분할 크기를 변경하여 동축 케이블을 사용해야 할 수도 있습니다.
내 경험상, "전형적인"Hadoop 작업은 CPU 바운드되기 전에 I / O 바인딩, 때로는 메모리 바인딩 방식입니다. 이러한 이유로 하나의 시스템에서 모든 코어를 완벽하게 활용하는 것이 불가능할 수도 있습니다.
from https://stackoverflow.com/questions/3406839/running-a-standalone-hadoop-application-on-multiple-cpu-cores by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Maven이 내 코드를 -source 1.3으로 컴파일하려고하는 이유는 무엇입니까? (0) | 2019.07.26 |
---|---|
[HADOOP] Hadoop HDFS 최대 파일 크기 (0) | 2019.07.26 |
[HADOOP] 원격으로 Hadoop 작업 실행 (0) | 2019.07.26 |
[HADOOP] 원격 HDFS에서 파일 검색 (0) | 2019.07.26 |
[HADOOP] 하이브 병을 영구히 추가하기 (0) | 2019.07.26 |