2011-01-04 4 views
30

내가 틀렸다면 정정하십시오.하지만 Hadoop은 다른 노드 간의 통신을 위해 MPI를 사용하지 않습니다.Hadoop이 MPI를 사용하여 구현되지 않는 이유는 무엇입니까?

기술적 인 이유는 무엇입니까?

나는 약간의 추측을 위험 할 수 있지만, MPI가 어떻게 구현되는지 "나는 알고 있는지"알지 못한다.

생각해 보니, 하둡의 내부도 완전히 익숙하지 않습니다. 개념적 수준 (map/combine/shuffle/reduce 및 높은 수준에서 작동하는 방식)에서 프레임 워크를 이해하지만 핵심 구현 세부 사항을 알지 못합니다. 저는 항상 Hadoop이 셔플 단계에서 TCP 연결을 통해 직렬화 된 데이터 구조 (아마도 GPBs)를 전송한다고 가정했습니다. 그것이 사실이 아닌지 알려주세요.

답변

23

Hadoop/map-reduce의 큰 특징 중 하나는 내결함성입니다. 내결함성은 현재의 대부분의 MPI 구현에서 지원되지 않습니다. 향후 버전의 OpenMPI에 대해 생각 중입니다.

Sandia labs에는 MPI를 사용하는 map-reduce 버전이 있지만 내결함성이 없습니다.

+0

그래서 MPI에 내재 된 이유는 아닙니다 패러다임 자체, 현재의 구현인가? 따라서 현재와 같이 네트워크 메시지가 손상되거나 변덕스러운 노드가 MPI 시스템을 중단시킬 수 있습니다. 이 두 요소가 모두 제거되었다고 가정 해 봅시다. MPI를 사용하여 Hadoop을 구현하지 않는 이유가 있습니까? – artif

+0

나는 이것이 합리적인 대답이라고 생각한다. –

1

작성 (또는 실행 포팅) 원사의 상단에있을 수 있습니다.

따라서 본질적으로 차세대 Apache Hadoop MapReduce (MAPREDUCE-279)와 그 위에 여러 프로그래밍 패러다임을 지원하는 방법이있을 것입니다. 따라서 YARN에 MPI 응용 프로그램을 작성할 수 있습니다. MapReduce 프로그래밍 패러다임은 항상 기본값으로 지원됩니다.

모든 응용 프로그램이 Open MPI를 포함하여 YARN 위에 개발된다는 아이디어를 제공해야합니다.

+0

햄스터 - https://issues.apache.org/jira/browse/MAPREDUCE-2911 –

18

MPI는 메시지 전달 인터페이스입니다. 바로 그 이름에 - 데이터 지역이 없습니다. 데이터를 계산하기 위해 다른 노드로 데이터를 보냅니다. 따라서 MPI는 대규모 데이터로 작업 할 때 성능면에서 네트워크에 기반합니다.

MapReduce와 Hadoop 분산 파일 시스템을 사용하면 데이터를 복제하여 로컬 스토리지에서 계산을 수행 할 수 있습니다. 디스크에서 스트리밍하고 프로세서로 직접 스트리밍 할 수 있습니다. 따라서 MapReduce는 대용량 데이터로 작업 할 때 네트워크 병목 현상을 피하기 위해 로컬 스토리지를 이용합니다.

이것은 MapReduce가 네트워크를 사용하지 않는다는 것을 의미하지는 않습니다. 그렇습니다 : 그리고 셔플은 종종 가장 느린 작업입니다! 그러나 가능한 한 효율적이고 적게 사용합니다.

요약 : Hadoop (및 이전의 Google 제품)은 MPI를 사용할 수 없어 작동하지 않았기 때문에 MPI를 사용하지 않았습니다. MapReduce 시스템은 하드웨어의 추세에 비추어 MPI의 단점을 해결하기 위해 특별히 개발되었습니다 : 디스크 용량 폭발 (및 데이터), 디스크 속도 정체, 네트워크 느림, 프로세서 기가 헤르츠 피크, 멀티 코어 무어의 법칙 채택.

+16

이것은 꽤 잘못된 답변입니다. 대부분의 MPI 프로그램은 네트워크를 통해 모든 데이터를 전송하지 않습니다. 그것들은 일반적으로 병렬 시뮬레이션이며 시뮬레이션이 진행됨에 따라 최소한의 이웃 업데이트 만 전송합니다. 예 : 유체 역학 코드에서 후광 교환. MapReduce의 경우, MPI는 신뢰할 수 없기 때문에 이해가되지 않습니다. 하나의 프로세스가 종료되면 전체 작업이 종료됩니다. 이것은 MPI가 MapReduce의 훌륭한 기반이되지 못하는 주된 이유입니다. MPI는 빠르고 안정적인 네트워크 (수퍼 컴퓨터)에 밀접하게 결합 된 응용 프로그램 용이며, MapReduce는 느리고 신뢰할 수없는 하드웨어에서 당황스럽게 병렬 작업 부하를 실행하도록 설계되었습니다. – tgamblin

+2

-1 잘못된 정보입니다. 전달되는 "메시지"는 전체 데이터 세트가 아니며 MPI 애플리케이션은 확실히 데이터 지역을 가질 수 있습니다. MPI와 Hadoop은 어느 정도 직각을 이루고 있으며 어디에 중첩되는지는이 질문에 답한 곳이 아닙니다. Hadoop을 사용하여 실행 된 작업은 MPI를 절대적으로 사용할 수 있으며 잘 작동합니다. Hadoop보다 덜 어려운 작업이지만 (최적화를위한 더 많은 기회를 활용하여) 작업하기에 훨씬 편한 기본 환경입니다. –

4

사실 MPI를 사용하여 Hadoop을 구현할 수 있습니다. MapReduce는 MPI가있는 한 MPI를 통해 사용되었습니다. MPI에는 'bcast'와 같은 기능이 있습니다. 모든 데이터를 브로드 캐스트합니다. 'alltoall'- 모든 노드에 모든 데이터를 보내고 'reduce'및 'allreduce'를 보냅니다. Hadoop은 나가는 통신 명령을 reduce 명령으로 패키징하여 데이터 분배를 명시 적으로 구현하고 결과 메소드를 수집하는 요구 사항을 제거합니다.위쪽은 Hadoop을 구현하기 전에 문제가 'reduce'기능에 맞는지 확인해야합니다. 문제가 'scatter'/ 'gather'에 더 적합 할 수 있으며 Hadoop 대신 MPI와 함께 Torque/MAUI/SGE를 사용해야합니다. 마지막으로 MPI는 디스크에 쓰기 기능을 사용하여 수신 방법을 따르지 않는 한 다른 게시물에 설명 된대로 디스크에 데이터를 쓰지 않습니다. Hadoop은 프로세스/데이터를 다른 곳으로 보내 작업을 수행하는 것처럼 작동합니다. 중요한 부분은 MapReduce가 가장 효율적인 병렬화 전략인지 확인하는 데 충분한 세부 사항으로 문제를 이해하고 다른 많은 전략이 있다는 것을 알고 있어야합니다.

1

MPI 프로그램이 로컬 디스크를 사용하지 못하게하는 제한이 없습니다. 물론 MPI 프로그램은 모든 병렬 응용 프로그램과 마찬가지로 항상 RAM이나 로컬 디스크의 데이터를 로컬로 처리하려고합니다. MPI 2.0 (향후 버전은 아니지만, 10 년 동안 여기에있었습니다) 프로세스를 동적으로 추가 및 제거 할 수 있습니다.이를 통해 프로세스를 동적으로 추가 및 제거 할 수 있습니다. 어떤 노드에서 죽어가는 과정.

아마도 hadoop은 MPI를 사용하지 않기 때문에 MPI는 일반적으로 C 또는 Fortran에서 코딩해야하며 과학/학술 개발자 문화가 더 풍부하기 때문에 hadoop은 강력한 자바 편향으로 IT 전문가가 주도하는 것처럼 보입니다. MPI는 매우 낮은 수준이며 오류가 발생하기 쉽습니다. 그것은 하드웨어, RAM 및 네트워크를 매우 효율적으로 사용할 수있게합니다. Hadoop은 효율성 위약과 함께 높은 수준의 강력한 시도를합니다. MPI 프로그래밍은 이식성을 높이기 위해 훈련과주의가 필요하며 각 플랫폼에서 소스 코드를 컴파일해야합니다. Hadoop은 휴대하기 쉽고 설치가 쉽고 빠르고 빠르며 더러운 응용 프로그램 개발을 허용합니다. 그것은 다른 범위입니다.

아마도, 아마도 hadoop 과대 광고는 아마도 MPI를 기반으로하는보다 자원 효율적인 대안이 뒤따를 것입니다.

0

Map/Reduce 단계와 Hadoop 일정 부분을 살펴보면 MPI가 훨씬 더 나은 방법론/기술이라고 주장 할 것입니다. MPI는 방송, 장벽, 모든 수집, 분산/수집 (또는 맵 축소라고 부름)과 같은 다양한 교환 패턴을 지원합니다. 그러나 Hadoop에는 HDFS도 있습니다. 이를 통해 데이터가 처리 노드에 훨씬 가깝게 배치 될 수 있습니다. 그리고 Hadoop과 같은 기술을 사용하는 곳의 문제 공간을 보면 감축 단계의 결과가 실제로 상당히 크기 때문에 모든 정보가 네트워크를 휩쓸고 싶어하지 않을 것입니다. 이것이 바로 Hadoop이 모든 것을 디스크에 저장하는 이유입니다. 그러나 제어 메시지는 MPI를 사용할 수 있었고 MPI 메시지는 디스크의 실제 데이터에 대한 포인터 (URL 또는 파일 핸들)를 가질 수 있습니다 ...

관련 문제