大數(shù)據(jù)技術(shù)體系詳解:原理、架構(gòu)與實(shí)踐
定 價(jià):79 元
- 作者:董西成
- 出版時(shí)間:2018/3/1
- ISBN:9787111590729
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP274
- 頁碼:
- 紙張:膠版紙
- 版次:1
- 開本:16開
本書站在大數(shù)據(jù)落地應(yīng)用的角度,系統(tǒng)闡述大數(shù)據(jù)從數(shù)據(jù)收集,到數(shù)據(jù)存儲(chǔ)、分布式協(xié)調(diào)及資源管理、計(jì)算引擎、分析工具,再到數(shù)據(jù)可視化這一完整流程,本書既包含主要技術(shù)的實(shí)現(xiàn)原理及其框架,也包含了具體落地指導(dǎo),是幫助企業(yè)和個(gè)人整體了解大數(shù)據(jù)框架不可多得的參考書。本章主要包括6個(gè)部分共16章的內(nèi)容,其中:第壹部分介紹了大數(shù)據(jù)體系架構(gòu),以及Google和Hadoop技術(shù)棧;第二部分介紹大數(shù)據(jù)分析相關(guān)技術(shù),主要涉及關(guān)系型數(shù)據(jù)收集工具Sqoop與Canel、非關(guān)系型數(shù)據(jù)收集系統(tǒng)Flume以及分布式消息隊(duì)列Kafka;第三部分介紹大數(shù)據(jù)存儲(chǔ)相關(guān)技術(shù),涉及數(shù)據(jù)存儲(chǔ)格式、分布式文件系統(tǒng)以及分布式數(shù)據(jù)庫;第四部分介紹資源管理和服務(wù)協(xié)調(diào)相關(guān)技術(shù),涉及資源管理和調(diào)度系統(tǒng)YARN以及資源協(xié)調(diào)系統(tǒng)ZooKeeper;第五部分介紹計(jì)算引擎相關(guān)技術(shù),涉及批處理、交互式處理以及流式實(shí)時(shí)處理三類引擎;第六部分?jǐn)?shù)據(jù)分析相關(guān)技術(shù),涉及基于數(shù)據(jù)分析語言HQL與SQL、大數(shù)據(jù)統(tǒng)一編程模型及機(jī)器學(xué)習(xí)庫等。
Preface?前 言為什么要寫這本書隨著大數(shù)據(jù)技術(shù)的普及,它已經(jīng)被廣泛應(yīng)用于互聯(lián)網(wǎng)、電信、金融、工業(yè)制造等諸多行業(yè)。據(jù)相關(guān)報(bào)告統(tǒng)計(jì),大數(shù)據(jù)人才需求呈井噴態(tài)勢,越來越多的程序員開始學(xué)習(xí)大數(shù)據(jù)技術(shù),這使得它已經(jīng)成為程序員所需的基本技能。
為了滿足大數(shù)據(jù)人才市場需求,越來越多的大數(shù)據(jù)技術(shù)書籍不斷面世,包括《Hadoop權(quán)威指南》《Hadoop實(shí)戰(zhàn)》等。盡管如此,面向初、中級(jí)學(xué)者,能夠系統(tǒng)化、體系化介紹大數(shù)據(jù)技術(shù)的基礎(chǔ)書籍并不多見。筆者曾接觸過大量大數(shù)據(jù)初學(xué)者,他們一直渴望能有一本簡單且易于理解的教科書式的大數(shù)據(jù)書籍出現(xiàn)。為了滿足這些讀者的需求,筆者根據(jù)自己多年的數(shù)據(jù)項(xiàng)目和培訓(xùn)經(jīng)驗(yàn),繼《Hadoop技術(shù)內(nèi)幕》書籍之后,于兩年前開始嘗試編寫一本淺顯易讀的大數(shù)據(jù)基礎(chǔ)書籍。
相比于現(xiàn)有的大數(shù)據(jù)基礎(chǔ)書籍,本書具有三大特色:①系統(tǒng)性:深度剖析大數(shù)據(jù)技術(shù)體系的六層架構(gòu);②技術(shù)性:詳盡介紹Hadoop和Spark等主流大數(shù)據(jù)技術(shù);③實(shí)用性:理論與實(shí)踐相結(jié)合,探討常見的大數(shù)據(jù)問題。本書嘗試以“數(shù)據(jù)生命周期”為線索,按照分層結(jié)構(gòu)逐步介紹大數(shù)據(jù)技術(shù)體系,涉及數(shù)據(jù)收集、數(shù)據(jù)存儲(chǔ)、資源管理和服務(wù)協(xié)調(diào)、計(jì)算引擎及數(shù)據(jù)分析五層技術(shù)架構(gòu),由點(diǎn)及面,最終通過綜合案例將這些技術(shù)串接在一起。
讀者對象(1)大數(shù)據(jù)應(yīng)用開發(fā)人員本書用了相當(dāng)大的篇幅介紹各個(gè)大數(shù)據(jù)系統(tǒng)的適用場景和使用方式,能夠很好地幫助大數(shù)據(jù)應(yīng)用開發(fā)工程師設(shè)計(jì)出滿足要求的程序。
(2)大數(shù)據(jù)講師和學(xué)員本書按照大數(shù)據(jù)五層架構(gòu),即數(shù)據(jù)收集→數(shù)據(jù)存儲(chǔ)→資源管理與服務(wù)協(xié)調(diào)→計(jì)算引擎→數(shù)據(jù)分析,完整介紹了整個(gè)大數(shù)據(jù)技術(shù)體系,非常易于理解,此外,每節(jié)包含大量代碼示例和思考題目,非常適合大數(shù)據(jù)教學(xué)。
(3)大數(shù)據(jù)運(yùn)維工程師對于一名合格的大數(shù)據(jù)運(yùn)維工程師而言,適當(dāng)?shù)亓私獯髷?shù)據(jù)系統(tǒng)的應(yīng)用場景、設(shè)計(jì)原理和架構(gòu)是十分有幫助的,這不僅有助于我們更快地排除各種可能的大數(shù)據(jù)系統(tǒng)故障,也能夠讓運(yùn)維人員與研發(fā)人員更有效地進(jìn)行溝通。本書可以有效地幫助運(yùn)維工程師全面理解當(dāng)下主流的大數(shù)據(jù)技術(shù)體系。
(4)開源軟件愛好者開源大數(shù)據(jù)系統(tǒng)(比如Hadoop和Spark)是開源軟件中的佼佼者,它們在實(shí)現(xiàn)的過程中吸收了大量開源領(lǐng)域的優(yōu)秀思想,同時(shí)也有很多值得學(xué)習(xí)的創(chuàng)新。通過閱讀本書,這部分讀者不僅能領(lǐng)略到開源軟件的優(yōu)秀思想,還可以學(xué)習(xí)如何構(gòu)建一套完整的技術(shù)生態(tài)。
如何閱讀本書本書以數(shù)據(jù)在大數(shù)據(jù)系統(tǒng)中的生命周期為線索,介紹以Hadoop與Spark為主的開源大數(shù)據(jù)技術(shù)棧。本書內(nèi)容組織方式如下。
第一部分:主要介紹大數(shù)據(jù)體系架構(gòu),以及Google和Hadoop技術(shù)棧,讓讀者從高層次上對大數(shù)據(jù)技術(shù)有一定了解。
第二部分:介紹大數(shù)據(jù)分析相關(guān)技術(shù),主要涉及關(guān)系型數(shù)據(jù)收集工具Sqoop與Canel、非關(guān)系型數(shù)據(jù)收集系統(tǒng)Flume,以及分布式消息隊(duì)列Kafka。
第三部分:介紹大數(shù)據(jù)存儲(chǔ)相關(guān)技術(shù),涉及數(shù)據(jù)存儲(chǔ)格式、分布式文件系統(tǒng)及分布式數(shù)據(jù)庫三部分。
第四部分:介紹資源管理和服務(wù)協(xié)調(diào)相關(guān)技術(shù),涉及資源管理和調(diào)度系統(tǒng)YARN,以及資源協(xié)調(diào)系統(tǒng)ZooKeeper。
第五部分:介紹計(jì)算引擎相關(guān)技術(shù),包括批處理、交互式處理,以及流式實(shí)時(shí)處理三類引擎,內(nèi)容涉及MapReduce、Spark、Impala/Presto、Storm等常用技術(shù)。
第六部分:介紹數(shù)據(jù)分析相關(guān)技術(shù),涉及基于數(shù)據(jù)分析的語言HQL與SQL、大數(shù)據(jù)統(tǒng)一編程模型及機(jī)器學(xué)習(xí)庫等。
大數(shù)據(jù)體系的邏輯也是本書的邏輯,故這里給出大數(shù)據(jù)體系邏輯圖。
勘誤和支持由于筆者的水平有限,編寫時(shí)間倉促,書中難免會(huì)出現(xiàn)一些錯(cuò)誤或者不準(zhǔn)確的地方,懇請讀者批評(píng)指正。為此,筆者特意創(chuàng)建了一個(gè)在線支持與應(yīng)急方案的站點(diǎn)http://hadoop123.com和微信公眾號(hào)hadoop-123。你可以將書中的錯(cuò)誤發(fā)布在Bug勘誤表頁面。如果你遇到任何問題,也可以訪問Q&A頁面,我將盡量在線上為你提供最滿意的解答。如果你有更多寶貴的意見,也歡迎發(fā)送郵件至郵箱dongxicheng@yahoo.com,期待能夠得到你們的真摯反饋。
獲取源代碼實(shí)例本書各節(jié)的源代碼實(shí)例可從網(wǎng)站http://hadoop123.com或微信公眾號(hào)hadoop-123中獲取。
致謝感謝我的導(dǎo)師廖華明副研究員,是她引我進(jìn)入大數(shù)據(jù)世界。
感謝機(jī)械工業(yè)出版社華章公司的孫海亮編輯對本書的校訂,他的鼓勵(lì)和幫助使我順利完成了本書的編寫工作。
最后感謝我的父母,感謝他們的養(yǎng)育之恩,感謝兄長的鼓勵(lì)和支持,感謝他們時(shí)時(shí)刻刻給我以信心和力量!
謹(jǐn)以此書獻(xiàn)給我最親愛的家人,以及眾多熱愛大數(shù)據(jù)技術(shù)的朋友們!
董西成
目 錄?Contents
前 言
第一部分 概述篇
第1章 企業(yè)級(jí)大數(shù)據(jù)技術(shù)體系概述 2
1.1 大數(shù)據(jù)系統(tǒng)產(chǎn)生背景及應(yīng)用場景 2
1.1.1 產(chǎn)生背景 2
1.1.2 常見大數(shù)據(jù)應(yīng)用場景 3
1.2 企業(yè)級(jí)大數(shù)據(jù)技術(shù)框架 5
1.2.1 數(shù)據(jù)收集層 6
1.2.2 數(shù)據(jù)存儲(chǔ)層 7
1.2.3 資源管理與服務(wù)協(xié)調(diào)層 7
1.2.4 計(jì)算引擎層 8
1.2.5 數(shù)據(jù)分析層 9
1.2.6 數(shù)據(jù)可視化層 9
1.3 企業(yè)級(jí)大數(shù)據(jù)技術(shù)實(shí)現(xiàn)方案 9
1.3.1 Google大數(shù)據(jù)技術(shù)棧 10
1.3.2 Hadoop與Spark開源大數(shù)據(jù)技術(shù)棧 12
1.4 大數(shù)據(jù)架構(gòu):Lambda Architecture 15
1.5 Hadoop與Spark版本選擇及安裝部署 16
1.5.1 Hadoop與Spark版本選擇 16
1.5.2 Hadoop與Spark安裝部署 17
1.6 小結(jié) 18
1.7 本章問題 18
第二部分 數(shù)據(jù)收集篇
第2章 關(guān)系型數(shù)據(jù)的收集 20
2.1 Sqoop概述 20
2.1.1 設(shè)計(jì)動(dòng)機(jī) 20
2.1.2 Sqoop基本思想及特點(diǎn) 21
2.2 Sqoop基本架構(gòu) 21
2.2.1 Sqoop1基本架構(gòu) 22
2.2.2 Sqoop2基本架構(gòu) 23
2.2.3 Sqoop1與Sqoop2對比 24
2.3 Sqoop使用方式 25
2.3.1 Sqoop1使用方式 25
2.3.2 Sqoop2使用方式 28
2.4 數(shù)據(jù)增量收集CDC 31
2.4.1 CDC動(dòng)機(jī)與應(yīng)用場景 31
2.4.2 CDC開源實(shí)現(xiàn)Canal 32
2.4.3 多機(jī)房數(shù)據(jù)同步系統(tǒng)Otter 33
2.5 小結(jié) 35
2.6 本章問題 35
第3章 非關(guān)系型數(shù)據(jù)的收集 36
3.1 概述 36
3.1.1 Flume設(shè)計(jì)動(dòng)機(jī) 36
3.1.2 Flume基本思想及特點(diǎn) 37
3.2 Flume NG基本架構(gòu) 38
3.2.1 Flume NG基本架構(gòu) 38
3.2.2 Flume NG高級(jí)組件 41
3.3 Flume NG數(shù)據(jù)流拓?fù)錁?gòu)建方法 42
3.3.1 如何構(gòu)建數(shù)據(jù)流拓?fù)? 42
3.3.2 數(shù)據(jù)流拓?fù)鋵?shí)例剖析 46
3.4 小結(jié) 50
3.5 本章問題 50
第4章 分布式消息隊(duì)列Kafka 51
4.1 概述 51
4.1.1 Kafka設(shè)計(jì)動(dòng)機(jī) 51
4.1.2 Kafka特點(diǎn) 53
4.2 Kafka設(shè)計(jì)架構(gòu) 53
4.2.1 Kafka基本架構(gòu) 54
4.2.2 Kafka各組件詳解 54
4.2.3 Kafka關(guān)鍵技術(shù)點(diǎn) 58
4.3 Kafka程序設(shè)計(jì) 60
4.3.1 Producer程序設(shè)計(jì) 61
4.3.2 Consumer程序設(shè)計(jì) 63
4.3.3 開源Producer與Consumer實(shí)現(xiàn) 65
4.4 Kafka典型應(yīng)用場景 65
4.5 小結(jié) 67
4.6 本章問題 67
第三部分 數(shù)據(jù)存儲(chǔ)篇
第5章 數(shù)據(jù)序列化與文件存儲(chǔ)格式 70
5.1 數(shù)據(jù)序列化的意義 70
5.2 數(shù)據(jù)序列化方案 72
5.2.1 序列化框架Thrift 72
5.2.2 序列化框架Protobuf 74
5.2.3 序列化框架Avro 76
5.2.4 序列化框架對比 78
5.3 文件存儲(chǔ)格式剖析 79
5.3.1 行存儲(chǔ)與列存儲(chǔ) 79
5.3.2 行式存儲(chǔ)格式 80
5.3.3 列式存儲(chǔ)格式ORC、Parquet與CarbonData 82
5.4 小結(jié) 88
5.5 本章問題 89
第6章 分布式文件系統(tǒng) 90
6.1 背景 90
6.2 文件級(jí)別和塊級(jí)別的分布式文件系統(tǒng) 91
6.2.1 文件級(jí)別的分布式系統(tǒng) 91
6.2.2 塊級(jí)別的分布式系統(tǒng) 92
6.3 HDFS基本架構(gòu) 93
6.4 HDFS關(guān)鍵技術(shù) 94
6.4.1 容錯(cuò)性設(shè)計(jì) 95
6.4.2 副本放置策略 95
6.4.3 異構(gòu)存儲(chǔ)介質(zhì) 96
6.4.4 集中式緩存管理 97
6.5 HDFS訪問方式 98
6.5.1 HDFS shell 98
6.5.2 HDFS API 100
6.5.3 數(shù)據(jù)收集組件 101
6.5.4 計(jì)算引擎 102
6.6 小結(jié) 102
6.7 本章問題 103
第7章 分布式結(jié)構(gòu)化存儲(chǔ)系統(tǒng) 104
7.1 背景 104
7.2 HBase數(shù)據(jù)模型 105
7.2.1 邏輯數(shù)據(jù)模型 105
7.2.2 物理數(shù)據(jù)存儲(chǔ) 107
7.3 HBase基本架構(gòu) 108
7.3.1 HBase基本架構(gòu) 108
7.3.2 HBase內(nèi)部原理 110
7.4 HBase訪問方式 114
7.4.1 HBase shell 114
7.4.2 HBase API 116
7.4.3 數(shù)據(jù)收集組件 118
7.4.4 計(jì)算引擎 119
7.4.5 Apache Phoenix 119
7.5 HBase應(yīng)用案例 120
7.5.1 社交關(guān)系數(shù)據(jù)存儲(chǔ) 120
7.5.2 時(shí)間序列數(shù)據(jù)庫OpenTSDB 122
7.6 分布式列式存儲(chǔ)系統(tǒng)Kudu 125
7.6.1 Kudu基本特點(diǎn) 125
7.6.2 Kudu數(shù)據(jù)模型與架構(gòu) 126
7.6.3 HBase與Kudu對比 126
7.7 小結(jié) 127
7.8 本章問題 127
第四部分 分布式協(xié)調(diào)與資源管理篇
第8章 分布式協(xié)調(diào)服務(wù)ZooKeeper 130
8.1 分布式協(xié)調(diào)服務(wù)的存在意義 130
8.1.1 leader選舉 130
8.1.2 負(fù)載均衡 131
8.2 ZooKeeper數(shù)據(jù)模型 132
8.3 ZooKeeper基本架構(gòu) 133
8.4 ZooKeeper程序設(shè)計(jì) 134
8.4.1 ZooKeeper API 135
8.4.2 Apache Curator 139
8.5 ZooKeeper應(yīng)用案例 142
8.5.1 leader選舉 142
8.5.2 分布式隊(duì)列 143
8.5.3 負(fù)載均衡 143
8.6 小結(jié) 144
8.7 本章問題 145
第9章 資源管理與調(diào)度系統(tǒng)YARN 146
9.1 YARN產(chǎn)生背景 146
9.1.1 MRv1局限性 146
9.1.2 YARN設(shè)計(jì)動(dòng)機(jī) 147
9.2 YARN設(shè)計(jì)思想 148
9.3 YARN的基本架構(gòu)與原理 149
9.3.1 YARN基本架構(gòu) 149
9.3.2 YARN高可用 152
9.3.3 YARN工作流程 153
9.4 YARN資源調(diào)度器 155
9.4.1 層級(jí)隊(duì)列管理機(jī)制 155
9.4.2 多租戶資源調(diào)度器產(chǎn)生背景 156
9.4.3 Capacity/Fair Scheduler 157
9.4.4 基于節(jié)點(diǎn)標(biāo)簽的調(diào)度 160
9.4.5 資源搶占