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