You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
논문 [Presto: SQL on Everything](https://trino.io/Presto_SQL_on_Everything.pdf)
12
12
13
13
# Abstract
14
-
Presto는 Facebook 내 SQL 분석 워크로드에 대부분을 지원하는 분산 쿼리 엔진이다. Presto의 커넥터 API는 고성능 입출력 인터페이스를 제공하기 위해 플러그인을 허용한다. 하둡 데이터 웨어하우스, RDBMS, NoSQL시스템, 스트림 처리 시스템 등이 플러그인에 포함된다. 이 논문에서는 Facebook에서 Presto 가 지원하는 유즈케이스를 먼저 소개하고 아키텍처와 구현을 설명한다. 이후 유즈케이스를 위한 특직과 성능 최적화를 소개한다. 마지막으로 성능 결과를 소개한다.
14
+
Presto는 Facebook 내 SQL 분석 워크로드 대부분을 지원하는 분산 쿼리 엔진이다. Presto의 커넥터 API는 고성능 입출력 인터페이스를 제공하기 위한 플러그인을 허용한다. 하둡 데이터 웨어하우스, RDBMS, NoSQL, 스트림 처리 시스템 등이 플러그인에 포함된다. 이 논문에서는 Facebook에서 Presto 가 지원하는 유즈케이스를 먼저 소개하고 아키텍처와 구현을 설명한다. 이후 유즈케이스를 위한 특징과 성능 최적화를 소개한다. 마지막으로 성능 결과를 소개한다.
15
15
16
16
# Introduction
17
-
큰 데이터에서 빠르고 쉽게 인사이트를 추출하는 능력은 점점 중요해진다. 큰 데이터를 수집하고 저장하는 것이 싸지면서, 빠르고 쉬운 쿼리는 더 중요해졌다. SQL과 같은 쿼리 언어를 사용하면 조직 내 많은 사람들의 데이터 분석 접근성을 좋게 한다. 그러나 조직 내 호환되지 않는 여러 SQL-like 시스템을 사용하면 사용성은 떨어진다.
17
+
빅데이터에서 빠르고 쉽게 인사이트를 추출하는 능력은 점점 중요해진다. 큰 데이터를 수집하고 저장하는 것이 싸지면서, 빠르고 쉬운 쿼리는 더 중요해졌다. SQL과 같은 쿼리 언어를 사용하면 조직 내 많은 사람들의 데이터 분석 접근성을 좋게 한다. 그러나 조직 내 호환되지 않는 여러 SQL-like 시스템을 사용하면 사용성은 떨어진다.
18
18
19
19
Presto는 2013년에 Facebook에서 만들었다. AWS Athena또한 Presto로 만들어졌다.
20
20
21
-
Presto는 ANSI SQL을 지원한다. 하둡, RDBMS, NoSQL 시스템, Kafka와 같은 스트리밍 시스템에 쿼리할 수 있다. 'Generic RPC' 커넥터를 활용하면 쉽게 SQL 인터페이스를 추가할 수 있다. Presto는 HTTP API, JDBC 를 지원하며 업계 표준 BI도구와 호환된다. 빌트인 하이브 커넥터는 HDFS/S3 와 같은 분산 파일 시스템에 네이티브하게 r/w 할 수 있다. ORC, Parquet, Avro와 같은 파일 포맷도 지원한다.
21
+
Presto는 ANSI SQL을 지원한다. 하둡, RDBMS, NoSQL 시스템, Kafka와 같은 스트리밍 시스템에 쿼리할 수 있다. 'Generic RPC' 커넥터를 활용하면 쉽게 SQL 인터페이스를 추가할 수 있다. Presto는 HTTP API, JDBC 를 지원하며 업계 표준 BI도구와 호환된다. 내장 하이브 커넥터는 HDFS/S3 와 같은 분산 파일 시스템에 네이티브하게 읽고 쓸 수 있다. ORC, Parquet, Avro와 같은 파일 포맷도 지원한다.
22
22
23
-
Presto는 대화형/BI 쿼리와 장시간 배치 ETL잡을 수행하고 A/B 테스팅에도 사용된다. 매일 Facebook의 수백 페타바이트 데이터와 수조개 행을 처리한다.
23
+
Presto는 대화형/BI 쿼리와 장시간 배치 ETL잡을 수행하고 A/B 테스팅에도 사용된다. 매일 Facebook의 수백 페타바이트 데이터와 수 조 행을 처리한다.
24
24
25
25
Presto 특징
26
-
- 멀티 테넌트. 수백 개의 메모리, 입출력, CPU집중 쿼리를 수행한다. 클러스터 리소스를 활용하면서 수천 개의 워커 노드로 확장된다.
26
+
- 멀티 테넌트. 수백 개의 메모리, 입출력, CPU 집약적 쿼리를 수행한다. 클러스터 리소스를 활용하면서 수천 개의 워커 노드로 확장된다.
27
27
- 확장성. 하나의 쿼리로 여러 데이터 소스를 처리할 수 있다. 여러 시스템을 통합하는 복잡성을 줄인다.
28
28
- 유연성. 다양한 유스케이스를 지원한다.
29
29
- 고성능. 코드 생성을 포함한 여러 기능과 최적화가 가능하다. 여러 쿼리는 워커 노드 내 하나의 long-lived JVM 프로세스를 공유한다. 이는 응답 시간을 줄이지만 통합된 스케줄링, 리소스 관리와 고립성을 요구한다.
30
30
31
31
# Use Cases
32
32
33
33
## Interactive Analytics
34
-
페이스북은 대량의 멀티테넌트 데이터 웨어하우스를 운영중이다. 비즈니스 함수와 조직 유닛은 운영 클러스터의 작은 집합을 공유한다. 데이터는 분산 파일시스템에 저장되고 메타데이터는 별도 서비스에 저장된다. 이러한 시스템은 HDFS, Hive metastore service와 유사한 API를 가진다. 이를 'Facebook Data warehouse'라 부르며 Presto의 Hive 커넥터 변형을 이용해 읽고 쓴다.
34
+
페이스북은 대량의 멀티테넌트 데이터 웨어하우스를 운영중이다. 비즈니스 함수와 조직은 클러스터를 공유한다. 데이터는 분산 파일시스템에 저장되고 메타데이터는 별도 서비스에 저장된다. 이러한 시스템은 HDFS, Hive metastore service와 유사한 API를 가진다. 이를 'Facebook Data warehouse'라 부르며 Presto의 Hive 커넥터 변형을 이용해 읽고 쓴다.
35
35
36
36
엔지니어와 데이터 사이언티스트들은 가설 검증, 시각화 혹은 대시보딩을 위해 적은 양의 데이터(~50GB-3TB compressed)를 주로 수행한다. 유저는 주로 쿼리 작성 도구, BI도구, Jupyter notebook를 사용한다. 각 클러스터는 다양한 형태의 50~100개 쿼리를 동시 수행하며 수초/분 내 결과를 반환해야 한다. 유저는 **수행 시간에 예민하며 쿼리 자원 요구사항에 관심이 없다.** 유저는 탐색 분석 대부분에서 전체 결과 반환을 요구하지 않는다. 쿼리는 최초 결과 반환 후 취소되거나 `LIMIT` 절을 사용하여 반환 데이터를 제한한다.
37
37
38
38
## Batch ETL
39
-
새로운 데이터는 일정 간격의 ETL쿼리를 수행함으로써 데이터 웨어하우스에 적재된다. 쿼리는 task들의 의존성을 결정하고 적절하게 스케줄링하는 워크플로 관리 시스템에 의해 스케줄링된다. Presto는 레거시 배치 처리 시스템으로부터의 이전을 지원한다. 또한 ETL쿼리는 CPU의 많은 부분을 차지한다. 이러한 쿼리들은 데이터 엔지니어에 의해 작성되고 최적화된다. ETL 쿼리들은 대화형 분석 쿼리보다 리소스를 많이 사용한다. 또한 CPU-heavy한 변환과 메모리 집약적 집계 혹은 조인을 사용한다. **쿼리 지연은 리소스 효율성과 클러스터 처리량보다 상대적으로 덜 중요하다.**
39
+
새로운 데이터는 일정 간격의 ETL쿼리를 수행함으로써 데이터 웨어하우스에 적재된다. 쿼리는 task들의 의존성을 결정하고 적절하게 스케줄링하는 워크플로 관리 시스템에 의해 스케줄링된다. Presto는 레거시 배치 처리 시스템으로부터의 이전을 지원한다. 또한 ETL쿼리는 CPU의 많은 부분을 차지한다. 이러한 쿼리들은 데이터 엔지니어에 의해 작성되고 최적화된다. ETL 쿼리들은 대화형 분석 쿼리보다 리소스를 많이 사용한다. 또한 CPU 집약적인 변환과 메모리 집약적 집계 혹은 조인을 사용한다. **쿼리 지연은 리소스 효율성과 클러스터 처리량보다 상대적으로 덜 중요하다.**
40
40
41
41
## A/B Testing
42
-
A/B 테스팅은 통계적 가설 검증을 통한 제품 변경의 임팩트를 평가하는 것이다. Facebook 내 대부분의 A/B 테스트 인프라는 Presto에서 수행된다. 유저들은 테스트 결과가 몇 시간 내 제공되며 정확하기를 기대한다. 또한 유저가 더 깊은 통찰력을 얻기 위해 대화형 대기 시간(∼5-30초) 내에서 결과에 대해 임의의 slice와 dice를 수행할 수 있어야 한다. 미리 집계하는 방식으로 요구사항을 충족하는 것은 어렵다. 때문에 결과는 즉시 계산되어야 한다. 연산은 여러 데이터 셋을 조인해야 한다. 쿼리는 작아야 한다.
42
+
A/B 테스팅은 통계적 가설 검증을 통한 제품 변경의 임팩트를 평가하는 것이다. Facebook 내 대부분의 A/B 테스트 인프라는 Presto에서 수행된다. 유저들은 테스트 결과가 몇 시간 내 제공되며 정확하기를 기대한다. 또한 유저가 통찰력을 얻기 위해 대화형 대기 시간(∼5-30초) 내에서 결과에 대해 임의의 slice와 dice를 수행할 수 있어야 한다. 미리 집계하는 방식으로 요구사항을 충족하는 것은 어렵다. 때문에 결과는 즉시 계산되어야 한다. 연산은 여러 데이터 셋을 조인해야 한다. 쿼리는 작아야 한다.
43
43
44
44
## Developer / Advertiser Analytics
45
+
외부 개발자나 광고주를 위한 리포팅 도구는 Presto를 사용한다. *Facebook Analytics* 는 Facebook 플랫폼을 사용하여 애플리케이션을 개발하는 개발자를 위한 분석 도구이다. 이는 제한된 쿼리 집합을 사용하여 웹 인터페이스를 노출한다. 집계 데이터 크기는 크지만 쿼리는 매우 선택적이다. 유저가 그들의 앱과 광고에만 접근하기 때문이다. 대부분의 쿼리는 조인, 집계, 윈도우 함수를 포함한다. 데이터 수집 지연 시간은 수분이며 쿼리 지연시간은 수초 내로 매우 제한적이다. 99.999% 가용해야 하며 많은 유저의 수백개 동시 쿼리를 지원해야 한다.
45
46
46
-
외부 개발자나 광고주를 위한 리포팅 도구는 Presto를 사용한다. *Facebook Analytics* 는 Facebook 플랫폼을 사용하여 애플리케이션을 개발하는 개발자를 위한 분석 도구이다. 이는 제한된 쿼리 집합을 사용하여 웹 인터페이스를 노출한다. 집계 데이터 크기는 크지만 쿼리는 매우 선택적이다. 유저가 그들의 앱과 광고에만 접근하기 때문이다. 대부분의 쿼리는 조인, 집계, 윈도우 함수를 포함한다. 데이터 수집 지연 시간은 수분이며 쿼리 지연시간은 수초 내로 매우 제한적이다. 클러스터 99.999%의 가용해야 하며 많은 유저의 수백개 동시 쿼리를 지원해야 한다.
47
-
48
-
> 느낀점
49
47
> - 배치 ETL에도 쓰는군.
50
48
> - 유즈케이스가 우리 회사 상황과 비슷하군.
51
49
@@ -203,3 +201,13 @@ Presto의 자원 관리는 단일 클러스터에서 수백개의 쿼리를 동
203
201
> SKIP
204
202
205
203
# Engineering Lessons
204
+
Presto의 디자인 철학
205
+
1. Adaptiveness over configurability : Presto는 여러 쿼리 특성과 특성의 조합에 적응 가능해야 한다. 예를 들어 적응형 배압 적용 이전에 대부분의 메모리와 CPU는 적은 수의 잡에서 사용되었는데, 이는 동시에 실행되는 지연에 민감한 잡에 불리하게 작용한다. 적응성이 없다면 워크로드를 쪼개고 각각 설정을 조정해야 할 것이다. 결과적으로 상용에서 다양한 쿼리를 실행하도록 확장하기 어려울 것이다.
206
+
2. Effortless instrumentation : Presto는 쿼리나 노드 수준에서 성능 통계를 노출한다. 이는 관측 가능한 시스템 설계를 권장하고 엔지니어가 코드의 성능을 계측하고 이해하도록 한다. 그 결과로 워커 노드는 10000개의 실시간 성능 카운터를 노출하고 오퍼레이터 수준의 통계를 수집하고 저장한다. (이를 태스크와 스테이지 수준으로 병합한다.) 결과적으로 시스템을 최적화 하는데 데이터-드리븐 접근을 할 수 있다.
207
+
3. Static configuration : Presto와 같은 복잡한 시스템의 운영 이슈는 원인 분석과 빠른 완화가 어렵다. Presto는 정적 구성을 사용한다. 많은 수의 클러스터와 구성 집합이 있는 경우 복잡성을 운영적인 조사에서 배포 프로세스/tooling으로 옮기는 것이 효율적이다.
208
+
4. Vertical integration : Presto 팀은 성능과 효율성이 중요한 컴포넌트를 위한 커스텀 라이브러리를 설계한다. 에를 들어 커스텀 파일 리더는 presto-네이티브한 자료구조를 사용하고 변환 오버헤드를 없앤다. 라이브러리를 쉽게 디버깅하고 통제하는 것 또한 매우 중요하다.
209
+
210
+
# Conclusion
211
+
Presto. 오픈 소스 MPP(Massive Parrallel Processing) SQL 쿼리 엔진. Facebook에서 개발. 빠르게 큰 데이터셋을 처리한다. 다양한 유즈케이스에서 고성능 SQL 처리를 위해 유연하게 설계되었다. 풍부한 플러그인 인터페이스와 커넥터 API는 다양한 데이터 소스와 통합이 가능하다. 또한 적응성있게 설계되었다. 읽기 쓰기 병렬도, 네트워크 입출력, 오퍼레이터 휴리스틱, 스케줄링을 쿼리의 특성에 맞게 자동으로 조정할 수 있다. Presto의 아키텍처는 적은 지연시간을 요구하는 서비스 워크로드를 가능하게 하고 비싸고 오래 수행되는 쿼리를 효율적으로 처리한다.
212
+
213
+
Presto는 단일 SQL시스템으로 여러 분석 유즈케이스를 수행할 수 있게 한다. 여러 저장 시스템에 쉽게 쿼리하고 1000개 노드까지 확장 가능하다. 아키텍처와 설계는 붐비는 SQL-on-Bigdata 시장에서 틈새를 찾았다.
0 commit comments