前 言
技術(shù)革命的浪潮推動著人類文明的發(fā)展。
第一次浪潮造就了農(nóng)業(yè)革命,它在數(shù)千年前出現(xiàn)并持續(xù)了數(shù)千年;第二次浪潮造就了工業(yè)革命,它在數(shù)百年前出現(xiàn)并持續(xù)了數(shù)百年;我們今天正在經(jīng)歷著信息技術(shù)第三次浪潮,發(fā)端于數(shù)十年前,目前也只是處在初級階段。
農(nóng)業(yè)技術(shù)革命釋放了"物之力";工業(yè)技術(shù)革命釋放了"能之力",而今天的信息技術(shù)革命釋放的是"智之力"。
距今400年前,培根在《偉大的復(fù)興》中預(yù)言:知識就是力量。今天,人類終于迎來"知識經(jīng)濟(jì)時代",它是人類社會經(jīng)濟(jì)增長方式與經(jīng)濟(jì)發(fā)展的全新模式。
人類認(rèn)識物質(zhì)世界、人類社會和精神世界的最高境界是智慧,而要達(dá)智慧的境界,必然要跨越數(shù)據(jù)、信息、知識三個層級。
數(shù)據(jù)作為基礎(chǔ),是信息之母、知識之初、智慧之源。正是今天的大數(shù)據(jù)技術(shù),引燃了人們實(shí)現(xiàn)智慧城市、智慧醫(yī)療、智慧教育等有關(guān)人工智慧的激情。人們真切地認(rèn)識到,對于人工智能,只要讓數(shù)據(jù)發(fā)生質(zhì)變,即使是簡單的數(shù)據(jù),也比復(fù)雜的算法更有效。
今天,移動互聯(lián)網(wǎng)的發(fā)展,使我們在獲取數(shù)據(jù)上有了質(zhì)的飛躍,人類的各種社會活動都與互聯(lián)網(wǎng)這個虛擬世界相聯(lián)系,使全樣本、全過程地有效測量和記錄成為可能,構(gòu)建了生成大數(shù)據(jù)生態(tài)的土壤,同時,人們還在期待和憧憬物聯(lián)網(wǎng)帶來更大的沖擊。
另一方面,云計(jì)算發(fā)展到今天,不論從技術(shù)到產(chǎn)業(yè)都開始進(jìn)入成熟期,這也是大數(shù)據(jù)發(fā)展的基石和推進(jìn)器。
在今天這個時代中,運(yùn)用大數(shù)據(jù)洞見事物蘊(yùn)藏的"智慧"成為人們的渴望。大數(shù)據(jù)更新了人們對數(shù)據(jù)的認(rèn)識。在技術(shù)層面,小數(shù)據(jù)時代的很多數(shù)據(jù)處理方法和工具已不再有效,需要一系列新的方法和工具。所幸,有大量平民化的開源軟件可用,它們不需要特殊的硬件系統(tǒng),也更適用于云計(jì)算環(huán)境。
本書正是一本介紹主流的大數(shù)據(jù)開源軟件平臺和工具的技術(shù)專著,側(cè)重于大數(shù)據(jù)的實(shí)踐性技術(shù),幫助讀者快速入門,通過具體深入的實(shí)踐,體會大數(shù)據(jù)的技術(shù)本質(zhì)特征,領(lǐng)略大數(shù)據(jù)技術(shù)帶來的創(chuàng)新理念,更好地理解和把握信息技術(shù)的發(fā)展趨勢。
本書定位
(1) 信息發(fā)展已步入大數(shù)據(jù)時代,當(dāng)前對于大數(shù)據(jù)還缺乏面向公眾的技術(shù)實(shí)踐手冊。
(2) 本書的創(chuàng)作團(tuán)隊(duì)有豐富的大數(shù)據(jù)規(guī)劃、開發(fā)、運(yùn)營等經(jīng)驗(yàn),多位作者成功地架構(gòu)了教育部、科技部、互聯(lián)網(wǎng)等大數(shù)據(jù)架構(gòu)與分析項(xiàng)目。
(3) 本書的參與者均是部委信息一線工程師、著名外企架構(gòu)師、國內(nèi)企業(yè)資深高級工程師,所做的理論分析易于學(xué)習(xí),實(shí)踐具有可操作性。
(4) 本書重點(diǎn)介紹大數(shù)據(jù)的基礎(chǔ)理論、關(guān)鍵技術(shù),以及編程實(shí)踐。利用本書,就可以完全搭建并能有效地管理好大數(shù)據(jù)平臺。
本書特色
(1) 理念先進(jìn):均是國內(nèi)外最新的大數(shù)據(jù)理念;方便讀者全面了解國內(nèi)外大數(shù)據(jù)研究與發(fā)展的情況。
(2) 技術(shù)領(lǐng)先:參與者均是國內(nèi)IT人士;采用的平臺均是業(yè)界主流開源平臺,涉及大數(shù)據(jù)常用的HDFS、MapReduce、YARN、Zookeeper、HBase、Hive、Sqoop、Storm、Kafka等技術(shù)的介紹與編程使用。
(3) 案例豐富:提供翔實(shí)的實(shí)例與解決方法,供項(xiàng)目中參考。
(4) 資源齊備:本書涉及的配套下載資源可以從清華大學(xué)出版社的網(wǎng)站中下載。
全書關(guān)鍵字
大數(shù)據(jù)、分布式計(jì)算、數(shù)據(jù)倉庫、數(shù)據(jù)分析、HDFS、MapReduce、YARN、Zookeeper、HBase、Hive、Sqoop、Storm、Kafka。
由于編者的水平有限,書中難免有疏漏和錯誤,希望業(yè)內(nèi)專家和廣大讀者指正。
編 者
目 錄
大數(shù)據(jù)存儲篇
第1章 概述.... 1
1.1 什么是大數(shù)據(jù)... 2
1.2 大數(shù)據(jù)的技術(shù)轉(zhuǎn)型... 3
1.3 數(shù)據(jù)分片... 4
1.4 數(shù)據(jù)一致性... 5
1.4.1 CAP原則... 5
1.4.2 CAP與ACID.. 7
1.4.3 BASE原則... 8
1.5 主流大數(shù)據(jù)技術(shù)... 8
1.6 大數(shù)據(jù)職業(yè)方向... 10
1.7 大數(shù)據(jù)實(shí)踐平臺的搭建... 10
1.7.1 初學(xué)者模式... 10
1.7.2 物理集群模式... 11
1.7.3 虛擬化集群模式... 11
1.8 小結(jié)... 12
第2章 HDFS文件系統(tǒng).... 13
2.1 HDFS概述... 14
2.1.1 分布式文件系統(tǒng)... 14
2.1.2 HDFS介紹... 16
2.2 HDFS的運(yùn)行機(jī)制... 18
2.2.1 HDFS的結(jié)構(gòu)與組成... 18
2.2.2 HDFS的數(shù)據(jù)操作... 20
2.2.3 訪問權(quán)限... 22
2.2.4 通信協(xié)議簇... 23
2.2.5 HDFS的高可用性... 24
2.2.6 集中緩存管理... 25
2.2.7 日志和檢查點(diǎn)... 26
2.2.8 HDFS快照... 28
2.3 HDFS的數(shù)據(jù)存儲... 29
2.3.1 數(shù)據(jù)完整性... 29
2.3.2 數(shù)據(jù)壓縮... 30
2.3.3 序列化... 32
2.4 HDFS的安裝和配置... 34
2.4.1 Hadoop的安裝... 34
2.4.2 HDFS的配置... 40
2.4.3 啟動HDFS. 45
2.5 小結(jié)... 47
第3章 HDFS操作實(shí)踐.... 49
3.1 HDFS接口與編程... 50
3.1.1 Shell命令... 50
3.1.2 Java接口操作... 62
3.1.3 WebHDFS. 69
3.1.4 其他接口... 71
3.2 操作實(shí)踐... 73
3.2.1 文件操作... 73
3.2.2 壓縮與解壓縮... 77
3.3 小結(jié)... 80
大數(shù)據(jù)計(jì)算篇
第4章 YARN.. 81
4.1 YARN概述... 82
4.2 YARN的主要組成模塊... 83
4.3 YARN的整體設(shè)計(jì)... 83
4.4 容量調(diào)度器... 84
4.4.1 什么是容量調(diào)度器... 84
4.4.2 容量調(diào)度器的特性... 85
4.4.3 配置RM使用容量調(diào)度器... 85
4.5 公平調(diào)度器(Fair Scheduler) 86
4.5.1 什么是公平調(diào)度器... 86
4.5.2 分級隊(duì)列... 87
4.5.3 公平調(diào)度器隊(duì)列的設(shè)置... 87
4.6 資源管理者(RM)重啟機(jī)制... 90
4.6.1 什么是資源管理器重啟... 90
4.6.2 非工作保存RM重啟... 90
4.6.3 工作保存RM重啟... 91
4.6.4 RM重啟配置yarn-site.xml 91
4.7 資源管理器的高可用性(RM HA) 92
4.7.1 什么是資源管理器的
高可用性... 92
4.7.2 自動故障轉(zhuǎn)移... 92
4.7.3 客戶端/應(yīng)用管理器/節(jié)點(diǎn)
管理器的故障轉(zhuǎn)移... 92
4.7.4 部署RM HA.. 93
4.7.5 配置例子... 94
4.7.6 管理員命令... 95
4.8 節(jié)點(diǎn)標(biāo)簽... 95
4.8.1 節(jié)點(diǎn)標(biāo)簽的特點(diǎn)... 95
4.8.2 節(jié)點(diǎn)標(biāo)簽的屬性... 95
4.8.3 節(jié)點(diǎn)標(biāo)簽的配置... 96
4.8.4 使用節(jié)點(diǎn)標(biāo)簽的調(diào)度器配置... 96
4.8.5 節(jié)點(diǎn)標(biāo)簽配置示例... 97
4.8.6 指定應(yīng)用的節(jié)點(diǎn)標(biāo)簽... 97
4.8.7 節(jié)點(diǎn)標(biāo)簽的監(jiān)控... 98
4.9 YARN編程... 98
4.9.1 什么是YARN級別編程... 98
4.9.2 YARN的相關(guān)接口... 99
4.9.3 編程實(shí)踐... 99
4.10 YARN服務(wù)注冊... 107
4.10.1 為什么需要服務(wù)注冊... 107
4.10.2 配置服務(wù)注冊... 107
4.10.3 安全選項(xiàng)... 108
4.11 小結(jié)... 108
第5章 MapReduce.. 109
5.1 MapReduce概述... 110
5.1.1 Hadoop
MapReduce. 110
5.1.2 MapReduce的發(fā)展史... 110
5.1.3 MapReduce的使用場景... 111
5.2 Key-Value結(jié)構(gòu)的特點(diǎn)... 111
5.2.1 key的設(shè)計(jì)... 111
5.2.2 value的設(shè)計(jì)... 112
5.3 MapReduce的部署... 112
5.3.1 軟件準(zhǔn)備... 112
5.3.2 配置文件... 113
5.3.3 啟動YARN守護(hù)進(jìn)程... 113
5.4 MapReduce的程序結(jié)構(gòu)... 113
5.4.1 MR框架的輸入和輸出... 114
5.4.2 WordCount 114
5.5 MapReduce的編程接口... 116
5.5.1 Mapper接口... 117
5.5.2 Reducer接口... 117
5.5.3
Partitioner(分區(qū)) 118
5.5.4 Counter(計(jì)數(shù)器) 118
5.5.5 job工作機(jī)理... 118
5.5.6 任務(wù)提交和監(jiān)控(Job
Submission and Monitoring) 121
5.5.7 任務(wù)的輔助文件(Task
Side-Effect Files) 123
5.5.8 提交作業(yè)到隊(duì)列... 123
5.5.9 MR中的計(jì)數(shù)器(Counters) 123
5.5.10
Profiling. 123
5.5.11
Debugging. 124
5.5.12 job
Outputs. 124
5.5.13 忽略壞記錄(Skipping
Bad Records) 124
5.6 MapReduce的命令行... 125
5.6.1 概述... 125
5.6.2 用戶命令(User Commands) 125
5.6.3 管理員命令(Administration
Commands) 127
5.6.4 YARN-MapReduce的部署... 128
5.7 WordCount的實(shí)現(xiàn)... 129
5.8
小結(jié)... 136
非關(guān)系型數(shù)據(jù)庫篇
第6章 使用HBase.. 137
6.1 HBase基礎(chǔ)... 138
6.1.1 HBase是什么... 138
6.1.2 HBase偽分布式部署... 140
6.1.3 服務(wù)的啟動與驗(yàn)證... 142
6.1.4 HBase Shell測試... 142
6.1.5 Web測試... 144
6.1.6 服務(wù)的關(guān)閉... 147
6.2 HBase的架構(gòu)原理... 147
6.2.1 組成架構(gòu)... 147
6.2.2 數(shù)據(jù)模型... 151
6.2.3 物理存儲... 153
6.3 HBase的命令實(shí)踐... 156
6.3.1 概述... 157
6.3.2 命名空間... 158
6.3.3 表管理... 160
6.4 HBase的數(shù)據(jù)管理... 166
6.4.1 數(shù)據(jù)的添加... 167
6.4.2 數(shù)據(jù)的追加... 168
6.4.3 數(shù)據(jù)的獲取... 169
6.4.4 數(shù)據(jù)統(tǒng)計(jì)... 172
6.4.5 表的掃描... 173
6.4.6 數(shù)據(jù)的刪除... 175
6.4.7 表的重建... 175
6.5 HBase的集群管理... 177
6.5.1 集群部署... 177
6.5.2 自動化腳本... 180
6.5.3 權(quán)限管理... 182
6.5.4 集群調(diào)度... 184
6.5.5 日志分析... 186
6.6 小結(jié)... 187
第7章 HBase編程開發(fā).... 189
7.1 HBase的編程接口... 190
7.1.1 rest編程接口... 190
7.1.2 thrift接口... 196
7.1.3 Java API接口... 198
7.1.4 Java API示例... 199
7.2 表與命名空間的編程... 202
7.2.1 表的查看... 203
7.2.2 表的創(chuàng)建... 206
7.2.3 表的刪除... 207
7.2.4 表的修改... 208
7.2.5 命名空間... 210
7.3 數(shù)據(jù)編程... 213
7.3.1 數(shù)據(jù)的增加... 214
7.3.2 單行查詢... 216
7.3.3 集合查詢... 217
7.3.4 過濾器... 219
7.3.5 數(shù)據(jù)刪除... 221
7.4 集群與優(yōu)化編程... 222
7.4.1 集群管理... 222
7.4.2 集群監(jiān)測... 224
7.4.3 多表與表池... 227
7.4.4 批處理... 230
7.4.5 數(shù)據(jù)遷移... 231
7.5 小結(jié)... 234
大數(shù)據(jù)倉庫篇
第8章 數(shù)據(jù)倉庫概論.... 235
8.1 初識數(shù)據(jù)倉庫... 236
8.1.1 什么是數(shù)據(jù)倉庫... 236
8.1.2 數(shù)據(jù)倉庫與數(shù)據(jù)庫... 237
8.1.3 為什么要有數(shù)據(jù)倉庫... 239
8.2 數(shù)據(jù)倉庫的核心概念... 240
8.2.1 數(shù)據(jù)平臺... 240
8.2.2 數(shù)據(jù)產(chǎn)品... 241
8.2.3 商務(wù)智能(BI) 242
8.2.4 元數(shù)據(jù)... 242
8.2.5 OLAP. 242
8.2.6 ETL. 243
8.2.7 數(shù)據(jù)質(zhì)量... 243
8.3 數(shù)據(jù)倉庫中的數(shù)據(jù)內(nèi)容劃分... 243
8.3.1 多個數(shù)據(jù)倉庫... 243
8.3.2 典型的數(shù)據(jù)倉庫分層... 245
8.3.3 數(shù)據(jù)集市... 246
8.4 OLAP. 247
8.4.1 定義... 247
8.4.2 維度建模... 248
8.4.3 事實(shí)表... 250
8.4.4 維度表... 251
8.5 ETL. 251
8.5.1 抽取... 252
8.5.2 轉(zhuǎn)換... 252
8.5.3 加載... 254
8.5.4 ETL元數(shù)據(jù)... 255
8.5.5 ETL工具... 256
8.6 調(diào)度和運(yùn)行... 256
8.6.1 調(diào)度怎么工作... 257
8.6.2 需要考慮的其他方面... 258
8.6.3 簡易調(diào)度示例... 259
8.7 數(shù)據(jù)倉庫的架構(gòu)... 259
8.8 數(shù)據(jù)倉庫的展望... 260
8.8.1 數(shù)據(jù)倉庫發(fā)展的階段性... 260
8.8.2 未來的數(shù)據(jù)倉庫... 262
8.9 小結(jié)... 262
第9章 Hive.. 263
9.1 初識Hive. 264
9.1.1 Hive是什么... 264
9.1.2 Hive的部署... 264
9.1.3 以MySQL作為Hive的
元數(shù)據(jù)庫... 266
9.1.4 Hive的體系結(jié)構(gòu)... 268
9.1.5 Web界面展示... 269
9.2 Hive命令行接口... 270
9.2.1 啟動Hive命令行... 270
9.2.2 可用的命令... 271
9.3 Hive數(shù)據(jù)類型與常見的結(jié)構(gòu)... 271
9.3.1 數(shù)據(jù)類型... 271
9.3.2 文件的存儲結(jié)構(gòu)... 273
9.4 HiveSQL. 274
9.4.1 數(shù)據(jù)定義語言DDL. 274
9.4.2 數(shù)據(jù)操縱語言DML. 277
9.5 Hive的自定義函數(shù)... 283
9.5.1 UDF. 284
9.5.2 UDAF. 286
9.5.3 UDTF. 289
9.6 Hive的高級使用... 292
9.6.1 視圖... 292
9.6.2 索引... 293
9.6.3 權(quán)限... 294
9.6.4 Thrift服務(wù)... 296
9.7 使用Hive構(gòu)建數(shù)據(jù)倉庫... 298
9.7.1 原始數(shù)據(jù)和結(jié)構(gòu)... 298
9.7.2 數(shù)據(jù)需求和模型設(shè)計(jì)... 300
9.7.3 各層次數(shù)據(jù)的生成... 301
9.8 小結(jié)... 302
大數(shù)據(jù)實(shí)時計(jì)算篇
第10章 Storm實(shí)時系統(tǒng).... 303
10.1 大數(shù)據(jù)實(shí)時系統(tǒng)概述... 304
10.2 Kafka分布式消息系統(tǒng)... 305
10.2.1 Kafka是什么... 305
10.2.2 主題的工作原理... 306
10.2.3 分布式分區(qū)... 307
10.2.4 生產(chǎn)者、消費(fèi)者... 307
10.2.5 數(shù)據(jù)保證... 308
10.2.6 Kafka系統(tǒng)的應(yīng)用場景... 308
10.2.7 Kafka系統(tǒng)的部署... 309
10.3 Storm實(shí)時處理系統(tǒng)... 316
10.3.1 概述... 316
10.3.2 為什么使用Storm.. 316
10.3.3 Storm系統(tǒng)的特點(diǎn)... 317
10.3.4 Storm系統(tǒng)的工作機(jī)制... 318
10.3.5 Storm的分組方法... 319
10.3.6 Storm系統(tǒng)的組件... 320
10.3.7 搭建單點(diǎn)Storm系統(tǒng)... 320
10.3.8 查看Storm UI 322
10.3.9 搭建Storm集群... 322
10.3.10 Storm系統(tǒng)的操作實(shí)踐... 323
10.3.11 Storm
WordCount
(寫RDB) 324
10.3.12 Storm
WordCount(從Kafka
讀取數(shù)據(jù)) 329
10.4 小結(jié)... 331
參考文獻(xiàn).... 332