Intro

Presto는 Facebook의 넘쳐나는 페타바이트급 데이터를 효율적으로 분석하기 위해 2012년도에 kickoff 된 프로젝트 입니다.
2013년 가을 Facebook에서 apache 라이선스를 적용하여 Presto 오픈소스를 공개하였습니다. [FE 발표

즉, 기업이든 연구기관이든 큰 문제없이 무료로 사용할 수 있지요. [아파치 라이선스 2.0 FAQ  ]

 

Presto란 ?

Presto는 Facebook kickoff 프로젝트의 내용처럼 TB, PB급 데이터를 효율적으로 처리하기 위해 만들어졌습니다. 대용량의 데이터를 빠르게 추출하기 원하면 Hive 보다는 Presto를 사용하는 것이 적합합니다.

Presto의 핵심은 두가지입니다.

  • 다양한 소스 지원 - Hive 메타스토어, RDBMS, 아마존 S3, HBase 등 다양한 소스로부터 데이터를 읽어올수 있다.

  • MR보다 빠르다 - MR Job 베이스의 Hive는 중간 단계별 결과를 Disk(HDFS or Local FS)상에 저장하는데, Presto는 이를 Memory상에 저장합니다.

 

아키텍쳐

에코관점의 Presto 아키텍쳐

Presto는 하나의 Coordinator와 실제로 job을 수행하는 여러개의 Worker로 나누어집니다.
Coordinator는 HBase, Hive 등 다양한 데이터 소스등을 읽어와 worker에게 전달을 하는 인터페이스 역할을 합니다.

https://labs.gree.jp/blog/2014/12/12838/ 

 

내부 동작 과정 (Daemon)

  • Coordinator (HIVE의 리소스 매니저와 비슷)
    * Clinet와 직접적은 통신을 하는 Gateway 역할을 함.
    * Client를 통해 들어오는 쿼리를 관리하며, Workerdata 처리를 하게끔 task를 보내줌(= excute).

  • Worker (HIVE의 노드 매니저와 비슷)
    * Coordinator를 통해 받은 task를 기반으로 data source에 접근함.
    * 리턴 결과를 Coordinator가 아닌 바로 Client로 보내 줌.

 

상세 동작 과정

0.    Discovery Service : Worker 실행시 CoordinatorDiscovery Service로 리스트가 등록된다. 이 리스트를 기반으로 CoordinatorWorker에게 excute를 전달 합니다.

1.    ClientHTTP 프로토콜로 쿼리를 Coordinator Parser 에 전달 합니다.

2.    CoordinatorPlanner로 쿼리플랜을 작성 합니다.

3.    Planner가 작성되면 CoordinatorSchedulerWorker가 일을 수행하게끔 task를 전달합니다.(excute)

4.    WorkerConnector plugin을 통해 다양한 Data source로부터 데이터를 읽어옵니다. 이 작업은 Memory상에서 수행됩니다.
(
중요!) 메모리상에서 task가 진행되기 때문에 worker가 부담스러워 하지 않도록 client 딴에서 쿼리 튜닝이 필수입니다. 막 쓰다가 엔지니어와 싸움날 수 있습니다 :(

5.    Worker는 작업이 끝나면 바로 Client로 결과를 보내줍니다.

presto definitive guide storage environment 中

+ Recent posts