2012-07-26 1 views
70

Hadoop에서 작업을 줄이는시기가 언제 시작됩니까? 매퍼의 일정 비율 (임계 값)이 완료된 후에 시작합니까? 그렇다면이 임계 값이 고정되어 있습니까? 어떤 종류의 임계 값이 일반적으로 사용됩니까?언제 Hadoop에서 작업을 줄일 수 있습니까?

답변

181

감속 단계에는 3 단계가 있습니다 : 셔플, 정렬, 감소. 셔플은 각 매퍼에서 감속기가 데이터를 수집하는 곳입니다. 이것은 데이터 전송 일 뿐이므로 매퍼가 데이터를 생성하는 동안 발생할 수 있습니다. 반면 정렬 및 축소는 모든 매퍼가 완료된 후에 만 ​​시작할 수 있습니다. 감속기 완료 비율을 보면 MapReduce가 수행중인 작업을 알 수 있습니다. 0-33 %는 셔플, 34-66 %는 정렬, 67 % -100 %는 감소를 의미합니다. 이것이 귀하의 감속기가 때때로 33 %로 "고착"된 것처럼 보이는 이유입니다. 매퍼가 끝나기를 기다리고 있습니다.

기어가 완료된 매퍼의 백분율 임계 값을 기준으로 셔플을 시작합니다. 매개 변수를 변경하여 감속기가 조만간 시작되도록 할 수 있습니다.

왜 리듀서를 일찍 시작하는 것이 좋은가요? 시간이 지남에 따라 맵퍼에서 감속기로의 데이터 전송이 확산되기 때문에 네트워크가 병목 현상 인 경우 좋은 방법입니다.

왜 리듀서를 일찍 시작하는 것이 나쁜가요? 왜냐하면 그들은 데이터를 복사하고 매퍼가 끝날 때까지 기다리는 동안 슬롯을 줄이기 때문입니다. 나중에 축소 슬롯을 실제로 사용하는 다른 작업은 이제 사용할 수 없습니다.

mapred.reduce.slowstart.completed.maps의 기본값을 mapred-site.xml으로 변경하여 조절기를 시작할 때 사용자 지정할 수 있습니다. 1.00 값은 모든 맵퍼가 감속기를 시작하기 전에 완료 될 때까지 대기합니다. 0.0 값은 즉시 리듀서를 시작합니다. 0.5 값은 매퍼의 절반이 완료되면 감속기를 시작합니다. 작업 단위로 mapred.reduce.slowstart.completed.maps을 변경할 수도 있습니다. 새 버전의 Hadoop (최소 2.4.1)에서 매개 변수는 mapreduce.job.reduce.slowstart.completedmaps (감사 사용자 yegor256)입니다.

일반적으로 시스템에 여러 작업이 동시에 실행되는 경우 0.9 위에 mapred.reduce.slowstart.completed.maps을 유지하고 싶습니다. 이런 식으로 일은 데이터를 복사하는 것 이외에는 아무것도하지 않을 때 감속기를 달구 지 않습니다. 한 번에 하나의 작업 만 실행한다면 0.1을 수행하는 것이 적절할 것입니다.

+3

내가 언급 한 내용에 대한 자세한 내용은 어디에서 확인할 수 있습니까? – daydreamer

+1

느린 시작은 제 의견으로는 잘 설명되어 있지 않습니다 ... 대부분의 모호한 구성 매개 변수가 있습니다. –

+5

좋은 답변 @Donald Miner. 새로운 Hadoop 버전 (1.1.2 사용)에 추가하고 싶다면 값은 0.05로 기본값이됩니다. http://hadoop.apache.org/docs/r1.1.2/mapred-default.html – sufinawaz

1

내가 알기로는지도 단계에서 단계 시작을 줄이고 맵에서 레코드를 계속 사용하십시오. 그러나 맵 단계 다음에 정렬 및 셔플 단계가 있기 때문에 모든 출력을 정렬하여 감속기로 보내야합니다. 따라서 논리적으로 맵핑 단계가지도 단계 이후에만 시작되지만 성능상의 이유로 인해 감속기가 매퍼로 초기화된다는 것을 상상할 수 있습니다.

0

축소 단계에 표시된 백분율은 실제로지도 출력에서 ​​축소 자 입력 디렉토리로 복사되는 데이터의 양에 대한 것입니다. 이 복사가 언제 시작되는지 알고 싶습니까? Donald가 위에 표시된대로 설정할 수있는 구성입니다. 모든 데이터가 감속기 (예 : 100 % 감속)로 복사되면 감속기가 작동하기 시작하므로 감속기 코드가 I/O 또는 CPU를 많이 사용하는 경우 "100 % 감속"상태로 고정 될 수 있습니다.

3

감속기는 감속기가 호출되기 훨씬 전에 시작할 수 있습니다. "a"매퍼가 작업을 마자 마자 생성 된 데이터는 정렬 및 셔플 링 (combiner 및 partitioner 호출 포함)을 거칩니다. 감속기 "위상"은 매퍼 (mapper) 데이터 처리가 시작되는 순간에 시작됩니다. 이러한 처리가 완료되면 감속기 비율의 진행 상황을 확인할 수 있습니다. 그러나, 감속기의 아무도는 아직 불렀다. 사용 가능/사용중인 프로세서 수, 데이터 특성 및 예상 감속기 수에 따라 위의 @ Donald-miner에서 설명한대로 매개 변수를 변경해야 할 수 있습니다.

0

맵 축소 작업이 어떻게 작동하는지 더 잘 이해하려면 WordCount 예제를 고려하십시오. 우리는 큰 파일을 가지고 있습니다. 예를 들어 소설을 말하면 우리는 파일에서 각 단어가 나오는 횟수를 찾습니다. 파일이 크기 때문에 파일이 다른 블록으로 분할되고 다른 작업자 노드에서 복제 될 수 있습니다. 단어 카운트 작업은지도 및 축소 작업으로 구성됩니다. 맵 태스크는 입력으로 각 블록을 가져 와서 중간 키 - 값 쌍을 생성합니다. 이 예에서는 단어의 수를 계산하므로 블록을 처리하는 동안 매퍼는 (word1, count1), (word2, count2) 등의 중간 결과를 생성합니다. 모든 매퍼의 중간 결과는 다음과 같습니다. 중간 결과를 재정렬하는 셔플 단계를 거쳤습니다.

지도 1 :

다른 맵퍼로부터 우리지도 출력은 다음과 같은 형태 인 것을 가정한다 - 이다 (24) 이었다 (32) (및 12)

Map2에 : - (제 12) 이다 (23)가 이었다 (30)

출력 동일한 키 값이 동일한 감속기에 제공되는 방식으로 정렬되는지도. 여기에 대응하는 키가 같은 감속기로 간다는 것을 의미합니다.이 경우 최종 출력을 생성하는 감속기입니다. - (및 12) (is, 47) (my, 12) (was, 62)

0

감속 기 작업은 모든 맵퍼의 completion 이후에만 시작됩니다.

그러나 데이터 전송은 each 이후에 발생합니다. 실제로는 끌어 오기 작업입니다.

즉, 감속기는 모든지도 작성자에게 Map에서 검색 할 데이터가 있는지 묻습니다.지도 작성자가 작업을 완료 한 경우 Reducer가 중간 데이터를 가져옵니다.

Mapper의 중간 데이터는 disk에 저장됩니다. 그리고 감소하는 매퍼에서 데이터 전송이 네트워크를 통해 발생하는 모든 매퍼가 작업을 낚시질 한 후에 만 ​​

0

가 시작 감소 (Data Locality이 상을 줄에 보존되지 않음), 감속기는 기다려야하므로 모든 매퍼와 통신 할 수 있습니다 마지막 매퍼가 작업을 마칠 때까지. 매퍼는 작업을 완료 한 순간에 데이터를 전송하기 시작합니다.

1

Mapper가 작업을 마친 다음 Reducer는 데이터를 줄이기 위해 작업을 시작합니다. 이것은 Mapreduce 작업입니다.