본문 바로가기

MACHINE LEARNING

MapReduce


이 글은 WorDS 에 올라온 글을 번역한 것입니다. 저자에게 번역에 대한 허가를 받지 않았기에, 언제든 삭제 될 수 있습니다. 오역이 있을 수 있으니, 가능하면 원글을 읽는 것이 좋습니다. 

 

Map-Reduce는 분산된 데이터 처리를 단순화하는 확장 가능한 프로그래밍 모델입니다. Map-Reduce는 Mapping, Shuffling Reducing의 세 가지 주요 단계로 구성됩니다. Map-Reduce 작업을 쉽게 할 수 있는 방법은 대규모 작업을 여러 사람에게 '위임'한 다음 각 작업 결과를 결합하여 최종 결과를 산출하는 것입니다.

포인트를 가져 오는 예를 들어 봅시다. 방금 이 위대한 소식을 사무실에서 들었고 모든 동료를 위해 파티를 열었습니다! 저녁 식사를 위해 파스타 요리를 하기로 결정했습니다. 요리를 좋아하는 친구 네 명이 준비를 함께 하기 위해 자원 봉사합니다. 파스타를 준비하는 일은 주로 채소를 자르고, 요리하고, 장식하는 것입니다.

야채를 잘게 잘라내는 것이 map-reduce 작업과 어떻게 유사한 지 살펴 보겠습니다. 여기서 원시 야채는 입력 데이터를 상징하고 친구들은 계산 노드와 같으며 최종 잘게 잘린 채소는 원하는 결과와 유사합니다. 각 친구는 양파, 토마토, 후추를 잘라 내고 무게를 잽니다.

당신은 부엌에 있는 각 야채 종류가 얼마나 있는지를 알고 싶을 것입니다. 이 계산이 진행되는 동안 이 채소들을 자르고 싶습니다. 결국, 양파는 무게가 파운드로 표시되는 라벨, 토마토와 구분될 수 있게 표시되는 라벨과 함께 큰 그릇 하나에 있어야합니다.

MAP : 처음에는 4 명의 친구들에게 각각 다른 종류의 채소를 무작위로 배정합니다. 그들은 그것들을 잘라내고 각 채소의 무게를 측정하기 위해 '계산'능력을 사용해야 합니다. 그들은 서로 다른 유형의 채소를 섞지 않도록 해야 합니다. 따라서 각 친구는 다음과 같은 <key, value> 쌍의 매핑을 생성합니다.

친구 X :         

<토마토, 5 파운드>             
<양파, 10 파운드> 
<마늘, 2 파운드>

친구 Y :         

<양파, 22 파운드> 
<피망, 5 파운드>

...

당신이 정말 큰 파티를 하는 것처럼 보입니다! 이제 친구들이 채소를 잘르고 채소의 무게와 종류를 각 그릇에 표시 했으므로 다음 단계로 이동합니다.

SHUFFLE :이 단계를 그룹화 라고도 합니다. 여기 채소를 그 유형별로 그룹화 하려고 합니다. 당신은 각 채소를 부엌의 다른 공간에 할당하고, 당신의 친구는 그릇을 그룹화해서 마치 물건들이 함께 놓여지는 것처럼 합니다.

부엌 북쪽 끝 :

<토마토, 5 파운드> 
<토마토, 11 파운드>

웨스트 엔드 주방 :  

<양파, 10 파운드> 
<양파, 22 파운드> 
<양파, 1.4 파운드>

동쪽 끝 주방 :   

<피망, 3 파운드> 
<피망, 10 파운드>

파티는 몇 시간 만에 시작되지만, 지금까지 매핑 및 그룹화를 통해 친구가 성취 한 것에 깊은 인상을 받았습니다! 주방은 이제 훨씬 조직적으로 보이고 원료는 잘게 잘려 있습니다. 이 작업의 마지막 단계는 실제로 각 채소의 양을 측정하는 것입니다. 이것은 우리를 Reduce 단계로 이끌어줍니다.

REDUCE :이 단계에서는 친구 한테 똑같은 종류의 물건을 모으고, 큰 그릇에 넣고,이 큰 그릇에 개별 그릇 무게의 합계를 표시하도록 요청합니다. 친구들은 파티가 시작되기를 기다릴 수 없고, 즉시 작은 그릇을 줄이기 시작합니다. 결국, 당신은 그것에 큰 라벨이 붙은 각 야채의 총 무게가있는 멋진 큰 그릇을 가지고 있습니다. 

<토마토, 36 파운드> <피망, 15 파운드> <양파, 44 파운드>


그 숫자는 더 작은 그릇에서 줄여서 그 야채의 총 무게를 나타냅니다.

친구들('계산 노드')은 Map-Reduce 작업을 수행하여 파스타 요리를 시작할 수 있도록 도와줍니다. 나는 전체 연습을 조정 했으므로 이 Map-Reduce 작업의 "마스터"노드입니다. 각 친구들은 Mappers, Groupers 및 Reducers의 역할을 여러 차례에 걸쳐했습니다. 이 예제는 이 기술의 힘을 보여줍니다.

이 단순하고 강력한 기술은 더 많은 친구들이 당신과 합류하기를 원할 경우 매우 쉽게 확장 될 수 있습니다. 앞으로는 다른 오픈 소스 도구에 대한 기사를 계속 추가하여 Map-Reduce를 쉽게 구현하여 계산상의 문제를 해결하는 데 도움이 될 것입니다.