[HADOOP] 멀티 코어 8 노드 클러스터에서 Hadoop Map 작업을 예약하는 방법은 무엇입니까?
HADOOP멀티 코어 8 노드 클러스터에서 Hadoop Map 작업을 예약하는 방법은 무엇입니까?
나는 "지도 만"(감소 단계 없음) 프로그램을 가지고 있습니다. 입력 파일의 크기는 7 가지 맵 작업을 생성 할만큼 충분히 커서 생성 된 출력 (part-000 ~ part006)을 확인하여 확인했습니다. 이제 클러스터에는 각각 8 개의 코어와 8GB의 메모리를 갖춘 8 개의 노드와 헤드 노드에서 호스팅되는 공유 파일 시스템이 있습니다.
내 질문은 하나의 노드에서만 7 가지 맵 작업 모두를 실행하거나 7 가지 슬레이브 노드 (노드 당 1 작업)에서 7 가지 맵 작업을 실행하는 것 중에서 선택할 수 있습니다. 그렇게 할 수 있다면 코드와 구성 파일의 변경이 필요합니다.
나는 "mapred.tasktracker.map.tasks.maximum"매개 변수를 내 코드에서 1과 7로 설정하려고 시도했지만 상당한 시간 차이를 찾지 못했습니다. 내 구성 파일에서 1로 설정됩니다.
해결법
-
==============================
1."mapred.tasktracker.map.tasks.maximum"은 각 맵 작업에 사용할 노드 수가 아닌 각 노드에서 시작해야하는 맵 작업 수를 처리합니다. Hadoop 아키텍처에서는 마스터 노드 (마스터)에서 각 노드 (슬레이브)와 작업 추적기에 대해 하나의 작업 추적기가 있습니다. 따라서 mapred.tasktracker.map.tasks.maximum 속성을 설정하면 노드 당 실행될지도 작업 수만 변경됩니다. "mapred.tasktracker.map.tasks.maximum"의 범위는 1 / 2 * cores / node에서 2 * cores / node까지입니다.
"mapred.tasktracker.map.tasks.maximum"은 각 맵 작업에 사용할 노드 수가 아닌 각 노드에서 시작해야하는 맵 작업 수를 처리합니다. Hadoop 아키텍처에서는 마스터 노드 (마스터)에서 각 노드 (슬레이브)와 작업 추적기에 대해 하나의 작업 추적기가 있습니다. 따라서 mapred.tasktracker.map.tasks.maximum 속성을 설정하면 노드 당 실행될지도 작업 수만 변경됩니다. "mapred.tasktracker.map.tasks.maximum"의 범위는 1 / 2 * cores / node에서 2 * cores / node까지입니다.
전체 맵 태스크의 수는, setNumMapTasks (int)를 사용해 설정해야한다.
-
==============================
2.헤드 노드를 호스팅하는 공유 파일 시스템을 말하면 데이터가 HDFS 또는 각 노드에 마운트 된 파일 시스템과 같은 일부 NFS에서 호스트된다는 의미입니까? 나는 당신이 HDFS를 의미한다고 생각하지만 NFS 나 유사한 것을 사용한다면 HDFS로 더 높은 처리량을 기대할 것입니다 (데이터를 처리 기계로 옮기는 대신 데이터로 처리 코드를 옮기고 싶습니다) )
헤드 노드를 호스팅하는 공유 파일 시스템을 말하면 데이터가 HDFS 또는 각 노드에 마운트 된 파일 시스템과 같은 일부 NFS에서 호스트된다는 의미입니까? 나는 당신이 HDFS를 의미한다고 생각하지만 NFS 나 유사한 것을 사용한다면 HDFS로 더 높은 처리량을 기대할 것입니다 (데이터를 처리 기계로 옮기는 대신 데이터로 처리 코드를 옮기고 싶습니다) )
입력 파일의 크기와 분할 크기, 파일 형식 (텍스트, 시퀀스 등), 복제 요소 및 압축 메쏘프의 크기는 얼마입니까?
위의 질문에 대한 답변에 따라 8x8 설정을 사용하면 맵 분할 크기를 줄이고 복제 인수를 높이면 처리량을 향상시킬 수 있습니다.
-
==============================
3.가능한 경우 7 개의 다른 노드에서 7 가지 맵 작업을 확실히 실행해야합니다. MapReduce의 모든 장점은 각 작업이 가능한 효율적으로 실행되도록 컴퓨팅을 병렬화 할 수 있다는 것입니다. 하나의 노드에서 7 개의 맵 작업을 실행하면 각 작업은 해당 단일 노드에서 동일한 리소스 (RAM, CPU, IO)를 놓고 경쟁하게됩니다.
가능한 경우 7 개의 다른 노드에서 7 가지 맵 작업을 확실히 실행해야합니다. MapReduce의 모든 장점은 각 작업이 가능한 효율적으로 실행되도록 컴퓨팅을 병렬화 할 수 있다는 것입니다. 하나의 노드에서 7 개의 맵 작업을 실행하면 각 작업은 해당 단일 노드에서 동일한 리소스 (RAM, CPU, IO)를 놓고 경쟁하게됩니다.
mapred.tasktracker.map.tasks.maximum의 표준 설정은 코어 당 하나이므로 설정을 8로 변경할 수 있습니다.
또한지도 전용 작업이있는 경우 매퍼 수를 특정 숫자로 설정하는 것이 좋습니다. 지도 작업 수를 설정하는 것은 작업 추적자에게 실행할지도의 "힌트"일 뿐이지 만 DFS가 입력 데이터를 저장하는 방식에 따라 궁극적으로 작업 추적기가 결정합니다. 이 wiki에는 자세한 내용이 있습니다.
그러나 특정 경우에 감소 작업 수를 제어하려고합니다. 예를 들어 정렬 된 숫자 목록을 원하면 모든 데이터가 단일 감속기를 통과하도록해야합니다.
from https://stackoverflow.com/questions/10373498/how-to-schedule-hadoop-map-tasks-in-multi-core-8-node-cluster by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Hadoop Mapreduce 콘솔 출력에 대한 설명 (0) | 2019.06.16 |
---|---|
[HADOOP] Hadoop에 저장된 문서 검색 - 사용할 도구는 무엇입니까? (0) | 2019.06.16 |
[HADOOP] 파일을 날짜로 분할하여 kafka에서 hdfs로 가장 효율적으로 작성하는 방법은 무엇입니까? (0) | 2019.06.16 |
[HADOOP] 하이브의 델타 / 증분로드 (0) | 2019.06.15 |
[HADOOP] pyspark 사용, hadoop 파일 시스템에서 2D 이미지 읽기 / 쓰기 (0) | 2019.06.15 |