2011-07-29 3 views
3

필자는 map-and-reduce 모델 (길이가 짧다는 단점, 시간이 많이 걸리는 알고리즘을 통해 이전에 계산 된 몇 백 개의 순위를 모으는 것) 하에서 실행하기에 매우 비싼 작업을 가지고 있습니다.셀러리 for Map-Reduce 또는 Python의 다른 대안?

(멀티 프로세싱이 아닌) 클러스터에서 작업을 병렬 처리하고 싶고 CeleryDisco의 두 가지 구현에 초점을 맞추고 싶었습니다. Celery는 순진한지도 및 축소 기능을 지원하지 않으며 "지도"부분이 TaskSets을 사용하여 쉽게 수행되지만 "절약"부분을 어떻게 효율적으로 구현합니까?

(디스코와 내 문제는 윈도우에서 실행되지 않는다는 것입니다, 나는 그렇게 맵 줄이기위한 또 다른 프레임 워크를 실행, 프로그램의 다른 부분에 대한 설정 셀러리 이미 오히려 세련되지 못한 것 같다.)

답변

1

기본적으로 한 작업의 출력을 가져와 다른 작업의 입력으로 출력을 적용해야합니다. 셀러리는 이것에 도움이되지 않습니다.

셀 방식으로 비동기 방식으로 작업 (맵 파트)을 실행하는주기적인 작업 스케줄러를 가질 수 있으며 단일 컴퓨터 인 경우 작업 참조 자체를 유지하거나 DB 백엔드 (redis/mongo/기타). 이 결과를 수집하고 reduce 함수를 적용하려면 스케줄러가 필요할 수 있습니다.

지도에 대한 파이썬 프로세스를 실행하고 모든 클러스터를 줄이고 redis와 같은 메모리 db에 결과를 저장하고 샐러리를 사용하여 맵에서 작업을 실행하고 줄이면됩니다. 주요 프로세스는 결과를 수집하고 결합합니다.