12. Step-10. Temperature averages with map/reduce :: 2015/04/08 13:10

이제 Infinispan에는 어떤 흥미로운 Data 저장되어 있다. 우리는 그것을 이용하여 어떤 computation 수행할 것이다. Every country별로 평균 온도를 계산해보자. 한가지 단순한 접근법은 하나의 node에서 전체 dataset 대해 반복하여 computation 수행하는 것이다. 하지만 여기에는 두가지 불리한 면이 있다. 첫번째는 각각의 owner로부터 data fetch 필요하다는 것이다. (빠른 메모리 대신에 느린 network 통해서 데이터를 가져와야 ). 두번째는 전체 cluster 배치된 node 아닌 하나의 node 마력만 이용한다는 것이다. 얼마나 낭비인가!


Infinispan 두가지 문제에 대한 해결책을 제시한다. 분산 처리와 map/reduce 대한 강력한 개념을 사용하여 모든 node에서 locally computation 수행할 있다. 그리고  작업 수행 결과를 master node 보내서 작업 수행 결과를 aggregation한다. Average country temperature 계산하기 위해서 어떻게 map/reduce 사용할 있는지 살펴보자.


첫째로 every entry 호출하고, computation 수행하고, 결과를 돌려주는 method mapper 필요하다. 우리의 경우에는 "computation" entry country temperature 추출하고 정보들을 collector 보낸다.


public class CountryTemperatureMapper implements Mapper<String, LocationWeather, String, Float> {

@Override

public void map(String key, LocationWeather value, Collector<String, Float> collector) {

collector.emit(value.country, value.temperature);

}

}


위의 코드는 entry 대해서 local에서 실행될 것이다. Mapper 선언의 Generic type input key/value output key/value pair 나타낸다. 특히, 우리는 location/weather pair 처리하여 country/temperature pair return할 것이다. Collector 동일한 output key 속한 모든 값을 aggregate하고, reducer 그것을 전달할 것이다.


public class CountryTemperatureReducer implements Reducer<String, Float> {

@Override

public Float reduce(String reducedKey, Iterator<Float> i) {

int count = 0;

float sum = 0f;

while(i.hasNext()) {

++count;

sum += i.next();

}

return sum / count;

}

}


Reducer output key 대해서 수집된 value 호출할 것이다. 우리의 경우에는 모든 값을 더해서 ("temperatures") 평균을 내기 위해 count 나눴다. 끝났다!(that's it!) 한번 실행해 보자.


git checkout -f step-10

mvn clean package exec:exec # from terminal 1

mvn exec:exec # from terminal 2


[Coordinator Output]


---- Average country temperatures ----
Average temperature in Canada is -11.0° C
Average temperature in USA is 5.8° C
Average temperature in Romania is 7.0° C
Average temperature in UK is 3.0° C
Average temperature in Italy is 5.5° C
Average temperature in Portugal is 13.6° C
Average temperature in Switzerland is -0.1° C



이제 우리는 우리가 제품에서 실행하고 싶은 실제 작업 수행에 유용한 기능을 가진 전체적으로 동작하는 application 가지게 되었다. 이제 조금 간단하게 environment에서 configuration 변경하는 방법에 대해서 다음 단계에서 알아보자.

2015/04/08 13:10 2015/04/08 13:10
Trackback Address :: http://www.yongbi.net/trackback/677
[로그인][오픈아이디란?]
오픈아이디로만 댓글을 남길 수 있습니다
Name
Password
Homepage

Secret
< PREV |  1  |  ...  125  |  126  |  127  |  128  |  129  |  130  |  131  |  132  |  133  |  ...  566  |  NEXT >