Presto——本質上是和spark內存計算框架同樣 但不負責數據存儲

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作資源調度,接受查詢須要先申請資源,啓動進程,而且中間結果會通過磁盤。





































































 
 

開源OLAP引擎測評報告(SparkSql、Presto、Impala、HAWQ、ClickHouse、GreenPlum)

易觀CTO 郭煒 序 如今大數據組件很是多,衆說不一,在每一個企業不一樣的使用場景裏究竟應該使用哪一個引擎呢?這是易觀Spark實戰營出品的開源Olap引擎測評報告,團隊選取了Hive、Sparksql、Presto、Impala、Hawq、Clickhouse、Greenplum大數據查詢引擎,在原生推薦配置狀況下,在不一樣場景下作一次橫向對比,供你們參考。 每一年易觀都會發布一次這樣的大數據開源測評報告,歡迎你們給出更好的測評意見以及想要測試的組件。易觀Spark實戰營是易觀大數據技術團隊組織的針對大數據初學者的實戰訓練營,歡迎搜索訪問「易觀數據極客社區」,在文章後留言,交流最新最全的大數據技術。mysql

目錄git

開源OLAP框架基線測試報告
1、測試方案
1.1 測試總體方案
1.2 TPC-DS測試與單表測試方案及數據準備
1.3 環境準備
2、測試組件介紹
2.1 SparkSql
2.2 Presto
2.3 Impala
2.4 HAWQ
2.5 ClickHouse
2.6 Hive
2.7 Greenplum
3、性能測試分析
3.1 數據壓縮
3.2 性能測試
3.2.1 多表關聯查詢對比測試
3.2.2 單表查詢對比測試
3.3 性能測試結果分析
4、各組件綜合分析比較

1、測試方案

1.1測試總體方案

本次測試針對現有Olap的7大Sql引擎Hadoop(2.7)、Hive(2.1)、Hawq(3.1.2.0)、Presto(0.211)、Impala(2.6.0)、Sparksql(2.2.0)、Clickhouse(18.1.0-1.El7)、Greenplum(5.7.0) 基礎性能測試。咱們採用多表關聯和單大表性能分別對比不一樣組件在查詢性能、系統負載等方面的狀況,測試方案以下:github

  1. 1,多表關聯採用Tpc-Ds基準測試工具生成相應測試語句和數據進行測試,
  2. 2,單大表測試一樣選用Tpc-Ds基準測試工具生成的最大數據量的表,並採用咱們選用的一些常規性聚合語句進行測試。

1.2 TPC-DS測試與單表測試方案及數據準備

TPC-DS採用星型、雪花型等多維數據模式。它包含7張事實表,17張維度表平均每張表含有18列。其工做負載包含99個SQL查詢,覆蓋SQL99和2003的核心部分以及OLAP。這個測試集包含對大數據集的統計、報表生成、聯機查詢、數據挖掘等複雜應用,測試用的數據和值是有傾斜的,與真實數據一致。能夠說TPC-DS是與真實場景很是接近的一個測試集,也是難度較大的一個測試集。golang

TPC-DS的這個特色跟大數據的分析挖掘應用很是相似。Hadoop等大數據分析技術也是對海量數據進行大規模的數據分析和深度挖掘,也包含交互式聯機查詢和統計報表類應用,同時大數據的數據質量也較低,數據分佈是真實而不均勻的。所以TPC-DS成爲客觀衡量多個不一樣Hadoop版本以及SQL on Hadoop技術的最佳測試集。sql

本次測試採用TPC-DS提供的dsdgen命令工具生成指定量級的測試數據,咱們指定數據量級爲100G。數據庫

生成的各個表的數據量以下:

編程

經過使用dsqgen命令根據TPC-DS提供的模板生成不一樣類型的SQL語句,TPC-DS默認支持如下模板:db2.tplnetezza.tploracle.tplsqlserver.tpl。咱們經過命令生成sqlserver.tpl模板的SQL語句,分別對其進行細微的修改使其符合不一樣的olap引擎支持的語法規則。centos

對於多表關聯測試,咱們從中選取了15條有表明性的sql語句(見附件二),幾乎全部的測試案例都有很高的IO負載和CPU計算需求,涵蓋了幾乎全部的業務場景。

對於單大表測試,咱們選擇TPC-DS生成的測試數據集中數據量最大的表store_sales,並選用了9條使用頻率高的常規性聚合sql語句進行測試(見附件三)。

1.3環境準備

本次測試方案的硬件環境使用三臺物理機,*做系統爲centos7,基礎配置信息以下表:

服務器 cpu核數 cpu線程數 內存大小 磁盤空間
server1 4 16 64g 2T
server2 4 16 64g 2T
server3 4 16 64g 2T

本次測試各組件搭建的版本信息以下:Hadoop(2.7)、Hive(2.1)、HAWQ(3.1.2.0)、Presto(0.211)、Impala(2.6.0)、sparksql(2.2.0)、clickhouse(18.1.0-1.el7)、greenplum(5.7.0),全部組件都採用分佈式搭建於三臺服務器,並配置每臺服務器上查詢最大使用內存20g,cpu 8線。

各個Olap引擎經過各自的方式建立表結構,導入數據。Hive使用Orc格式的內部表;Impala使用Hive上的Parquet格式數據;Presto使用Hive上的Orc格式數據;Hawq創建內部表使用默認Txt格式;Clickhouse使用Log表引擎分佈式建表。

2、測試組件介紹

2.1 SparkSql

Spark SQL 是 Spark 處理結構化數據的程序模塊。它將 SQL 查詢與 Spark 程序無縫集成,能夠將結構化數據做爲 Spark 的 RDD 進行查詢。RDD 的全稱爲 Resilient Distributed Datasets,即彈性分佈式數據集,是 Spark 基本的數據結構。Spark 使用 RDD 做爲分佈式程序的工做集合,提供一種分佈式共享內存的受限形式。RDD 是隻讀的,對其只能進行建立、轉化和求值等*做。SparkSQL做爲Spark生態的一員繼續發展,而再也不受限於Hive,只是兼容Hive。咱們利用hive做爲數據源,spark做爲計算引擎,經過SQL解析引擎,實現基於hive數據源,spark做爲計算引擎的SQL測試方案。

2.2 Presto

Presto是一個分佈式SQL查詢引擎, 它被設計爲用來專門進行高速、實時的數據分析。它支持標準的ANSI SQL,包括複雜查詢、聚合(aggregation)、鏈接(join)和窗口函數(window functions)。做爲Hive和Pig(Hive和Pig都是經過MapReduce的管道流來完成HDFS數據的查詢)的替代者,Presto 自己並不存儲數據,可是能夠接入多種數據源,而且支持跨數據源的級聯查詢。Presto是一個OLAP的工具,擅長對海量數據進行復雜的分析;可是對於OLTP場景,並非Presto所擅長,因此不要把Presto當作數據庫來使用。

2.3 Impala

Impala 是 Cloudera 在受到 Google 的 Dremel 啓發下開發的實時交互SQL大數據查詢工具,它擁有和Hadoop同樣的可擴展性、它提供了類SQL(類Hsql)語法,在多用戶場景下也能擁有較高的響應速度和吞吐量。它是由Java和C++實現的,Java提供的查詢交互的接口和實現,C++實現了查詢引擎部分,除此以外,Impala還可以共享Hive Metastore,甚至能夠直接使用Hive的JDBC jar和beeline等直接對Impala進行查詢、支持豐富的數據存儲格式(Parquet、Avro等)。此外,Impala 沒有再使用緩慢的 Hive+MapReduce 批處理,而是經過使用與商用並行關係數據庫中相似的分佈式查詢引擎(由 Query Planner、Query Coordinator 和 Query Exec Engine 三部分組成),能夠直接從 HDFS 或 HBase 中用 SELECT、JOIN 和統計函數查詢數據,從而大大下降了延遲。

2.4 HAWQ

HAWQ 是一個 Hadoop 上的 SQL 引擎,是以 Greenplum Database 爲代碼基礎逐漸發展起來的。HAWQ 採用 MPP 架構,改進了針對 Hadoop 的基於成本的查詢優化器。除了能高效處理自己的內部數據,還可經過 PXF 訪問 HDFS、Hive、HBase、JSON 等外部數據源。HAWQ全面兼容 SQL 標準,能編寫 SQL UDF,還可用 SQL 完成簡單的數據挖掘和機器學習。不管是功能特性,仍是性能表現,HAWQ 都比較適用於構建 Hadoop 分析型數據倉庫應用。

2.5 ClickHouse

Clickhouse由俄羅斯yandex公司開發。專爲在線數據分析而設計。Yandex是俄羅斯搜索引擎公司。官方提供的文檔表名,ClickHouse 日處理記錄數"十億級"。

特性:採用列式存儲;數據壓縮;基於磁盤的存儲,大部分列式存儲數據庫爲了追求速度,會將數據直接寫入內存,按時內存的空間每每很小;CPU 利用率高,在計算時會使用機器上的全部 CPU 資源;支持分片,而且同一個計算任務會在不一樣分片上並行執行,計算完成後會將結果彙總;支持SQL,SQL 幾乎成了大數據的標準工具,使用門檻較低;支持聯表查詢;支持實時更新;自動多副本同步;支持索引;分佈式存儲查詢。

2.6 Hive

Hive是基於Hadoop的一個數據倉庫工具,能夠將結構化的數據文件映射爲一張數據庫表,並提供完整的sql查詢功能,能夠將sql語句轉換爲MapReduce任務進行運行。其優勢是學習成本低,能夠經過類SQL語句快速實現簡單的MapReduce統計,沒必要開發專門的MapReduce應用,十分適合數據倉庫的統計分析。

Hive是創建在 Hadoop 上的數據倉庫基礎構架。它提供了一系列的工具,能夠用來進行數據提取轉化加載(ETL),這是一種能夠存儲、查詢和分析存儲在 Hadoop 中的大規模數據的機制。Hive 定義了簡單的類 SQL 查詢語言,稱爲 HQL,它容許熟悉 SQL 的用戶查詢數據。同時,這個語言也容許熟悉 MapReduce 開發者的開發自定義的 mapper 和 reducer 來處理內建的 mapper 和 reducer 沒法完成的複雜的分析工做。

2.7 GreenPlum

Greenplum是一個開源的大規模並行數據分析引擎。藉助MPP架構,在大型數據集上執行復雜SQL分析的速度比不少解決方案都要快。

GPDB徹底支持ANSI SQL 2008標準和SQL OLAP 2003 擴展;從應用編程接口上講,它支持ODBC和JDBC。完善的標準支持使得系統開發、和都大爲方便。支持分佈式事務,支持ACID。保證數據的強一致性。作爲分佈式數據庫,擁有良好的線性擴展能力。GPDB有完善的生態系統,能夠與不少企業級產品集成,譬如SAS,Cognos,Informatic,Tableau等;也能夠不少種開源軟件集成,譬如Pentaho,Talend 等。

3、性能測試分析

3.1 數據壓縮

數據壓縮方面,Sparkql、Impala、Presto均採用的是hive元數據,hive數據100G上傳以後顯示爲96.3G(.dat數據格式),壓縮比0.963;hawq壓縮後數據大小爲68.2G(.dat格式),壓縮比:0.682;clickhouse採用本身默認格式42G;greenplum未使用壓縮,數據存儲大小爲98G。

3.2 性能測試

本節經過查詢語句對比SparkSql、Presto、Impala、HAWQ、ClickHouse、Hive、GreenPlum七種組件的查詢性能,測試結果均採用連續三次查詢結果的平均值,經過圖表展現對比結果。

性能分析部分咱們分爲兩部分,第一部分是多表關聯查詢對比測試,第二部分是單大表查詢對比測試。

3.2.1 多表關聯查詢對比測試

如下是多表關聯測試結果,數據以下(sql文件見附件二):

經過咱們選取的15條sql語句查詢測試,從表中能夠看出,presto、impala和hawq查詢時間快於SparkSql和ClickHouse,性能約是SparkSql的2-3倍,其中尤爲以Presto和Impala性能要好一些。greenplum在多表查詢上也有不錯的表現;ClickHouse對於多表join效果相比較於Presto、Impala、HAWQ不是很好,而且不少複雜語法支持的不夠好,可見並非爲關聯分析而設置;而hive無疑是全部組件中耗時最多的,其中部分語句查詢時間超出1h的總時間按1h計算。

下面是經過圖形展現來更加直觀比較各組件性能。因爲hive與其餘相差太大,在圖中不做比較。

3.2.2 單表查詢對比測試

如下是9條單表測試語句對六種組件進行測試,測試結果圖表分析以下(查詢sql見附件三):

從結果中咱們發現,對於單表測試ClickHouse要比其他幾種組件查詢速度表現突出,測試性能約是其他四種的3-6倍。而Presto相比於HAWQ、Impala、SparkSql、GreenPlum在單表*做方面性能也稍好些。

下面經過圖來直觀比較:

從圖像上更加清楚地顯示出五種組件在單表測試方面性能的差距,Clickhouse在性能方面體現出了足夠的優點,在單大表查詢方面比其他組件性能都要好;Impala和Presto相比較,在sql_01-sql_05這5條語句是簡單的一些求和求平均的單表做方面,Presto的性能要比Impala好不少,而sql_06-sql_09一些複雜點的多個列的單表做,Impala的性能要比Presto好一些,這也反映出Presto更加適合一些簡單的數據量大的聚合做,而Impala適合一些複雜的聚合做。

最後咱們發現HAWQ、GreenPlum在單表聚合做方面性能不如其他四種組件,測試時間要大大超過它們,固然也不排除測試環境的影響,可是測試結果代表,HAWQ、GreenPlum不適合單表的複雜聚合做,更適合多表的聚合*做。

3.3 性能測試結果分析

從上面的分析結果能夠看出,presto、Impala以及hawq在多表查詢方面體現出了優點,雖然說presto和Impala在多表查詢方面的性能差異不大,可是在查詢過程當中卻發現Impala的一些侷限性,並儘可能避開這些侷限問題進行測試。Impala不支持的地方,例如:不支持update、delete*做,不支持Date數據類型,不支持ORC文件格式等等,而presto則基本沒有這些侷限問題(本次測試中基本沒有發現)。

在單表測試方面clickhouse體現出了比其他組件的優點,性能比其餘組件要好一大截,而presto相比於hawq和impala以及sparksql在單大表聚合*做方面的表現也相對優秀。

4、各組件綜合分析比較

經過以上圖表查詢性能分析以及咱們查找相關資料對各組件總結以下:

  1. SparkSQL是Hadoop中另外一個著名的SQL引擎,它以Spark做爲底層計算框架,Spark使用RDD做爲分佈式程序的工做集合,它提供一種分佈式共享內存的受限形式。在分佈式共享內存系統中,應用能夠向全局地址空間的任意位置進行讀寫做,而RDD是隻讀的,對其只能進行建立、轉化和求值等做。這種內存*做大大提升了計算速度。SparkSql的性能相對其餘的組件要差一些,多表單表查詢性能都不突出。

  2. Impala官方宣傳其計算速度是一大優勢,在實際測試中咱們也發現它的多表查詢性能和presto差很少,可是單表查詢方面卻不如presto好。並且Impala有不少不支持的地方,例如:不支持update、delete*做,不支持Date數據類型,不支持ORC文件格式等等,因此咱們查詢時採用parquet格式進行查詢,並且Impala在查詢時佔用的內存很大。

  3. Presto綜合性能比起來要比其他組件好一些,不管是查詢性能仍是支持的數據源和數據格式方面都要突出一些,在單表查詢時性能靠前,多表查詢方面性能也很突出。因爲Presto是徹底基於內存的並行計算,因此presto在查詢時佔用的內存也很多,可是發現要比Impala少一些,好比多表join須要很大的內存,Impala佔用的內存比presto要多。

  4. HAWQ 吸取了先進的基於成本的 SQL 查詢優化器,自動生成執行計劃,可優化使用hadoop 集羣資源。HAWQ 採用 Dynamic pipelining 技術解決這一關鍵問題。Dynamic pipelining 是一種並行數據流框架,利用線性可擴展加速Hadoop查詢,數據直接存儲在HDFS上,而且其SQL查詢優化器已經爲基於HDFS的文件系統性能特徵進行過細緻的優化。可是咱們發現HAWQ在多表查詢時比Presto、Impala差一些;並且不適合單表的複雜聚合*做,單表測試性能方面要比其他四種組件差不少,hawq環境搭建也遇到了諸多問題。

  5. ClickHouse 做爲目前全部開源MPP計算框架中計算速度最快的,它在作多列的表,同時行數不少的表的查詢時,性能是很讓人興奮的,可是在作多表的join時,它的性能是不如單寬表查詢的。性能測試結果代表ClickHouse在單表查詢方面表現出很大的性能優點,可是在多表查詢中性能卻比較差,不如presto和impala、hawq的效果好。

  6. GreenPlum做爲關係型數據庫產品,它的特色主要就是查詢速度快,數據裝載速度快,批量DML處理快。並且性能能夠隨着硬件的添加,呈線性增長,擁有很是良好的可擴展性。所以,它主要適用於面向分析的應用。好比構建企業級ODS/EDW,或者數據集市等,GREENPLUM都是不錯的選擇。

  7. 此外咱們還對flink進行了調研發現,flink 核心是個流式的計算引擎,經過流來模擬批處理,flink sql還處於早期開發階段,將來社區計劃經過提供基於REST的SQL客戶端,目前sql客戶端不能直接訪問hive,經過YAML file文件定義外部數據源,能夠鏈接文件系統和kafka,目前短期咱們的sql測試不太好模擬。因此沒有對flink進行測試分析。

咱們經過測試以及以上的相關調研編寫了各組件各個方面的綜合對比分析表,這裏採用5分爲滿分來比較,以下表:

附件信息:

附件一:表結構信息

附件二:TPC-DS查詢測試語句

附件三:單表查詢測試語句

附件四:性能對比表(Sheet1:TPC-DS語句,Sheet2:單表語句,Sheet5:改變格式優化以後的測試結果)

相關文章
相關標籤/搜索