論文摘抄 - Tenzing
本摘抄不保證論文完整性和理解準確性
背景
異構數據的適配及數據可擴展性,資源可擴展性,廉價機器,SQL查詢。
架構概述
Worker pool,query server,clientinterfaces,metadata server
Worker線程是long-running的,worker pool包括master節點和worker節點,以及一個master watcher。
Query server把query解析,優化之後傳給master執行,優化包括一些基本的規則優化和基於成本的優化。
SQL特性
SQL語法主要是SQL92,並增加了一些高級分析,增強的部分也是適合MR完全可並行化的。
內嵌了Sawzall語法,支持用戶寫的和Sawzall自帶的方法。
在映射和過濾方麵,
常量表達式在compile階段就計算;
謂詞是常數或者查找是常數範圍,那麼可以直接下推給Bigtable這樣的數據源;
如果謂詞不包含複雜的UDF,數據源是mysql這樣的數據庫,那麼也下推給數據源;
如果是分區的,那麼也會跳過其他分區數據;
根據ColumnIO的meta信息,跳過範圍外的columns數據;
如果下麵數據源是麵向列的,那麼Tenzing會跳過無關列。
聚合函數方麵,
支持 sum,count,min,max,distinct,count distinct,
還支持統計型的corr,covar,stddev
在實現上加了一些額外優化,如在mapreduce裏實現基於hash table的聚合。
Join方麵,
Tenzing支持跨數據源的各種join方式。
Broadcast joins,基於成本的優化器會發現足夠小的table,廣播到內存裏,讓mapper和reducer可以直接內存訪問到。還有幾個細節的優化點。
Remote lookup joins,如Bigtable支持基於index的key查找,那麼就可以實時。
Distributed sort-merge joins。
Distributer hash joins,適合兩表都放不了內存,且一張表比另一張大許多,且在join的key上都沒有索引的情況。具體實現和優化細節,見論文偽代碼及說明,很清晰。
分析函數,
類似PostgreSQL/Oracle,支持rank,sum,min,max,lead,lag,ntile。
OLAP擴展,
支持rollup,cube。
集合操作,
支持標準sql集合操作,如union,union all,minus,minus all。
嵌套查詢和子查詢,
會優化mr個數
處理結構化數據,
根據pb協議,有的sql支持有的不行
Views,
支持create views
DML,
支持批模式下的insert,update,delete,不具備ACID性質。
DDL,
支持create table,drop table,rename table,generatestatistics,grant,revoke。
Table valued functions,
Data formats,
GFS, Bigtable, ColumnIO等
性能
性能目標是能與傳統MPP數據庫係統比較。
對mapreduce的優化和增強,
Work pool的設計,目的是減小latency,具體masterwatcher,master pool和worker pool的指責。
Streaming & In-memory chaining,MRs之間的數據銜接用流的方式;前一個mapper和後一個reducer可以在同一個進程裏。
避免sort,一些hash join,hash聚合要shuffle,不要sort,增加了關閉sort開關。
塊shuffle,原本基於row的shuffle是為了sort,在不需要sort的情況下,大約1M塊的shuffle會高效3X倍。
本地執行,根據數據量大小(低於128M)決定可以本地執行。
LLVM Query Engine
一代引擎把sql翻譯為Sawzall code
二代引擎是使用Dremel的sql表達式分析引擎
三代引擎嚐試使用LLVM based row和vector based column
指出了一些優缺點,相信native codegeneration引擎是未來方向。
全文完 :)
最後更新:2017-04-03 05:39:34