8월 마소잡지에 Erlang으로 Map/Reduce 프레임웍을 만드는 예제로 만든적이 있었다. 이 글 이후에 외부 스크립트로 Python을 사용하는 포스팅을 쓴적이 있었다.
사실 위 글은 내가 만든 map/reduce 프레임웍에서 Python 외부 스크립트를 사용하기 위한 방법을 고안하기 위해 했던 작업의 일환이였다.
그러나 내가 생각했던 수준보다 더 많은 고민을 한 오픈소스 프로젝트가 얼마전에 공개되었다. 좀 촌스러운 프로젝트 이름인지 몰라도 Disco 0.1로..
내가 생각했던 개념이랑 매우 상이해서 세상에 나랑 같은 생각을 하는 사람이 존재한다는게 정말 놀랍기 그지없다.
개략적인 알고리즘 얼개는 기존의 Map/Reduce의 개념과 같다.
초기 모델이라 Python으로 작성된 map reduce 함수만을 지원한다. 아마도 이것은 쉽게 다른 언어로 포팅이 가능할거라 생각된다. Erlang에서 외부 언어를 사용하는 방법 중에 필자가 전에 설명한 Port가 사용된다.
내부 아키텍처는 아래와 같다.
위와 같은 Erlang Map/Reduce 플랫폼을 이미 노키아 리서치 랩에서 데이터 마이닝과 대용량 풀 텍스트 인덱싱에 사용하고 있다고 이야기 하고 있다. 또한 사용자 컴퓨팅 리소스가 없을 경우를 감안해 아마존 클라우드 컴퓨팅 리소스인 EC2에 사용할수 있게끔 스크립트도 제공하고 있다.
내가 궁금한건 위의 그림과 같이 정확하게 몇번째 CPU 코어에 Job을 할당하는게 가능한가 이다. 이런 스케줄링 기능이 Erlang에 있는지 없는지는 아직 확인 해보지 않았고 위 프로젝트에 컴포넌트화 되어 있는지도 확실치 않다.
게다가 Local Disk에 데이터를 어떤 방식으로 저장하는지도 궁금하다. 내 예상에는 Erlang에서 지원하는 ETS/DETS, Mnesia를 사용하지 않을까 한다.
이런 부분은 일단 사용해보고 코드를 뒤짚어 보면서 알아봐야 겠다. 얼른 뒤짚어 보고 아이디어 및 코드 컨트리뷰션이나 해야 겠다. Erlang 개발자가 없으니 기회도 좀 있겠군.
일단 위 프레임웍의 소스코드를 분석하는 족족 블로그에 공개해보겠다.
아래는 위 프로젝트 개발자인 Ville Tuulos의 글
Hi all,
I am happy to announce the availability of Disco (as already featured in
Reddit, Hacker News etc.), an open-source implementation of the
Map/Reduce framework for distributed computing. Its
core is written in Erlang but users typically write jobs in Python.Find the project site at
http://discoproject.org
or see the source code right away at
http://github.com/tuulos/disco/tree/master
We at Nokia Research in Palo Alto have been using it successfully for
data mining, building probabilistic models, and full-text indexing of
hundreds of gigabytes of real-world data on hundreds of CPUs in
parallel. If you don’t have a spare cluster available, we provide a
script that sets up a working cluster automatically on the Amazon’s EC2
cloud.It has been a pleasure to use Erlang to implement the job scheduler
and other core components of the system. It uses SCGI to provide a web
interface through an external web server, the slave module to start
Erlang VMs on slave nodes, and normal port commands to launch Python
workers on the nodes.Disco is released under the BSD license. The system is still young,
there are known bugs, and there is still work to be done on scalability
issues as well. You’re very welcome to try out the system, give
feedback, and develop the system with us.I’ll be at the ICFP / Erlang Workshop in Victoria, so if you’re
attending I’d be happy to show a demo and have a chat with you about Disco.Ville Tuulos
Member of Research Staff
Nokia Research Center
Palo Alto
Disco 0.1 – 얼랭으로 만든 오픈소스 분산 컴퓨팅 프레임웍 by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.