Presto入門介紹


1、presto是什么

  Presto是由Facebook開發的一個分布式SQL查詢引擎,是專門設計為用來專門進行大數據實時查詢計算而設計和開發的產品。 它是為了解決Hive的MapReduce模型太慢以及不能通過BI或Dashboards直接展現HDFS數據等問題。

2、presto特點

  presto是基於java開發的,對於大部分開發者和使用者而言,presto容易學習並對特定的場景進行二次開發和性能優化等。多數據源、支持SQL、擴展性強、高性能,流水線模式

  • 多數據源:目前版本支持20多種數據源,幾乎能覆蓋所有常見情況,Elasticsearch 、Hive 、JMX 、Kafka Kudu 、Local File、Memory 、MongoDB 、MySQL 、Redis等等

  • 支持SQL:完成支持ANSI SQL,提供SQL shell

  • 擴展性:支持開發自己的特定數據源的connector

  • 高性能:presto基於內存計算,在絕大多數情況下,presto的查詢性能是hive的10倍以上,完全能實現交互式,實時查詢

  • 流水線:presto是基於PipeLine設計的,在進行大量設計處理過程中,終端不需要等待所有的數據計算完畢之后才能看到結果,計算一部分就可以看部分結果

3、presto的基本概念和模型

3.1 服務進程

    presto集群中有兩種進程,Coordinator服務進程和worker服務進程。coordinator主要作用是接收查詢請求,解析查詢語句,生成查詢執行計划,任務調度和worker管理。worker服務進程執行被分解的查詢執行任務:task

3.1.1 Coordinator

  Coordinator 服務進程部署在集群中的單獨節點之中,是整個presto集群的管理節點,主要作用是接收查詢請求,解析查詢語句,生成查詢執行計划Stage和Task並對生成的Task進行任務調度,和worker管理。Coordinator進程是整個Presto集群的master進程,需要與worker進行通信,獲取最新的worker信息,有需要和client通信,接收查詢請求。Coordinator提供RESTful服務來完成這些工作。

3.1.2 Worker

  presto集群中存在一個Coordinator和多個Worker節點,每個Worker節點上都會存在一個worker服務進程,主要進行數據的處理以及Task的執行。worker服務進程每隔一定的時間會發送心跳包給Coordinator。Coordinator接收到查詢請求后會從當前存活的worker中選擇合適的節點運行task。

3.2 presto模型

3.2.1 Connector

  presto就是通過Connector來訪問不同的數據源的,相當於訪問不同數據源的驅動程序,每種connector都實現了presto的標准SPI接口,因此只要實現了標准SPI接口就可以制定特殊的Connector來訪問數據源。

3.2.2 Catalog

 presto中Catalog類似於mysql中的一個數據庫實例,Schema類似於mysql當中的一個database。如用presto去連接一個hive中的一個庫

 presto --server ip:port --catalog hive --schema xxx 這樣就可以訪問hive的中的xxx庫

3.2.3 Schema

  presto中的schema就相當於mysql中的一個具體的database

3.2.4 Table

    presto中的table和mysql中含義一樣

4、presto 整體架構

presto是一個完全基於內存的分布式查詢執行引擎,presto中的服務有兩種,coordinator和worker,所以presto采用的是Master-Slave的拓撲結構,同時還需要客戶端

5、入門使用

  presto完全支持SQL,所以對於會SQL的人員是特別容易上手的。首先確定數據源,然后確定連接方式,這里主要說cli的方式

  presto --server ip:port --catalog hive --user xxxx

  --server 是presto服務地址;

  --catalog 是默認使用的數據源;

   --user 是用戶名;

  進入終端后: 查看數據源: show catalogs; 查看數據庫實例:show schemas;

  resto的SQL語法和mysql以及hive都有細微的差別,如presto是用英文的雙引號代表字段,單引號代表字符,所以遇到有特殊字符的字段需要用雙引號,presto的時間函數和hive也有區別,join等連接方式也存在區別。對於表存在分區的是一定要帶上分區字段做為條件

  presto支持自定義函數,Scalar、Aggregation,可以支持能為復雜的計算


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM