大數據Presto(一):Presto介紹

lansonli 發佈 2024-05-07T07:52:19.314835+00:00

#頭條創作挑戰賽#Presto介紹一、​​​​​​Presto出現背景Presto是Facebook在2012年開發的,是專為Hadoop打造的一款數據倉庫工具。

Presto介紹


一、​​​​​​Presto出現背景


Presto是Facebook在2012年開發的,是專為Hadoop打造的一款數據倉庫工具。在早期Facebook依賴Hive做數據分析,Hive底層依賴MapReduce,隨著數據量越來越大,使用Hive進行數據分析,時間可能需要分鐘級到小時級別,不能滿足交互式查詢的數據分析場景。2012年秋季,Facebook開發Presto,目前該項目在Facebook中運行超過30000個查詢,每日處理數據PB以上。Presto的查詢速度是Hive的5-10倍。


綜上,Presto是由Facebook2012年開發,基於內存、支持並行計算的分布式SQL交互式查詢引擎,不是資料庫,支持多種數據源,針對GB~PB數據查詢可以達到秒級返回結果,主要用於秒級查詢OLAP數據分析場景。


Presto官網地址:https://prestodb.io



二、​​​​​​​​​​​​​​Presto特點


  • 多數據源


Presto可以支持MySQL、PostgreSQL、cassandra、Hive、Kafka等多種數據源查詢。


  • 支持SQL


Presto支持部分標準SQL對數據進行查詢,並提供SQL shell進行SQL查詢。但是Presto不支持存儲過程,不適合大表Join操作,因為Presto是基於內存的,多張大表關聯可能給內存帶來壓力。


  • 擴展性


Presto有很好的擴展向,可以自定義開發特定數據源的Connector,使用SQL分析指定Connector中的數據。


  • 混合計算


在Presto中可以根據業務需要使用特定類型的Connector來讀取不同數據源的數據,進行join關聯計算。


  • 基於內存計算,高性能


Presto是基於內存計算的,減少磁碟IO,計算更快。Presto性能是Hive的10倍以上。Presto能夠處理PB級別的數據,但Presto並不是把PB級別的數據一次性加載到內存中計算,而是根據處理方式,例如:聚合場景,邊讀取數據,聚合,再清空內存,再去讀取數據加載內存,再聚合計算,再清空內存... 這種方式。如果使用Join查詢,那麼就會產生大量的中間數據,速度會變慢。


  • 流水線


由於Presto是基於PipeLine進行設計的,因此在進行海量數據處理過程中,終端用戶不用等到所有的數據都處理完成才能看到結果,而是可以向自來水管一樣,一旦計算開始,就可以產生一部分結果數據,並且結果數據會一部分接一部分的返回到客戶端。


三、Presto架構


Presto查詢引擎是一個Master-Slave的架構,由一個Coordinator節點,一個Discovery Server節點,多個Worker節點組成,Discovery Server通常內嵌於Coordinator節點中。Presto架構圖如下:



上圖中各個角色功能如下:


  • Presto Coordinator:


主要負責解析SQL語句,生成執行計劃,分發執行任務給Worker節點執行。所有的Worker啟動後都會註冊給Discovery Server,Coordinator通過內嵌的Discovery Server來知道將任務發送給哪些個Worker節點。


  • Presto Worker:


主要負責實際執行查詢任務,Worker節點啟動之後,向Discovery Server服務註冊,Coordinator從Discovery Server獲得可以正常工作的Worker節點。當Worker接收到task後,就會到對應的數據源通過各種Connnector將數據提取出來。


  • Hive Metastore(配置Hive Connector才會有)


Presto通過Hive Connector讀取Hive數據時,配置Hive Metastore服務為Presto提供Hive元數據信息,可以讓Worker節點與HDFS交互讀取數據。

關鍵字: