Hive性能調(diào)優(yōu)實(shí)戰(zhàn)
定 價(jià):89 元
- 作者:林志煌
- 出版時(shí)間:2019/12/1
- ISBN:9787111644323
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP311.13
- 頁碼:0
- 紙張:
- 版次:
- 開本:16開
本書是一本關(guān)于Apache Hive調(diào)優(yōu)的書籍,旨在介紹如何進(jìn)行Hive的調(diào)優(yōu),以及調(diào)優(yōu)時(shí)如果使用的工具。本書在*開始會(huì)介紹Hive優(yōu)化多面性,以及如何在眾多的調(diào)優(yōu)技巧中尋找一條調(diào)優(yōu)的思路。接著介紹Hive安裝,為了方便讀者的練習(xí),我們主要介紹Docker安裝Hive的方式和使用cloudera提供工具Hive的方式。介紹完安裝Hive方式,我們會(huì)繼續(xù)介紹Hive在優(yōu)化時(shí)涉及的Hadoop組件和Hive工具。*后會(huì)介紹如何監(jiān)控Hive在運(yùn)行時(shí)出現(xiàn)性能問題。本書適合對大數(shù)據(jù)開發(fā)感興趣的愛好者、對Hive優(yōu)化有興趣的人員使用。
前言
第1章 舉例感受Hive性能調(diào)優(yōu)的多樣性1
1.1 感受改寫SQL對性能的影響1
1.1.1 數(shù)據(jù)準(zhǔn)備1
1.1.2 union案例4
1.1.3 改寫SQL實(shí)現(xiàn)union的優(yōu)化5
1.1.4 失敗的union調(diào)優(yōu)8
1.2 感受調(diào)整數(shù)據(jù)塊大小對性能的影響10
1.2.1 數(shù)據(jù)準(zhǔn)備11
1.2.2 案例比較11
1.3 感受不同數(shù)據(jù)格式對性能的提升15
1.3.1 數(shù)據(jù)準(zhǔn)備15
1.3.2 案例比較16
1.4 感受不同的表設(shè)計(jì)對性能的影響18
1.4.1 數(shù)據(jù)準(zhǔn)備19
1.4.2 案例比較21
1.5 調(diào)優(yōu)其實(shí)不難24
第2章 Hive問題排查與調(diào)優(yōu)思路25
2.1 小白推演Hive的優(yōu)化方法25
2.1.1 類比關(guān)系型數(shù)據(jù)庫的調(diào)優(yōu)25
2.1.2 學(xué)習(xí)大數(shù)據(jù)分布式計(jì)算的基本原理28
2.1.3 學(xué)習(xí)使用YARN提供的日志31
2.1.4 干預(yù)SQL的運(yùn)行方式33
2.2 老工對Hive的調(diào)優(yōu)理解36
2.2.1 從一個(gè)過度優(yōu)化案例說起36
2.2.2 編碼和調(diào)優(yōu)的原則43
2.2.3 Hive程序相關(guān)規(guī)范49
2.3 總結(jié)調(diào)優(yōu)的一般性過程51
第3章 環(huán)境搭建53
3.1 Docker基礎(chǔ)53
3.1.1 Docker介紹54
3.1.2 安裝Docker56
3.1.3 常見的Docker使用與管理命令58
3.1.4 使用Dockerfile構(gòu)建服務(wù)鏡像60
3.1.5 Dockerfile語法63
3.2 Cloudera Docker搭建偽分布式環(huán)境66
3.3 Docker搭建分布式集群68
3.3.1 構(gòu)建JDK鏡像69
3.3.2 構(gòu)建Hadoop鏡像70
3.3.3 構(gòu)建Hive鏡像72
3.3.4 啟動(dòng)集群73
3.4 CDM搭建分布式集群75
3.4.1 Cloudera Manager組件75
3.4.2 Docker構(gòu)建軟件安裝內(nèi)部源76
3.4.3 CDM安裝分布式集群79
3.5 使用GitHub開源項(xiàng)目構(gòu)建集群87
第4章 Hive及其相關(guān)大數(shù)據(jù)組件89
4.1 Hive架構(gòu)89
4.1.1 Hive 1.x版本基本結(jié)構(gòu)89
4.1.2 Hive元數(shù)據(jù)91
4.2 YARN組件97
4.2.1 YARN的優(yōu)點(diǎn)97
4.2.2 YARN基本組成97
4.2.3 YARN工作流程99
4.2.4 YARN資源調(diào)度器100
4.3 HDFS架構(gòu)102
4.3.1 常見HDFS優(yōu)化102
4.3.2 HDFS基本架構(gòu)和讀寫流程103
4.3.3 HDFS高可用架構(gòu)105
4.3.4 NameNode聯(lián)盟107
4.4 計(jì)算引擎109
4.4.1 MapReduce計(jì)算引擎109
4.4.2 Tez計(jì)算引擎111
4.4.3 LLAP長時(shí)在線與處理程序113
4.4.4 Spark計(jì)算引擎115
第5章 深入MapReduce計(jì)算引擎117
5.1 MapReduce整體處理過程117
5.2 MapReduce作業(yè)輸入118
5.2.1 輸入格式類InputFormat118
5.2.2 InputFormat在Hive中的使用120
5.3 MapReduce的Mapper121
5.3.1 Mapper類121
5.3.2 Hive中與Mapper相關(guān)的配置123
5.4 MapReduce的Reducer125
5.4.1 Reducer類126
5.4.2 Hive中與Reducer相關(guān)的配置127
5.5 MapReduce的Shuffle128
5.6 MapReduce的Map端聚合129
5.6.1 Combiner類129
5.6.2 Map端的聚合與Hive配置130
5.7 MapReduce作業(yè)輸出131
5.7.1 OutputFormat作業(yè)輸出132
5.7.2 Hive配置與作業(yè)輸出133
5.8 MapReduce作業(yè)與Hive配置134
5.9 MapReduce與Tez對比135
5.9.1 通過案例代碼對比MapReduce和Tez135
5.9.2 Hive中Tez和LLAP相關(guān)的配置141
第6章 HiveSQL執(zhí)行計(jì)劃143
6.1 查看SQL的執(zhí)行計(jì)劃143
6.1.1 查看執(zhí)行計(jì)劃的基本信息144
6.1.2 查看執(zhí)行計(jì)劃的擴(kuò)展信息148
6.1.3 查看SQL數(shù)據(jù)輸入依賴的信息148
6.1.4 查看SQL操作涉及的相關(guān)權(quán)限信息152
6.1.5 查看SQL的向量化描述信息152
6.2 簡單SQL的執(zhí)行計(jì)劃解讀158
6.3 帶普通函數(shù)/操作符SQL的執(zhí)行計(jì)劃解讀161
6.3.1 執(zhí)行計(jì)劃解讀161
6.3.2 普通函數(shù)和操作符162
6.4 帶聚合函數(shù)的SQL執(zhí)行計(jì)劃解讀164
6.4.1 在Reduce階段聚合的SQL164
6.4.2 在Map和Reduce階段聚合的SQL167
6.4.3 高級分組聚合169
6.5 帶窗口/分析函數(shù)的SQL執(zhí)行計(jì)劃解讀172
6.6 表連接的SQL執(zhí)行計(jì)劃解讀175
6.6.1 Hive表連接的類型175
6.6.2 內(nèi)連接和外連接176
6.6.3 左半連接178
第7章 Hive數(shù)據(jù)處理模式181
7.1 過濾模式181
7.1.1 where子句過濾模式182
7.1.2 having子句過濾183
7.1.3 distinct子句過濾184
7.1.4 表過濾186
7.1.5 分區(qū)過濾188
7.1.6 分桶過濾189
7.1.7 索引過濾191
7.1.8 列過濾191
7.2 聚合模式192
7.2.1 distinct模式193
7.2.2 count(列)、count(*)、count(1)行計(jì)數(shù)聚合模式194
7.2.3 可計(jì)算中間結(jié)果的聚合模式197
7.2.4 不可計(jì)算中間結(jié)果的聚合模式199
7.3 連接模式200
7.3.1 普通Map連接201
7.3.2 桶的Map連接和排序合并桶的Map連接207
7.3.3 傾斜連接209
7.3.4 表連接與基于成本的優(yōu)化器210
第8章 YARN日志212
8.1 查看YARN日志的方式212
8.1.1 ResourceManager Web UI界面212
8.1.2 JobHistory Web UI界面215
8.2 快速查看集群概況216
8.2.1 Cluster Metrics集群度量指標(biāo)217
8.2.2 Cluster Node Metrics集群節(jié)點(diǎn)的度量信息218
8.2.3 Cluster Overview集群概況220
8.3 查看集群節(jié)點(diǎn)概況221
8.3.1 節(jié)點(diǎn)列表概況221
8.3.2 節(jié)點(diǎn)詳細(xì)信息223
8.3.3 節(jié)點(diǎn)作業(yè)信息224
8.4 查看集群的隊(duì)列調(diào)度情況226
8.5 查看集群作業(yè)運(yùn)行信息230
8.5.1 集群作業(yè)運(yùn)行狀態(tài)230
8.5.2 查看作業(yè)運(yùn)行的基本信息231
8.5.3 查看作業(yè)計(jì)數(shù)器232
第9章 數(shù)據(jù)存儲(chǔ)236
9.1 文件存儲(chǔ)格式之Apache ORC236
9.1.1 ORC的結(jié)構(gòu)237
9.1.2 ORC的數(shù)據(jù)類型238
9.1.3 ACID事務(wù)的支持240
9.2 與ORC相關(guān)的Hive配置241
9.2.1 表配置屬性241
9.2.2 Hive表的配置屬性241
9.3 文件存儲(chǔ)格式之Apache Parquet242
9.3.1 Parquet基本結(jié)構(gòu)243
9.3.2 Parquet的相關(guān)配置245
9.4 數(shù)據(jù)歸檔245
第10章 發(fā)現(xiàn)并優(yōu)化Hive中的性能問題247
10.1 監(jiān)控Hive數(shù)據(jù)庫的狀態(tài)247
10.2 監(jiān)控當(dāng)前集群狀態(tài)253
10.3 定位性能瓶頸258
10.3.1 使用HS2 WebUI排除非大數(shù)據(jù)組件的問題258
10.3.2 排查長時(shí)等待調(diào)度260
10.3.3 Map任務(wù)讀取小文件和大文件261
10.3.4 Reduce的數(shù)據(jù)傾斜262
10.3.5 緩慢的Shuffle264
10.3.6 集群資源的限制265
10.4 數(shù)據(jù)傾斜266
10.4.1 不可拆分大文件引發(fā)的數(shù)據(jù)傾斜266
10.4.2 業(yè)務(wù)無關(guān)的數(shù)據(jù)引發(fā)的數(shù)據(jù)傾斜267
10.4.3 多維聚合計(jì)算數(shù)據(jù)膨脹引起的數(shù)據(jù)傾斜268
10.4.4 無法削減中間結(jié)果的數(shù)據(jù)量引發(fā)的數(shù)據(jù)傾斜268
10.4.5 兩個(gè)Hive數(shù)據(jù)表連接時(shí)引發(fā)的數(shù)據(jù)傾斜269
第11章 Hive知識體系總結(jié)270
11.1 Hive知識體系270
11.2 數(shù)據(jù)粒度271
11.3 SQL相關(guān)275
11.3.1 select查詢語句276
11.3.2 數(shù)據(jù)定義語言(DDL)276
11.3.3 數(shù)據(jù)控制語言(DML)279
11.3.4 用戶自定義函數(shù)(UDF)280
11.4 文件操作281