Thoughts2013.11.08 11:37

페이스북이 대용량 데이터 분석 솔루션 Presto를 오픈 소스로 공개했습니다. 대용량 데이터를 많이 분석해야 하는 Facebook 특성상 이런 솔루션이 필요했을 것으로 보이는데요. (페이스북 내부적으로 300 페타바이트 이상의 데이터가 보관되어 있다고 합니다.) 2012년부터 이 솔루션을 개발하기 시작해서 드디어 오픈 소스로 공개가 가능한 시점까지 왔습니다. https://www.facebook.com/notes/facebook-engineering/presto-interacting-with-petabytes-of-data-at-facebook/10151786197628920



페이스북이 공개한 Presto 아키텍처는 위 그림과 같습니다. 글라이언트는 데이터 웨어하우스(Warehouse)에 대한 SQL 질의를 통해 데이터 분석을 시도하게 되는데, SQL 질의를 받으면 파서(Parser)와 플래너(Planner), 그리고 스케줄러(Scheduler)를 통해 최선의 질의 실행 형태를 결정하고 실행하게 되는데요. 이 과정에서 데이터에 가장 가까운 노드에 질의 수행이 맡겨지게 됩니다. 그 역할은 스케줄러가 맡는데, 질의 수행이 이루어지고 있는 전반적인 상황을 감시하게 됩니다. 데이터는 저장소에서 꺼내어져 워커(Worker)에 의해 병렬 분석 되고, 최종적으로 분석 결과가 클라이언트에게 되돌려지는 형태입니다. 


Hive나 MapReduce가 중간 결과를 다시 디스크에 쓰는 반면, Presto에서 모든 프로세싱은 메모리 상에서 이루어지고, 워커 간 파이프라인도 메모리로 구현됩니다. 따라서 불필요한 I/O가 발생하지 않기 때문에 질의 수행 시간이 줄어든다고 합니다. 


이 시스템은 Java로 구현되었는데, 개발하기 쉽고, 개발자 층이 두텁고, Java로 구현된 페이스북 내부 인프라와 연동하기 쉬워서 Java가 선택되었다고 하는군요. 질의 중 일부는 JVM 코드로 동적으로 컴파일되여, JVM에서 최적화가 가능하다고 합니다. Presto를 구현하면서 메모리 할당이나 가비지 콜렉션 과정에서 생기는 문제를 피하기 위해서 신경도 많이 썼다고 하는군요. (그 과정에서 얻은 교훈은 나중에 공개할 예정이라고 합니다. 사실 이 부분이 많이 기대되네요.) 



HDFS, Hive, HBase, Scribe같은 외부 시스템과의 연동을 위해서, 확장이 용이한 구조를 만드는 데도 신경을 썼다는군요. 위 그림은 그 구조를 밝힌 그림입니다. 


어쨌든 이런 구조를 통해 Presto는 Hive/MapReduce 시스템보다 열배 나은 성능을 달성했다고 합니다. (CPU 사용 효율, 그리고 질의 수행 시간의 측면에서 말이죠.) ANSI SQL을 대부분 지원한다는 군요. (다만 JOIN 테이블의 크기 제한 등, 몇 가지 제약조건은 잇다고 합니다.) 모든 처리 결과를 다시 테이블에 기록하는 기능은 현재로선 없답니다. (클라이언트에게 그냥 스트림 형태로 제공되기만 하는 듯.)


오픈 소스는 아래에 공개되어 있다고 하네요. 


http://prestodb.io/

https://github.com/facebook/presto



저작자 표시 비영리 변경 금지
신고
Posted by 이병준

소중한 의견, 감사합니다. ^^