Presto 技術內幕 赢在京 东 系列技术教程:Presto技术内幕

JD-Presto研發團隊

買這商品的人也買了...

商品描述

<內容介紹>

Presto是專門為大數據實時查詢計算而設計和開發的產品。由於Presto是基於Java語言開發的,因此,對使用者和開發者而言, Presto極易學習、使用並針對特定的業務場景進行改造開發和性能優化。無論是對多數據源支持,還是高性能、易用性、可擴 ​​展性等方面, Presto都是大數據實時查詢計算產品中的佼佼者。
《Presto技術內幕》按照由淺入深的順序對Presto進行了全方位的細緻講解,具體內容包括Presto概述、 Presto安裝與部署、 Presto RESTful框架解析、提交查詢、生成查詢執行計劃、查詢調度、查詢執行、隊列、System Connector、 Hive Connector、 Kafka Connector、 Connector開發、 Functions開發、 JD-Presto功能改造、 Presto性能調優、 Presto應用場景。

<目錄>


第一部分基礎篇
第1章概述2
1.1 Presto背景及發展2
1.2 Presto特點2
1.3基本概念3
1.3.1 Presto服務進程3
1.3.2 Presto模型4
1.3.3 Presto查詢執行模型5
1.4 Presto整體架構9
1.4 .1硬件架構9
1.4.2軟件架構9
1.5小結11
第2章Presto安裝與部署12
2.1環境說明12
2.2準備工作13
2.2.1建立SSH信任關係13
2.2.2安裝Java 17
2.2.3安裝Maven 17
2.2.4安裝Hive 18
2.3源碼編譯21
2.3.1下載源碼21
2.3.2源碼結構說明22
2.3.3編譯26
2.4部署30
2.4.1服務部署30
2.4.2客戶端部署38
2.4.3 JDBC使用40
2.5小結42
第二部分核心設計篇
第3章Presto RESTful框架解析44
3.1 Statement服務接口44
3.2 Query服務接口47
3.3 Stage服務接口48
3.4 Task服務接口49
3.5小結52
第4章提交查詢53
4.1提交查詢的步驟53
4.2源碼解析53
4.3提交查詢的流程60
4.4小結61
第5章生成查詢執行計劃62
5.1基本概念63
5.1.1 Node 63
5.1.2 Metadata API 67
5.2詞法與語法分析68
5.2.1語法規則69
5.2.2詞法分析69
5.2.3語法分析71
5.3獲取QueryExecution 72
5.3.1獲取QueryExecutionFactory 72
5.3.2創建QueryExecution 73
5.3.3啟動QueryExecution 74
5.4語義分析77
5.4.1 Statement分析77
5.4.2 Relation分析84
5.4.3表達式分析91
5.5執行計劃生成91
5.5.1執行計劃節點91
5.5.2 SQL執行計劃93
5.5.3 Relation執行計劃95
5.5.4 Query執行計劃99
5.6執行計劃優化102
5.6.1 ImplementSampleAsFilter 102
5.6.2 CanonicalizeExpressions 102
5.6.3 SimplifyExpressions 102
5.6.4 UnaliasSymbolReferences 103
5.6.5 PruneRedundantProjections 103
5.6.6 SetFlatteningOptimizer 103
5.6.7 LimitPushDown 104
5.6.8 PredicatePushDown 104
5.6.9 MergeProjections 104
5.6.10 ProjectionPushDown 104
5.6.11 IndexJoinOptimizer105
5.6 .12 CountConstantOptimizer 105
5.6.13 WindowFilterPushDown 105
5.6.14 HashGenerationOptimizer 105
5.6.15 PruneUnreferencedOutputs 106
5.6.16 MetadataQueryOptimizer 106
5.6.17 SingleDistinctOptimizer 106
5.6.18 BeginTableWrite 106
5.6.19 AddExchanges 107
5.6.20 PickLayout 107
5.7執行計劃分段107
5.7.1 Source 107
5.7.2 Fixed 107
5.7.3 Single 107
5.7.4 Coordinator_only 107
5.8示例108
5.8.1 Count執行計劃108
5.8.2 Join執行計劃108
5.9小結110
第6章查詢調度111
6.1生成調度執行器111
6.2查詢調度過程113
6.2.1 NodeManager 114
6.2.2 NodeSelector 115
6.3小結118
第7章查詢執行119
7.1查詢執行邏輯120
7.2 Task調度120
7.2.1 Source Task調度120
7.2.2 Fixed Task調度126
7.2 .3 Single Task調度128
7.2.4 Coordinator_Only Task調度128
7.3 Task執行129
7.3.1創建Task 129
7.3.2更新Task 135
7.3.3運行Task 140
7.4小結147
第8章隊列148
8.1配置說明148
8.1.1 queues隊列定義149
8.1.2 rules規則定義149
8.2隊列加載150
8.3隊列匹配151
8.4小結154
第9章System Connector 155
9.1 System Connector使用155
9.1.1 Information_schema 155
9.1.2 Metadata 157
9.1.3 Runtime 157
9.2 System Connector實現159
9.2.1 Information_schema實現160
9.2.2 System Connector實現163
9.3小結168
第10章Hive Connector169
10.1與Hive的結合170
10.2 Split分片管理175
10.3數據讀取179
10.4 Create Table As Select的實現182
10.5小結186
第11章Kafka Connector 187
11.1認識Kafka Connector 187
11.1.1配置187
11.1.2配置屬性187
11.1.3內置字段189
11.1.4表定義文件190
11.1.5 Kafka中的key和message 191
11.1.6行解碼192
11.1.7日期和時間解碼器194
11.1.8文本解碼器194
11.1.9數值解碼器194
11.2 Kafka連接器使用教程194
11.2.1安裝Apache Kafka195
11.2.2下載數據195
11.2.3在Presto中配置Kafka topics 197
11.2.4基本數據查詢197
11.2.5添加表定義文件199
11.2.6將message中所有值映射到不同列200
11.2.7使用實時數據202
11.3 Kafka Connector獲取數據207
11.3.1 Split分片管理207
11.3.2數據讀取209
11.4小結210
第12章Connector開發211
12.1創建Maven工程211
12.2註冊Plugin 213
12.3 Connector 213
12.4 Metadata 215
12.5 SplitManager 217
12.6 RecordSetProvider 218
12.7小結219
第13章Functions開發220
13.1 Function註冊220
13.2窗口函數225
13.3聚合函數229
13.4小結232
第三部分高級篇
第14章JD-Presto功能改造234
14.1 PDBO功能開發234
14.1.1 JDBC Split剖析235
14.1.2 JdbcRecordCursor剖析238
14.1.3分批次讀取實現原理240
14.1.4動態步長實現原理243
14.1.5條件下發245
14.1.6 PDBO配置定義247
14.2 DDL及DML支持250
14.2.1 Hive連接器Insert功能250
14.2.2 Hive連接器CTAS動態分區表功能252
14.3動態增加、修改、刪除Catalog 254
14.3.1目的254
14.3.2現狀254
14.3.3實現255
14.3.4效果258
14.4小結258
第15章Presto性能調優259
15.1合理設計分區259
15.2 Group By字句優化259
15.3使用模糊聚合函數259
15.4合併多條Like子句為一條regexp_like子句260
15.5大表放在Join子句左邊260
15.6關閉distributed hash join 261
15.7使用ORC存儲261
15.8小結262
第16章Presto應用場景263
16.1 ETL 263
16.2實時數據計算264
16.3 Ad-Hoc查詢266
16.4實時數據流分析266
16.5小結268
附錄A常見問題及解決辦法269
A.1同時訪問兩個Hadoop集群269
A.2 Kafka集群重啟後無法獲取數據272
A.3 Task exceeded max memory size 277
A.4 SQL中In子句太長導致棧溢出錯誤278
A.5高並發導致大量查詢出錯279
附錄B Presto配置參數說明282
附錄C Presto執行信息說明289

目錄大綱