Presto入门介绍
最近在調研presto查詢引擎的模塊,先了解了下大體的框架和基本知識。這篇文章適合入門的童鞋看,因此轉載了,用于以后查詢使用。
?
1,?Presto基本認識?
1.1 定義?
Presto是一個分布式的查詢引擎,本身并不存儲數據,但是可以接入多種數據源,并且支持跨數據源的級聯查詢。Presto是一個OLAP的工具,擅長對海量數據進行復雜的分析;但是對于OLTP場景,并不是Presto所擅長,所以不要把Presto當做數據庫來使用。?
和大家熟悉的Mysql相比:首先Mysql是一個數據庫,具有存儲和計算分析能力,而Presto只有計算分析能力;其次數據量方面,Mysql作為傳統單點關系型數據庫不能滿足當前大數據量的需求,于是有各種大數據的存儲和分析工具產生,Presto就是這樣一個可以滿足大數據量分析計算需求的一個工具。?
1.2?數據源?
Presto需要從其他數據源獲取數據來進行運算分析,它可以連接多種數據源,包括Hive、RDBMS(Mysql、Oracle、Tidb等)、Kafka、MongoDB、Redis等?
一條Presto查詢可以將多個數據源的數據進行合并分析。?
比如:select * from a join b where a.id=b.id;,其中表a可以來自Hive,表b可以來自Mysql。?
1.3?優勢?
Presto是一個低延遲高并發的內存計算引擎,相比Hive,執行效率要高很多。?
舉例:?
SELECT id,?
? ?name,?
? ? ? ?source_type,?
? ? ? ?created_at?
FROM dw_dwb.dwb_user_day?
WHERE dt='2018-06-03'?
? AND created_at>’2018-05-20’;?
上述SQL在Presto運行時間不到1秒鐘,在Hive里要幾十秒鐘。?
1.4?數據模型?
Presto使用Catalog、Schema和Table這3層結構來管理數據。?
---- Catalog:就是數據源。Hive是數據源,Mysql也是數據源,Hive 和Mysql都是數據源類型,可以連接多個Hive和多個Mysql,每個連接都有一個名字。一個Catalog可以包含多個Schema,大家可以通過show catalogs 命令看到Presto連接的所有數據源。?
---- Schema:相當于一個數據庫實例,一個Schema包含多張數據表。show schemas from 'catalog_name'可列出catalog_name下的所有schema。?
---- Table:數據表,與一般意義上的數據庫表相同。show tables from 'catalog_name.schema_name'可查看'catalog_name.schema_name'下的所有表。?
在Presto中定位一張表,一般是catalog為根,例如:一張表的全稱為 hive.test_data.test,標識 hive(catalog)下的 test_data(schema)中test表。?
可以簡理解為:數據源的大類.數據庫.數據表。?
2,?Presto與Hive?
Hive是一個基于HDFS(分布式文件系統)的一個數據庫,具有存儲和分析計算能力, 支持大數據量的存儲和查詢。Hive 作為數據源,結合Presto分布式查詢引擎,這樣大數據量的查詢計算速度就會快很多。?
Presto支持標準SQL,這里需要提醒大家的是,在使用Hive數據源的時候,如果表是分區表,一定要添加分區過濾,不加分區掃描全表是一個很暴力的操作,執行效率低下并且占用大量集群資源,大家盡量避免這種寫法。?
這里提到Hive分區,我簡單介紹一下概念。Hive分區就是分目錄,把一個大的數據集根據業務需要分割成更細的數據集。?
舉例:假如一個表的數據都放在/user/xiaoming/table/目錄下,如果想把數據按照每天的數據細分,則就變成/user/xiaoming/table/2018-06-01/,/user/xiaoming/table/2018-06-02/,……如果查詢某一天的數據,就可以直接取某一天目錄下的數據,不需要掃描其他天的數據,節省了時間和資源。?
使用Presto:?
3,?Presto接入方式?
Presto的接入方式有多種:presto-cli,pyhive,jdbc,http,golang,SQLAlchemy,PHP等,其中presto-cli是Presto官方提供的,下面以presto-cli為例展開說明(自行下載)。?
以連接hive數據源為例,在電腦終端輸入:./presto-cli.jar --server presto.xxx-apps.com:9200 --catalog hive --user xxxx --source 'pf=adhoc;client=cli'就可以進入presto終端界面。?
先解釋下各參數的含義:?
--server 是presto服務地址;?
--catalog 是默認使用哪個數據源,后面也可以切換,如果想連接mysql數據源,使用mysql數據源名稱即可;?
--user 是用戶名;?
--source 是代表查詢來源,source設置格式為key=value形式(英文分號分割); 例如個人從command line查詢應設置為pf=adhoc;client=cli。?
進入終端后:?
查看數據源: show catalogs;?
查看數據庫實例:show schemas;?
Presto使用手冊:https://prestodb.io/docs/current/?
問答:?
1.使用場景??
? ? -mysql跨數據庫查詢;-數倉的表數據查詢(數據分析) ...?
2.為什么presto查詢速度比Hive快??
? ? presto是常駐任務,接受請求立即執行,全內存并行計算;hive需要用yarn做資源調度,接受查詢需要先申請資源,啟動進程,并且中間結果會經過磁盤。
總結
以上是生活随笔為你收集整理的Presto入门介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件工程——瀑布模型、快速原型模型、增量
- 下一篇: GJB438B-2009 军用软件开发文