Hadoop의 MapReduce란 무엇입니까? Archi구조 및 도표

⚡ 스마트 요약

MapReduce는 대규모 데이터 세트를 작은 결과값으로 변환하는 Hadoop 프로그래밍 모델입니다. 이 모델은 각 입력 분할에 대해 map 함수를 실행한 다음, 그룹화된 중간 값에 대해 reduce 함수를 실행합니다.

  • 🔘 4단계: 모든 작업은 분할, 지도 순으로 실행됩니다.ping각 단계 사이에서 키-값 쌍이 흐르면서 섞이고 줄어듭니다.
  • ☑️ 실제 예제: 세 줄의 텍스트가 일곱 단어로 계산되어 각 단계가 정확히 어떤 역할을 하는지 보여줍니다.
  • 분할 사이즈: 입력 분할당 하나의 맵 작업이 실행되며, 분할 크기는 일반적으로 HDFS 블록 크기와 일치합니다.
  • 🧪 중간 데이터: 맵 출력은 HDFS가 아닌 로컬 디스크에 기록됩니다. 버려지는 데이터를 복제하는 것은 낭비이기 때문입니다.
  • 🛠️ 동등: 직업Tracker는 작업 및 과제 일정을 계획합니다.Trackers는 주기적인 심장 박동 신호를 통해 진행 상황을 보고합니다.
  • ⚠️ 버전 참고: YARN은 해당 쌍을 Hadoop 2.x의 ResourceManager, NodeManager 및 작업별 ApplicationMaster로 대체했습니다.

하둡의 MapReduce 아키텍처를 예시를 통해 설명합니다.

Hadoop의 MapReduce란 무엇입니까?

MapReduce는 방대한 양의 데이터를 처리하는 데 사용되는 소프트웨어 프레임워크이자 프로그래밍 모델입니다. MapReduce 프로그램은 Map과 Reduce라는 두 단계로 작동합니다. Map 작업은 데이터를 분할하고 매핑하는 작업을 담당합니다.ping 데이터 축소 작업을 수행하는 동안 데이터를 섞고 줄입니다.

하둡 다양한 언어로 작성된 MapReduce 프로그램을 실행할 수 있습니다. Java루비, Python예산 및 C++MapReduce 프로그램은 본질적으로 병렬적으로 실행되므로 클러스터 내의 여러 머신을 사용하여 대규모 데이터 분석을 수행하는 데 매우 유용합니다.

각 단계의 입력은 키-값 쌍입니다. 또한 모든 프로그래머는 맵 함수와 리듀스 함수, 이렇게 두 가지 함수를 지정해야 합니다.

MapReduce Archi예제로 설명하는 빅데이터 강의

전체 과정은 분할, 매핑의 네 단계를 거칩니다.ping섞고, 줄이는 것.

이번 MapReduce 튜토리얼에서는 MapReduce 예제를 통해 이를 이해해 보겠습니다.

MapReduce에 다음과 같은 입력 데이터가 있다고 가정해 보겠습니다. 빅데이터 프로그램 :

Welcome to Hadoop Class
Hadoop is good
Hadoop is bad

아래 그림 trac왼쪽의 입력 분할부터 오른쪽의 최종 단어 수까지 모든 단계에서 해당 세 줄을 보여줍니다.

MapReduce 아키텍처 다이어그램 trac분할을 통해 세 개의 입력 라인을 매핑합니다.ping섞고 줄이기

MapReduce 작업의 최종 출력은 다음과 같습니다.

나쁜 1
클래스 1
좋은 1
하둡 3
is 2
1
환영합니다 1

빅데이터에서 데이터는 다음과 같은 MapReduce 단계를 거칩니다.

입력 분할

빅데이터 MapReduce 작업의 입력은 입력 분할이라고 하는 고정 크기의 조각으로 나뉩니다. 입력 분할은 단일 맵에서 소비되는 입력의 일부입니다.

지도ping

이는 MapReduce 프로그램 실행의 첫 번째 단계입니다. 이 단계에서는 각 분할의 데이터가 맵에 전달됩니다.ping 출력값을 생성하는 함수입니다. 우리 예시에서 map 함수의 역할은 다음과 같습니다.ping 이 단계는 입력 분할(입력 분할에 대한 자세한 내용은 아래 참조)에서 각 단어의 발생 횟수를 세고 목록을 준비하는 것입니다. .

셔플 링

이 단계에서는 Map의 출력을 소비합니다.ping 이 단계의 임무는 지도에서 관련 기록을 통합하는 것입니다.ping 위상 출력. 예시에서 같은 단어들은 각각의 빈도수와 함께 묶입니다.

감소

이 단계에서는 셔플링 단계의 출력값이 집계됩니다. 셔플링 단계의 값들을 결합하여 단일 출력값을 반환합니다. 간단히 말하면, 이 단계는 전체 데이터셋을 요약하는 단계입니다.

예시에서 이 단계는 셔플링 단계의 값을 집계합니다. 즉, 각 단어의 총 발생 횟수를 계산합니다.

MapReduce Archi강의가 자세하게 설명되어 있어요

아래 내용은 스플릿, 맵 태스크 및 리듀스 태스크가 클러스터 전체에 실제로 어떻게 배치되고 저장되는지 설명합니다.

  • 분할된 레코드마다 하나의 맵 태스크가 생성되며, 이 태스크는 분할된 레코드의 각 레코드에 대해 맵 함수를 실행합니다.
  • 여러 개의 분할을 사용하는 것은 항상 유리합니다. 전체 입력을 처리하는 데 걸리는 시간에 비해 분할된 각 부분을 처리하는 데 걸리는 시간이 훨씬 짧기 때문입니다. 분할된 부분의 크기가 작을수록, 각 부분이 병렬로 처리되어 부하 분산이 더욱 효율적으로 이루어집니다.
  • 하지만 분할 크기가 너무 작은 것도 바람직하지 않습니다. 분할 크기가 너무 작으면 분할 관리 및 맵 작업 생성에 필요한 오버헤드가 전체 작업 실행 시간의 대부분을 차지하게 됩니다.
  • 대부분의 경우 분할 크기를 원본 크기와 동일하게 하는 것이 좋습니다. HDFS 블록 크기는 Hadoop 2.x 버전부터 기본값이 128MB로 설정되었으며(Hadoop 1.x 버전에서는 64MB였음), 다음 요소에 의해 제어됩니다. dfs.blocksize 재산.
  • 맵 작업 실행 결과는 HDFS가 아닌 해당 노드의 로컬 디스크에 기록됩니다.
  • HDFS 대신 로컬 디스크를 선택하는 이유는 HDFS 저장소 작업 중에 발생하는 복제를 피하기 위해서입니다.
  • 맵 출력은 리듀스 태스크에 의해 처리되어 최종 출력을 생성하는 중간 출력입니다.
  • 작업이 완료되면 지도 출력을 버릴 수 있습니다. 따라서 복제를 통해 HDFS에 저장하면 과잉이 됩니다.
  • 노드 오류가 발생하는 경우 축소 작업에서 맵 출력을 사용하기 전에 Hadoop은 다른 노드에서 맵 작업을 다시 실행하고 맵 출력을 다시 생성합니다.
  • 리듀스 작업은 데이터 지역성 개념에 기반하지 않습니다. 모든 맵 작업의 출력은 리듀스 작업에 전달됩니다. 맵 작업의 출력은 리듀스 작업이 실행되는 머신으로 전송됩니다.
  • 이 시스템에서는 출력이 병합된 다음 사용자 정의 축소 함수로 전달됩니다.
  • 맵 출력과 달리 리듀스 출력은 HDFS에 저장됩니다(첫 번째 복제본은 로컬 노드에 저장되고 나머지 복제본은 외부 노드에 저장됩니다). 따라서 리듀스 출력을 기록하는 과정에서 네트워크 대역폭이 소모되지만, 일반적인 HDFS 쓰기 파이프라인이 소모하는 대역폭과 비슷한 수준입니다.

MapReduce는 작업을 어떻게 구성합니까?

이번 MapReduce 튜토리얼에서는 MapReduce가 어떻게 작동하는지 알아보겠습니다.

하둡은 작업을 태스크로 나눕니다. 태스크에는 두 가지 유형이 있습니다.

  1. 지도 작업(분할 및 지도)ping)
  2. 작업 줄이기 (분류, 축소)

Map 및 Reduce 작업 모두를 포함하는 전체 실행 프로세스는 다음과 같은 두 가지 유형의 엔티티에 의해 제어됩니다.

  1. 일Tracker: 마스터처럼 행동하며 제출된 작업의 전체 실행을 책임집니다.
  2. 멀티태스킹Trackers: 마치 노예처럼 행동하며, 각자 일의 일부를 수행한다.

시스템에 실행을 위해 제출된 모든 작업에는 하나의 작업이 있습니다.TracNameNode에 상주하는 ker가 있으며, 여러 개의 Task가 있습니다.TracDataNode에 있는 kers입니다.

참고 : 직업Trac커와 태스크Tracker 쌍은 MapReduce 버전 1(Hadoop 1.x)에 속합니다. Hadoop 2.x부터 YARN은 이러한 역할을 클러스터 전체의 ResourceManager, 각 노드의 NodeManager, 그리고 작업당 하나의 ApplicationMaster로 분산시키지만, 맵, 셔플, 리듀스 단계 자체는 변경되지 않았습니다.

아래 다이어그램은 제출된 작업이 어떻게 여러 작업으로 나뉘는지 보여줍니다. trac클러스터 전체에 걸쳐 있습니다.

작업을 맵 작성과 리듀스 작업으로 분할한 것을 보여주는 다이어그램 trac욥에 의해Trac커와 태스크Trac케르

  • 하나의 작업은 여러 개의 태스크로 분할된 후 클러스터 내의 여러 데이터 노드에서 실행됩니다.
  • 그것은 직무의 책임입니다. tracker는 서로 다른 데이터 노드에서 실행될 작업을 예약하여 활동을 조정합니다.
  • 개별 작업의 실행은 해당 작업에 의해 관리됩니다. tracker는 작업의 일부를 실행하는 모든 데이터 노드에 상주합니다.
  • 작업 trac담당자의 책임은 업무 진행 상황 보고서를 해당 담당자에게 보내는 것입니다. trac케르.
  • 또한, 그 작업은 tracker는 주기적으로 Job에게 '심장 박동' 신호를 보냅니다.Trac시스템의 현재 상태를 알리기 위해 ker에게 알립니다.
  • 따라서 그 일은 trac케르가 계속한다 trac각 작업의 전체 진행 상황을 나타냅니다. 작업이 실패할 경우, 해당 작업은 tracker는 다른 작업으로 일정을 다시 잡을 수 있습니다. trac케르.

자주 묻는 질문

YARN은 Hadoop 2.x 버전부터 그렇게 했습니다. 클러스터 전체의 ResourceManager가 스케줄링을 관리하고, 각 노드에서 NodeManager가 실행되며, 작업당 하나의 ApplicationMaster가 실행됩니다. tracks는 작업을 수행합니다. 맵 및 리듀스 단계는 변경되지 않습니다.

과거 작업 이력을 기반으로 학습된 모델은 실행 시간을 예측하고, 분할 크기와 리듀서 개수를 권장하며, 불균형을 조기에 감지합니다. 또한 카운터 값을 모니터링하여 실행이 완료되기 전에 비정상적으로 느리거나 실패하는 작업을 표시합니다.

Copilot은 매퍼 및 리듀서 시그니처, 제네릭, 임포트 및 드라이버 구성 호출과 같은 기본 구조를 잘 처리합니다. 어떤 필드가 그룹인지와 같은 스키마 결정도 잘 처리합니다.ping 핵심은 데이터를 이해하는 개발자가 여전히 필요하다는 것입니다.

일반적으로 시작점은 사용 가능한 리듀스 슬롯 수보다 약간 적은 수로 설정하여 모든 리듀서가 한 번에 실행되도록 합니다. 슬롯 수가 너무 적으면 긴 꼬리가 생기고, 너무 많으면 작은 출력 파일이 많이 생성됩니다.

결합기는 네트워크를 통과하기 전에 맵 출력에 대해 실행되는 선택적 미니 리듀서입니다. 셔플 트래픽을 크게 줄여주지만, 리듀스 연산이 결합 법칙과 교환 법칙을 모두 만족하는 경우에만 사용할 수 있습니다.

Spark MapReduce는 중간 결과를 메모리에 유지하고 작업을 단계의 방향 그래프 하나로 표현하는 반면, MapReduce는 단계 사이에 중간 출력을 디스크에 기록합니다. Spark 따라서 반복 작업에는 훨씬 더 빠릅니다.

파티셔너는 기본적으로 키를 리듀서 개수로 나눈 나머지 값을 해싱하여 각 중간 키를 어떤 리듀서가 받을지 결정합니다. 만약 이 해시 값으로 인해 하나의 리듀서만 과부하 상태가 되는 경우에는 사용자 지정 파티셔너가 작성됩니다.

하둡은 입력 분할마다 하나의 맵 태스크를 생성하며, 분할은 전체 파일이 아닌 바이트 범위입니다. 하나의 큰 파일은 여러 개의 분할을 생성하고, 여러 개의 작은 파일은 작고 비효율적인 맵 태스크를 생성합니다.

이 게시물을 요약하면 다음과 같습니다.