什麼是presto
presto是一個開源的分佈式的查詢引擎,基於內存,它本身不接入數據,可以連接多種數據源,例如 Hive ,Mysql,Kafka,MongeDB等,一條Presto查詢可以將多個數據源進行合併查詢。
preto適合OLAP,而非OLTP,所以不要將preto當成數據庫來使用。
presto優勢
低延遲,高併發,純內存計算引擎,查詢效率是hive的數十倍
presto查詢速度規模
數G到數P規模
presto數據模型
分爲Catalog,Schema,Table三層
Catalog: 數據源,例如是Hive,還是Mysql等等
Schema: 庫
Table: 表
presto架構
preso是一個Master-Slave架構,由一個Coordinator節點,一個Disovery Server節點及多個Worker節點組成
Coordinator:負責query解析和分發,work管理,meta管理
Disovery Server: 節點心跳,默認內嵌於Coordinator中,於Coordinator共享一臺機器
Worker:計算節點,收到分發的task任務後,就會去對應的數據源取數
簡單流程
Worker節點啓動後向Discovery Server服務註冊,Coordinator從Disovery Server獲得正常工作的Worker節點,
presto 接入方式
使用Prosot的方式有多種: presto-cli,jdbc,http等等
以presto-cli爲例接入hive數據源:
./presto-cli.jar --server presto.xxx.com:9200 --catalog hive --schema xxx 就可以進入presto終端界面
preto缺點
容錯能力差: 當一個worker節點掛掉或者其他原因導致該worker節點上的查詢失敗的時候,整個query也會失敗
內存限制:目前版本presto基於純內存計算,內存不夠也會失敗,不會dump到磁盤上
並行查詢:因所有的task都是並行計算,一個很慢會導致整個都很慢
併發限制: 因全內存操作,會導致同時處理的任務有限