복붙노트

[HADOOP] MapReduce 단계에서 Sort가 사용되는 이유는 무엇입니까?

HADOOP

MapReduce 단계에서 Sort가 사용되는 이유는 무엇입니까?

나는 여기에 새롭다. hadoop mapreduce를 사용하면서 왜 키순으로 정렬 할 수 있어야하는지 명확하지 않습니다. 맵 단계 후에, 우리는 각 고유 키에 해당하는 데이터를 몇 가지 감속기에 분배해야합니다. 이 작업을 올바르게 정렬 할 필요없이 수행 할 수 있습니까?

해결법

  1. ==============================

    1.정렬은 키를 그룹화하는 깔끔한 트릭이기 때문에 거기에 있습니다. 물론, 당신의 직업이나 알고리즘이 당신의 키의 순서를 필요로하지 않는다면, 당신은 어떤 해싱 트릭으로 더 빨리 그룹화 할 수 있습니다.

    정렬은 키를 그룹화하는 깔끔한 트릭이기 때문에 거기에 있습니다. 물론, 당신의 직업이나 알고리즘이 당신의 키의 순서를 필요로하지 않는다면, 당신은 어떤 해싱 트릭으로 더 빨리 그룹화 할 수 있습니다.

    Hadoop 자체에는 이미 JIRA가 수년 동안 제출되어 있습니다 (출처). Hadoop 위에 레이어 된 다른 여러 배포판에는 이미 이러한 기능이 있습니다. Hanborq는이를 일종의 정렬 회피라고 부릅니다. (출처)

    실제 질문에 (왜), MapReduce는 본질적으로 Google의 출처이며 다음 내용을 담고 있습니다.

    따라서 정렬을 지원하는 것이 더 편한 결정 이었지만 키를 그룹화하는 정렬 만 허용하는 것은 아닙니다.

  2. ==============================

    2."키 별 정렬"은 다른 시스템에 다른 키를 보내서 hadoop DISTRIBUTES 프로세스가 처리되는 것을 고려할 때 가장 잘 이해할 수 있습니다. 기본 아이디어 (단순화 된 버전)는 다음과 같습니다.

    "키 별 정렬"은 다른 시스템에 다른 키를 보내서 hadoop DISTRIBUTES 프로세스가 처리되는 것을 고려할 때 가장 잘 이해할 수 있습니다. 기본 아이디어 (단순화 된 버전)는 다음과 같습니다.

    The reducer which a (k,v) pair is sent to = k.hashCode()%num_of_machines. 
    

    따라서 내 키의 해시 코드가 10이고 두 대의 컴퓨터가있는 경우 키는 예를 들어 컴퓨터 # 0으로 전송됩니다.

    따라서, 키는 (첫번째) 계산을 분배하는 간단한 방법을 제공합니다.

    계산 배포를 단순화 할뿐만 아니라 키를 사용하면 이기종 데이터 파일의 레코드를 단일 클러스터에 조인 할 수 있습니다. 이것이 우리가 word_count와 같은 일을 할 수있는 방법입니다.

    사실, 당신이 키를 필요로하지 않는다는 것을 발견한다면 --- 당신은 아마도 아무 것도 필요하지 않을 것입니다!

    고전적인 예 (단어 수) :

    hadoop "단어 수"예제에서 우리는 값 (텍스트의 세그먼트에서 그 단어를 # 번 본 키)을 갖는 키 (하나의 키 = 한 단어)를 방출합니다. 이렇게하면 SINGLE 감소 함수가 SINGLE 단어를 수신하여 본 모든 시간을 추가하여 정확한 단어 수를 생성 할 수 있습니다.

    따라서 키 집계는 "맵"단계가 여러 시스템에 독립적으로 분산되도록 허용합니다. 동일한 감속기에 키를 집계하지 않고 단어 수 계산에서 주어진 단어에 대해 여러 단어 수를 얻을 수 있습니다. 하나의 감속기가 모든 파일에서 모든 단어 수를 수신한다는 보장이 없기 때문입니다.

    다른 예시:

    이제 ... 우리는 사회 보장 번호를 ID로 사용하고 개인 데이터의 집합을 출력하려고합니다. 두 개의 거대한 파일이 있다고 가정 해 보겠습니다.

    ssn-> name

    ssn-> shoe_size

    이 경우 키 그룹화 기능을 활용하여 개인 이름과 신발 크기가 같은 축소 기능으로 전송됩니다.

    감속기 (2)는 여기에 2 개의 레코드를 받게됩니다.

    ssn-> name, shoe_size

    여기서 아이디어는 map / reduce 작업을 작성할 때 감축 단계에서 의미있는 방법으로 함께 결합 될 수있는 방식으로 출력되는 "튜플"을 인코딩해야한다는 것입니다. 모든 분산 컴퓨팅 환경은 어느 시점에서 다른 노드에서 계산 된 레코드를 결합해야 할 것입니다. 키를 사용하면 편리하고 확장 가능한 방법론을 사용할 수 있습니다.

    따라서 동일한 키가 동일한 감속기 기능으로 이동한다는 사실은이 특정 사회 보장 번호에 대한 각 감속기가 해당 숫자와 관련된 모든 데이터를 수신하므로 ssn을 포함하는 데이터 레코드에 참여하고 출력 할 수 있음을 확인합니다. 이름, 신발 크기.

    결론

    이러한 방식으로 데이터를 결합하면 키를 통해 배포하지 않고도 일종의 중개 데이터 저장 / 캐싱과 관련된 복잡한 논리가 심하게 필요할 수 있습니다. Hadoop은 익숙한 pardigm (키와 값)을 사용하여 병렬 계산의 데이터 결과에 "조인"하려는 공통적 인 필요성을 간단하게 일반화하고 추상화합니다.

  3. from https://stackoverflow.com/questions/11746311/where-is-sort-used-in-mapreduce-phase-and-why by cc-by-sa and MIT license