2012-12-11 2 views
4

동료 중 한 명은 Google의 응용 프로그램 (텍스트 처리)에 map-reduce 개념을 도입하기 위해 저와 논쟁 중입니다. 그의 생각은 대신 스레딩 개념을 사용해서는 안됩니다. 둘 다이지도 축소 패러다임을 처음 접했습니다. map-reduce 개념을 사용하면 개발자가 스레드 동기화, 데드 록, 공유 데이터를 처리하는 오버 헤드를 줄일 수 있다고 생각했습니다. 스레딩이 아닌 map-reduce 개념으로 갈 수있는 다른 것이 있습니까?스레딩과 맵 축소 처리의 차이점은 무엇입니까?

+0

프로세서에 몇 개의 코어가 있습니까? 이 질문은 병렬로 실제로 스레드를 실행할 수있는 많은 코어가있는 단일 시스템에있는 경우에만 의미가 있습니다. –

+0

@JudgeMental 우리는 여러 개의 코어가있는 단일 호스트를 사용하고 있습니다. 이 상황에서 스레딩은 좋을 것입니다. 이것이 무엇을 의미합니까? – udi

답변

2

지도 축소는 엄청난 오버 헤드를 추가하지만 "당황스럽게 평행 한"사용 사례를 위해 많은 수의 기계를 조정할 수 있습니다. 스레딩은 다중 코어와 단일 호스트 만있는 경우에만 가치가 있습니다. 그러나 일반적으로 작업하기가 더 쉬운 원시 스레드 (예 : Concurrent, Akka) 위에 추상화 계층을 추가하는 많은 프레임 워크가 있습니다.

2

관련 논문은 Comparing Fork/Join and MapReduce입니다.

본 백서에서는 포크/조인, MapReduce 및 하이브리드 방식의 세 가지 병렬 패러다임의 성능, 확장 성 및 프로그래밍 가능성을 비교합니다.

기본적으로 Java 포크/조인은 시작 대기 시간이 짧고 작은 입력 (< 5MB)으로 확장되지만 공유 메모리의 크기 제한 ( 단일 노드 아키텍처)으로 인해 더 큰 입력을 처리 할 수 ​​없습니다. 반면 MapReduce는 시작 대기 시간이 수십 초에 이르지만 컴퓨팅 클러스터에서 훨씬 더 큰 입력 (> 100MB)에 적합합니다.

스레딩은 작업을 여러 하위 작업으로 나눌 수있는 기능을 재귀 적으로 제공합니다. 더 많은 계층,이 단계에서 '포크 (inter-fork)'통신의 가능성, 훨씬 더 전통적인 프로그래밍. 단일 기계 이상으로 확장되지 않습니다 (최소한 종이에서). 8 코어를 최대한 활용하십시오.

M-R은 매핑 된 분할이 서로간에 이야기하지 않고 하나의 큰 분할 만 수행 한 다음 모든 것을 함께 축소합니다. 단일 계층, 축소 될 때까지 상호 분할 통신 없음, 대규모로 확장 가능. 클라우드 점유율을 활용하면 좋습니다.

관련 문제