• Presto: Interacting with petabytes of data at Facebook

  • Presto: 페이스북의 페타바이트 데이터와 상호교환 시스템

  • By Lydia Chan on Thursday, November 7, 2013 at 3:01am
  • 리디아 챈 작성 - 2013년 11월 7일 오전 3:01
  • By Martin Traverso
  • 작성 Martin Traverso
  • Background
  • 배경
  • Facebook is a data-driven company. Data processing and analytics are at the heart of building and delivering products for the 1 billion+active users of Facebook. We have one of the largest data warehouses in the world, storing more than 300 petabytes. The data is used for a wide range of applications, from traditional batch processing to graph analytics [1], machine learning, and real-time interactive analytics.
  • 페이스북은 데이터 기반 회사입니다. 데이터 프로세싱과 분석은 페이스북에서 활동하는 10억 사용자들을 위한 제품들을 구축 및 제공하는 핵심입니다. 우리는 300 페타바이터 이상을 저장하고 있는 세계에서 가장 큰 데이터 웨어하우스를 가지고 있습니다. 그 데이터들은 전통적인 배치 프로세싱으로 부터 그래프 분석, 기계적 학습 및 실시간 상호작용 분석에 이르기까지 광범위한 어플리케이션들을 위해 사용되고 있습니다.
  • For the analysts, data scientists, and engineers who crunch data, derive insights, and work to continuously improve our products, the performance of queries against our data warehouse is important. Being able to run more queries and get results faster improves their productivity.
  • 세밀한 데이터분석, 통찰력이 필요한 분석, 우리 상품들을 지속적으로 개선하기 위한 작업, 우리들의 데이터웨어하우스에 대한 쿼리 요청 처리를 하는 것은 분석가들, 데이터 과학자들 및 엔지니어들에게는 중요합니다.
    더 많은 쿼리들의 실행과 그들의 생산성 향상을 위해 보다 빠른 결과들을 가져야합니다.
  • Facebook’s warehouse data is stored in a few large Hadoop/HDFS-based clusters. Hadoop MapReduce [2] and Hive are designed for large-scale, reliable computation, and are optimized for overall system throughput. But as our warehouse grew to petabyte scale and our needs evolved, it became clear that we needed an interactive system optimized for low query latency.
  • 페이브북의 웨어하우스 데이터는 몇 개의 큰 하둡/HDFS로 구성된 클러스터들에 저장되어 있습니다. Hadoop MapReduce와 Hive는 규모가 크고 신뢰성있는 컴퓨팅을 위해 설계되었고, 전체적인 시스템 처리량을 고려하여 최적화되었습니다. 페타바이트 규모로 늘어나는 우리의 웨어하우스와 우리들의 진화된 요구사항으로 인하여, 우리는 낮은 쿼리 대기시간위해 상호작용으로 최적화된 시스템을 필요하다는 것이 분명해졌습니다.
  • In Fall 2012, a small team in the Facebook Data Infrastructure group set out to solve this problem for our warehouse users. We evaluated a few external projects, but they were either too nascent or did not meet our requirements for flexibility and scale. So we decided to build Presto, a new interactive query system that could operate fast at petabyte scale.
  • 2012년 가을, 페이스북의 데이터 인프라스트락쳐 그룹에 있는 작은팀이 우리의 웨어하우스 사용자들의 이러한 문제를 해결하기 위하여 착수하였습니다. 우리는 몇 개의 외부 프로젝트를 평가했습니다. 하지만 그것들은 너무 기초적이거나 유연성과 확장성을 위한 우리들의 요구사항을 맞지 않았습니다. 그래서 우리는 페타바이트 규모의 신속한 클라우드 운영에 필요한 새로운 상호작용 쿼리 시스템인 Presto구축하기로 하였습니다.
  • In this post, we will briefly describe the architecture of Presto, its current status, and future roadmap.
  • 이 포스트에서는 Prestod의 아키텍쳐, 현재 진행상황 및 향후 로드맵을 간단하게 설명하겠습니다.
  • Architecture
  • 아키텍쳐
  • Presto is a distributed SQL query engine optimized for ad-hoc analysis at interactive speed. It supports standard ANSI SQL, including complex queries, aggregations, joins, and window functions.
  • Presto는 상호작용 속도에 맞춰진 애드-혹 분석에 최적화된 분산된 SQL 쿼리 엔진입니다. 이것은 복잡한 쿼리들, 집계, 조인들과 윈도우 함수들이 포함된 표준 ANSI SQL을 지원합니다.
  • The diagram below shows the simplified system architecture of Presto. The client sends SQL to the Presto coordinator. The coordinator parses, analyzes, and plans the query execution. The scheduler wires together the execution pipeline, assigns work to nodes closest to the data, and monitors progress. The client pulls data from output stage, which in turn pulls data from underlying stages.
  • 아래의 다이어그램은 Presto의 단순한 시스템 구조를 보여주고 있습니다. 클라이언트는 Presto 코디네이터에게 SQL을 전송합니다. 코디네이터는 파싱, 분석 그리고 쿼리의 실행을 계획합니다. 실행 파이프라인을 함께 연결된 스케쥴러는 데이터에 가장 가까운 노드에 작업을 할당하고 진행상황을 모니터합니다. 클라이언트는 처음 단계부터 순서대로 가져와 데이터 출력 단계에서 데이터를 가져갑니다.
  • The execution model of Presto is fundamentally different from Hive/MapReduce. Hive translates queries into multiple stages of MapReduce tasks that execute one after another. Each task reads inputs from disk and writes intermediate output back to disk. In contrast, the Presto engine does not use MapReduce. It employs a custom query and execution engine with operators designed to support SQL semantics. In addition to improved scheduling, all processing is in memory and pipelined across the network between stages. This avoids unnecessary I/O and associated latency overhead. The pipelined execution model runs multiple stages at once, and streams data from one stage to the next as it becomes available. This significantly reduces end-to-end latency for many types of queries.
  • Presto의 실행모델은 Hive/MapReduce와는 근본적으로 다릅니다. Hive는 쿼리들을 연속적인 실행 MapReduce 작업들의 여러 단계로 변환합니다. 각 작업은 디스크로부터 입력된 것과 중간결과를 다시 디스크로 기록한 것을 읽습니다. 반면에, Presto 엔진은 MapReduce를 사용하지 않습니다. 이것은 semantics SQL을 지원하도록 설계된 연산를 통해 실행엔진과 사용자 쿼리를 지원합니다. 부가적으로 메모리와 네트워크로 결합된 영역들 사이의 파이프라인에서 스케쥴링과 모든 프로세싱이 개선되었습니다. 이것은 불필요한 I/O와 관련된 대기시간 오버헤드를 피할 수 있습니다. 파이프라인된 실행 모델은 오버헤드 회피가 가능하게 되어 하나의 단계로부터 다음으로 넘어가는 스트림 데이터를 한번에 여러 단계로 실행합니다. 이 많은 유형의 쿼리들을 종단 간 지연을 상당히 감소 시켜줍니다.
Image of 1964 article
  • The Presto system is implemented in Java because it’s fast to develop, has a great ecosystem, and is easy to integrate with the rest of the data infrastructure components at Facebook that are primarily built in Java. Presto dynamically compiles certain portions of the query plan down to byte code which lets the JVM optimize and generate native machine code. Through careful use of memory and data structures, Presto avoids typical issues of Java code related to memory allocation and garbage collection. (In a later post, we will share some tips and tricks for writing high-performance Java system code and the lessons learned while building Presto.)
  • Presto 시스템은 커다란 에코시스템과 처음 Java로 구축된 페이스북의 데이터 인프라 컴포넌트와의 손쉬운 통합과 신속한 개발을 위해 자바로 구현되어 있습니다. Presto는 쿼리 계획하에서 JVM 최적화와 네이티브한 기계적 코드로 생선된 바이트 코드 특정부분을 동적 컴파일을 합니다. Presto는 조심스러운 메모리와 데이터구조들의 사용을 통하여, 메모리 할당과 가비지 컬렉션 그리고 자바 코드관련된 일반적인 이슈를 피할 수 있습니다. (이후의 포스트에서는 Presto를 구축하는 동안 배운 교훈과 고성능의 자바시스템 코드를 작성하는 몇가지 팁과 트릭을 공유할 것입니다.)
  • Extensibility is another key design point for Presto. During the initial phase of the project, we realized that large data sets were being stored in many other systems in addition to HDFS. Some data stores are well-known systems such as HBase, but others are custom systems such as the Facebook News Feed backend. Presto was designed with a simple storage abstraction that makes it easy to provide SQL query capability against these disparate data sources. Storage plugins (called connectors) only need to provide interfaces for fetching metadata, getting data locations, and accessing the data itself. In addition to the primary Hive/HDFS backend, we have built Presto connectors to several other systems, including HBase, Scribe, and other custom systems.
  • 확장성은 Presto를 위한 또 다른 핵심 디자인 포인트입니다. 프로젝트의 초기단계 동안에는 HDFS를 추가한 다른 시스템들 속에 큰 데이터 셋들을 저장하도록 구현하였습니다. 몇 개의 데이터 저장소들은 H-Base와 같이 잘 알려진 시스템들입니다. 그리고, 나머지는 페이스북의 뉴스 피스 벡엔드 같은 사용자 정의 시스템들입니다. Presto는 단순한 스토리지 추상화로 설계되어 서로 다른 데이터 소스들에 대응하는 SQL 쿼리 기능을 제공하기 쉽도록 만들어줍니다.
    스토리지 플러그인들(컨넥터들로 불리는)은 메타데이터 가져오기, 위치정보 수집하기, 데이터 자체를 엑세스하기 위한 인터페이를 제공하는 것만이 필요합니다. 프라이머리 Hive/HDFS 백엔드와 더불어, 우리는 Presto 커넥터들을 몇 개의 다른 시스템들, HBase, Scribe가 포함된 기타 사용자 시스템들에 구축하였습니다.
Image of 1964 article
  • Current status
  • 현재 상태
  • As mentioned above, development on Presto started in Fall 2012. We had our first production system up and running in early 2013. It was fully rolled out to the entire company by Spring 2013. Since then, Presto has become a major interactive system for the company’s data warehouse. It is deployed in multiple geographical regions and we have successfully scaled a single cluster to 1,000 nodes. The system is actively used by over a thousand employees, who run more than 30,000 queries processing one petabyte daily.
  • 앞에서 언급한 것처럼, Presto의 개발은 2012년 가을에 시작하였습니다. 우리는 2013년 초에 처음으로 생산한 시스템을 올리고 운영하였습니다. 2013년 봄에 전사에 출시하게 되었습니다. 그 이후, Presto는 회사에서 최고수준의 데이터웨어하우스용 상호작용 시스템이 되었습니다. 이것은 다수의 지리적 영역에 배포되었고, 1,000 노드 싱글 클러스트의 규모가 되었습니다. 이 시스템은 천여명이 넘는 직원들에 의해 적극적으로 사용되어, 하루에 1 페타바이트를 처리하는 30,000개 이상의 쿼리들로 실행하였습니다.
  • Presto is 10x better than Hive/MapReduce in terms of CPU efficiency and latency for most queries at Facebook. It currently supports a large subset of ANSI SQL, including joins, left/right outer joins, subqueries, and most of the common aggregate and scalar functions, including approximate distinct counts (using HyperLogLog) and approximate percentiles (based on quantile digest). The main restrictions at this stage are a size limitation on the join tables and cardinality of unique keys/groups. The system also lacks the ability to write output data back to tables (currently query results are streamed to the client).
  • Presto는 페이스북에서 대부분의 쿼리들을 위한 CPU효율과 지연시간이 Hive/MapReduce보다 10배나 좋습니다. 이 시스템은 조인들, left/right 아웃조인들, 스브쿼리들과 대부분의 일반적인 집합과 스칼라 함수를 포함하고, distinct 카운트 근사치(HyperLogLog을 사용한), 백분위 근사치(분위수 다이제스트를 기초한)를 포함한 ANSI SQL의 대규모 집합을 현재 지원합니다. 현재 단계에서 주요한 제한은 테이블들과 유일한 키/그룹들의 카디널리티의 조인에 대한 크기의 한계입니다. 이 시스템은 또한 다시 테이블에 출력 데이터를 기록할 수 있는 기능이 부족합니다.(현재 쿼리의 결과들은 클라이언트에 스트림되고 있습니다.)
  • Roadmap
  • 로드맵
  • We are actively working on extending Presto functionality and improving performance.  In the next few months, we will remove restrictions on join and aggregation sizes and introduce the ability to write output tables.  We are also working on a query “accelerator” by designing a new data format that is optimized for query processing and avoids unnecessary transformations. This feature will allow hot subsets of data to be cached from backend data store, and the system will transparently use cached data to “accelerate” queries.  We are also working on a high performance HBase connector.
  • 우리는 Presto의 기능적 확장과 성능 향상을 위해 적극적으로 일하고 있습니다. 이후 몇달 이내에, 우리는 조인과 집합 크기에 대한 제약들을 없애고, 출력 테이블을 작성하는 기능을 소개할 것입니다. 우리는 또한 쿼리 처리에 최적화되고 불필요한 변환을 없앤 새로운 데이터 포맷 설계를 이용한 쿼리 엑셀레이터를 만들 것입니다. 이 기능은 핫 서브셋이 백엔드 데이터 스토어에 캐시할 수 있도록, 시스템은 쿼리들을 "가속화"하기 위해 캐시된 데이터를 투명하게 사용합니다. 우리는 고성능 HBase 커넥터를 위해 지속적인 작업을 하고 있습니다.
  • Open source
  • 오픈소스
  • After our initial Presto announcement at the Analytics @ WebScale conference in June 2013 [3], there has been a lot of interest from the external community. In the last couple of months, we have released Presto code and binaries to a small number of external companies. They have successfully deployed and tested it within their environments and given us great feedback.
  • 2013년 6월 Analytics @ WebScale 컨퍼런스에서 초기 Presto를 발표한 이후로, 외부 커뮤니티로 부터 꽤 많은 관심을 받았습니다. 지난 두어 달 동안에 Presto 코드와 바이너리들을 작은 규모의 외부의 회사들에게 릴리즈 하였습니다. 그들은 성공적으로 자신들의 환경들에서 배포하고 테스트하였고, 우리에게 좋은 의견을 주었습니다.
  • Today we are very happy to announce that we are open-sourcing Presto. You can check out the code and documentation on the site below. We look forward to hearing about your use cases and how Presto can help with your interactive analysis.
  • 오늘 우리는 Presto를 오픈 소스로 발표하게 되어 매우 기쁩니다. 아래의 사이트에서 코드와 문서를 확인 할 수 있습니다. 우리는 여러분들의 사용 사례들과 Presto가 여러분의 인터렉티브 분석에 어떤 도움이 되었는지 듣기를 기대하겠습니다.
  • The Presto team within Facebook Data Infrastructure consists of Martin Traverso, Dain Sundstrom, David Phillips, Eric Hwang, Nileema Shingte and Ravi Murthy.
  • 페이스북 데이터 인프라스트럭쳐 안의 Presto팀은 Martin Traverso, Dain Sundstrom, David Phillips, Eric Hwang, Nileema Shingte 그리고 Ravi Murthy 로 구성되어 있습니다..
  • Links
  • 링크들
0 Comments