복붙노트

[HADOOP] Hadoop Map의 데이터 공유

HADOOP

Hadoop Map의 데이터 공유

연속 감속기와 매퍼 사이에서 값을 공유 할 수 있습니까?

아니면 첫 번째 감속기의 출력을 메모리에 저장할 수 있으며 두 번째 매퍼가 메모리에서 액세스 할 수 있습니까?

문제는, 나는 Map1 -> Reducer 1 -> Map2 -> Reducer 2와 같은 체인 맵 감속기를 작성했습니다.

Map1과 Map2가 동일한 입력 파일을 읽는 중입니다.

Reduce1은 값을 'X'를 출력으로 가정합니다.

Map2에 'X'와 입력 파일이 필요합니다.

Reduce1의 출력 파일을 읽지 않고 어떻게 할 수 있습니까?

Mapper 2에 액세스하려면 메모리에 'X'를 저장할 수 있습니까?

해결법

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

    1.각 작업은 서로 독립적이므로 중간 위치에 출력을 저장하지 않으면 작업간에 데이터를 공유 할 수 없습니다.

    각 작업은 서로 독립적이므로 중간 위치에 출력을 저장하지 않으면 작업간에 데이터를 공유 할 수 없습니다.

    참고로 MapReduce 모델에서지도 작업은 서로 이야기하지 않습니다. 축소 작업도 마찬가지입니다. Hadoop에서 실행되는 Apache Giraph는 매퍼간에 통신없이 반복적으로 동일한 작업을 실행해야하는 반복 알고리즘에 대해 동일한 작업의 매퍼 간의 통신을 사용합니다.

    구현되는 알고리즘과 왜 MR인지는 모르지만 모든 MR 알고리즘은 BSP에서도 구현 될 수 있습니다. 다음은 BSP와 MR을 비교 한 논문입니다. 일부 알고리즘은 MR과 비교할 때 BSP에서 잘 수행됩니다. Apache Hama는 BSP 모델의 구현이며, Apache Hadoop은 MR 구현입니다.

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

    2.Reducer1에 의해 생성 된 별개의 행 수가 적 으면 (예 : 10000 (ID, 가격) 튜플이 있음) 2 단계 처리를 사용하는 것이 좋습니다. 각 Map2 매퍼에서 첫 번째 맵 / 축소 된 결과를 메모리로로드하고 입력 데이터를 필터 할 수 있습니다. 따라서 네트워크를 통해 필요한 데이터가 전송되지 않고 모든 데이터가 로컬에서 처리됩니다. 데이터의 결합 된 양의 사용으로 더 적은 수 있습니다.

    Reducer1에 의해 생성 된 별개의 행 수가 적 으면 (예 : 10000 (ID, 가격) 튜플이 있음) 2 단계 처리를 사용하는 것이 좋습니다. 각 Map2 매퍼에서 첫 번째 맵 / 축소 된 결과를 메모리로로드하고 입력 데이터를 필터 할 수 있습니다. 따라서 네트워크를 통해 필요한 데이터가 전송되지 않고 모든 데이터가 로컬에서 처리됩니다. 데이터의 결합 된 양의 사용으로 더 적은 수 있습니다.

    뚜렷한 행이 많은 경우 데이터를 두 번 읽어야합니다.

  3. from https://stackoverflow.com/questions/13154720/data-sharing-in-hadoop-map-reduce-chaining by cc-by-sa and MIT license