從零開始學Storm(第2版)

從零開始學Storm(第2版)

《從零開始學Storm》是由趙必廈,程麗明兩位碩士共同編寫,幫助讀者在短時間內,掌握Storm的使用,搭建並研發出自己的基於Storm的大數據處理平台。本書是綜合性的,介紹了Storm的基本原理、Topology組件、Spout組件、Bolt組件、ZooKeeper集群、Storm的安裝與配置、實戰環節等內容,包括理論基礎、環境搭建、研發準備、企業套用等。理論聯繫實際,讓廣大讀者充分了解Storm的開發和學校的參考使用。

基本介紹

  • 書名:從零開始學Storm(第2版)
  • 作者:趙必廈、程麗明
  • ISBN:9787302438076
  • 定價:59元
  • 出版時間:2016.07.01
內容簡介,作者簡介,目 錄,

內容簡介

本書由基礎知識、安裝與部署、研發與維護、進階知識、企業套用5個模組構成,並細分為20個章節,其中“基礎知識”6章、“安裝與部署”4章、“研發與維護”4章、“進階知識”5章、“企業套用”1章,分別介紹了Storm的基本原理、Topology組件、Spout組件、Bolt組件、ZooKeeper集群、Storm的安裝與配置、實戰環節等內容,包括理論基礎、環境搭建、研發準備、企業套用等。 本書理論聯繫實際,通過大量實例分析,讓讀者在較短的時間內掌握Storm的使用,搭建並研發出自己的基於Storm的大數據處理平台。 本書適合所有大數據處理、實時流數據處理、Storm的開發者或愛好者,也適合高等院校和培訓學校相關專業的師生參考使用。

作者簡介

趙必廈,碩士,具有多年的面向對象語言研發經驗,熟練掌握C++、Java、C#等面向對象語言,專注於雲計算、大數據、網際網路等方面的研究與研發工作,積累了豐富的經驗。
程麗明,碩士,目前從事伺服器虛擬化與雲計算構建、信息化安全的研究和產品開發工作。有多年的項目開發經驗,研究興趣包括虛擬化、雲計算、SDN、移動辦公安全等。

目 錄

第1章 Storm簡介
1.1 什麼是Storm 1
1.2 Storm的誕生 3
1.2.1 從Twitter說起 3
1.2.2 Twitter需要處理大批實時性要求高的大數據業務 3
1.2.3 Storm幫助Twitter解決實時海量大數據處理問題 4
1.3 Storm的成長 5
1.3.1 Storm正式開源 5
1.3.2 Apache接管並孵化Storm 5
1.3.3 Storm的核心技術和基本組成 6
1.3.4 Storm的項目小組 7
1.3.5 Storm的技術支持網站 10
1.4 Storm的優勢 13
1.4.1 集成多種技術 13
1.4.2 簡單的API 13
1.4.3 可擴展的 14
1.4.4 容錯的 14
1.4.5 保證數據處理 14
1.4.6 可以使用任何語言 14
1.4.7 部署和操作簡單 15
1.4.8 自由開源 15
1.5 Storm的套用現狀和發展趨勢 15
1.5.1 套用現狀 16
1.5.2 發展趨勢 18
1.6 如何學習Storm 20
1.7 本書的章節安排及學習建議 21
1.7.1 本書的章節安排 21
1.7.2 關於如何閱讀本書的建議 22
1.8 本章小結 23
第 2 章 Storm的基本知識
2.1 概念 24
2.1.1 元組(Tuple) 24
2.1.2 流(Stream) 25
2.1.3 龍捲(Spout) 26
2.1.4閃電(Bolt)27
2.1.5拓撲(Topology)27
2.1.6主控節點與工作節點28
2.1.7Nimbus進程與Supervisor進程28
2.1.8流分組(Streamgrouping)28
2.1.9工作進程(Worker)28
2.1.10任務(Task)28
2.1.11執行器(Executor)28
2.1.12可靠性(Reliability)29
2.2Storm的配置29
2.2.1Storm的配置類型29
2.2.2defaults.yaml檔案30
2.2.3storm.yaml檔案33
2.2.4Config類34
2.3序列化(Serialization)35
2.3.1動態類型36
2.3.2自定義序列化36
2.3.3Java序列化37
2.3.4特定組件序列化註冊37
2.4容錯機制37
2.4.1Worker進程死亡37
2.4.2節點死亡38
2.4.3Nimbus或者Supervisor守護進程死亡38
2.4.4Nimbus是否是“單點故障”38
2.5可靠性機制——保證訊息處理38
2.5.1訊息被“完全處理”的含義38
2.5.2如果一個訊息被完全處理或完全處理失敗會發生什麼39
2.5.3Storm如何保證可靠性40
2.5.4Storm如何實現可靠性43
2.5.5調節可靠性44
2.6訊息傳輸機制45
2.6.1ZeroMQ45
2.6.2Netty45
2.6.3自定義訊息通信機制45
2.7Storm的開發環境與生產環境46
2.7.1開發環境與本地模式46
2.7.2生產環境與遠程模式46
2.7.3開發環境與生產環境的對比47
2.8Storm拓撲的並行度(parallelism)48
2.8.1工作進程、執行器和任務48
2.8.2配置拓撲的並行度49
2.8.3拓撲示例50
2.8.4如何改變運行中拓撲的並行度51
2.9Storm命令行客戶端52
2.10Javadoc文檔56
2.11本章小結56
第3章拓撲詳解
3.1什麼是拓撲57
3.2TopologyBuilder57
3.3流分組59
3.3.1什麼是流分組59
3.3.2不同的流分組方式60
3.4一個簡單的拓撲64
3.5在本地模式下運行拓撲67
3.6在生產集群上運行拓撲68
3.6.1常見的配置70
3.6.2殺死拓撲70
3.6.3更新運行中的拓撲71
3.6.4監控拓撲71
3.7拓撲的常見模式71
3.7.1流連線(StreamJoin)71
3.7.2批處理(Batching)72
3.7.3BasicBolt72
3.7.4記憶體中快取與欄位的組合72
3.7.5流的topN72
3.7.6高效保存最近更新快取對象的TimeCacheMap(已棄用)74
3.7.7分散式RPC的CoordinatedBolt與KeyedFairBolt75
3.8本地模式與StormSubmitter的對比75
3.9多語言協定(Multi-LanguageProtocol)77
3.10使用非JVM語言操作Storm81
3.10.1支持的非Java語言81
3.10.2對Storm使用非Java語言81
3.10.3實現非JavaDSL的筆記82
3.11Hook82
3.12本章小結83
第4章組件詳解
4.1基本接口84
4.1.1IComponent接口84
4.1.2ISpout接口85
4.1.3IBolt接口86
4.1.4IRichSpout與IRichBolt接口88
4.1.5IBasicBolt接口88
4.1.6IStateSpout與IRichStateSpout接口89
4.2基本抽象類90
4.2.1BaseComponent抽象類90
4.2.2BaseRichSpout抽象類90
4.2.3BaseRichBolt抽象類91
4.2.4BaseBasicBolt抽象類92
4.3事務接口92
4.3.1IPartitionedTransactionalSpout92
4.3.2IOpaquePartitionedTransactionalSpout94
4.3.3ITransactionalSpout95
4.3.4ICommitterTransactionalSpout96
4.3.5IBatchBolt97
4.4組件之間的相互關係97
4.5本章小結98
第5章Spout詳解
5.1可靠的與不可靠的訊息99
5.2Spout獲取數據的方式102
5.2.1直接連線(DirectConnection)102
5.2.2訊息佇列(EnqueuedMessages)103
5.2.3DRPC(分散式RPC)104
5.3常用的Spout104
5.3.1Kestrel作為Spout的數據源104
5.3.2AMQP作為Spout的數據源104
5.3.3JMS作為Spout的數據源105
5.3.4Redis作為Spout的數據源105
5.3.5beanstalkd作為Spout的數據源105
5.4學習編寫Spout類105
5.5本章小結106
第6章Bolt詳解
6.1Bolt概述107
6.2可靠的與不可靠的Bolt108
6.2.1使用Anchoring機制實現可靠的Bolt108
6.2.2使用IBasicBolt接口實現自動確認109
6.3複合流與複合Anchoring110
6.3.1複合流110
6.3.2複合Anchoring110
6.4使用其他語言定義Bolt111
6.5學習編寫Bolt類111
6.5.1可靠的Bolt111
6.5.2不可靠的Bolt112
6.6本章小結113
第7章ZooKeeper詳解
7.1ZooKeeper簡介114
7.2ZooKeeper的下載和部署114
7.2.1ZooKeeper的下載114
7.2.2ZooKeeper的部署115
7.3ZooKeeper的配置117
7.4ZooKeeper的運行119
7.5ZooKeeper的本地模式實例120
7.6ZooKeeper的數據模型121
7.6.1ZNode122
7.6.2ZooKeeper中的時間123
7.6.3ZooKeeper的Stat結構123
7.7ZooKeeper的命令行操作範例124
7.8Storm在ZooKeeper中的目錄結構127
7.9本章小結128
第8章基礎軟體的安裝與使用
8.1Linux的基本操作129
8.1.1環境變數129
8.1.2常用命令130
8.2JDK的下載與配置134
8.2.1SunJDK的下載134
8.2.2在Linux下安裝JDK135
8.2.3在Windows下安裝JDK136
8.3GitHub託管項目的下載141
8.4Maven的下載與配置143
8.4.1Maven的下載143
8.4.2在Linux下部署Maven144
8.4.3在Windows下部署Maven145
8.5其他軟體——Notepad++146
8.6本章小結147
第9章Storm的安裝與配置
9.1Storm集群的安裝步驟與準備工作148
9.1.1搭建ZooKeeper集群148
9.1.2安裝Storm的本地依賴148
9.1.3下載並解壓Storm發行版本151
9.1.4配置storm.yaml檔案153
9.1.5啟動Storm的守護進程154
9.2本地模式的Storm完整的配置命令157
9.3本章小結159
第10章Storm集群搭建實踐
10.1準備工作160
10.1.1概述160
10.1.2配置hosts檔案161
10.1.3配置靜態IP161
10.1.4集群SSH無密碼163
10.1.5修改主機名164
10.1.6關閉防火牆164
10.1.7同步時間164
10.1.8安裝JDK165
10.2ZooKeeper集群的搭建166
10.2.1部署第一個節點166
10.2.2部署第i個節點167
10.2.3啟動ZooKeeper集群167
10.2.4查看ZooKeeper狀態168
10.2.5關閉ZooKeeper集群168
10.2.6清理ZooKeeper集群168
10.3Storm集群的搭建168
10.3.1安裝Storm依賴(每個Storm節點)168
10.3.2部署第一個節點169
10.3.3部署第i個節點171
10.3.4啟動Storm守護進程171
10.4本章小結172
第 11 章 準備Storm的開發環境
11.1 Storm的開發環境 173
11.1.1 什麼是Storm的開發環境 173
11.1.2 如何管理Storm 173
11.1.3 如何提交拓撲到集群 176
11.2 Eclipse的下載與配置 176
11.2.1 Eclipse的下載 176
11.2.2 Eclipse的配置與運行 177
11.2.3 Eclipse外掛程式的安裝 178
11.3 使用Maven管理項目 180
11.3.1 Maven的下載與配置 180
11.3.2 配置pom.xml檔案 180
11.3.3 運行Maven命令 182
11.4 使用Nexus搭建本地Maven私服 183
11.4.1 下載Nexus 183
11.4.2 運行Nexus 184
11.4.3 登錄Nexus後台 184
11.4.4 配置Repositories 185
11.4.5 配置setting.xml檔案 187
11.4.6 修改Eclipse的Maven外掛程式的配置 189
11.5 使用SVN管理代碼版本 189
11.5.1 在Windows下搭建SVN伺服器 189
11.5.2 在Linux下搭建SVN伺服器 191
11.5.3 安裝SVN客戶端 191
11.6 部署單節點的Storm集群 192
11.6.1 部署偽分布的ZooKeeper 192
11.6.2 部署偽分布的Storm集群 192
11.7 本章小結 194
第 12 章 開發自己的Storm套用
12.1 新建Maven項目 195
12.2 修改為適合Storm開發的項目 198
12.2.1 對包名進行分類管理 198
12.2.2 修改pom.xml檔案 199
12.3 編寫代碼 201
12.3.1 編寫Spout類 201
12.3.2 編寫Bolt類 202
12.3.3 編寫Topology類 203
12.4 本地測試運行 204
12.5 提交到Storm集群運行 205
12.5.1 使用Maven打包 205
12.5.2 提交jar包到集群 205
12.6 本章小結 206
第 13 章 storm-starter詳解
13.1 storm-starter項目概述 207
13.2 storm-starter的下載 209
13.3 使用Maven進行管理 211
13.3.1 使用Maven打包storm-starter 211
13.3.2 使用Maven直接運行ExclamationTopology 211
13.3.3 使用Maven運行單元測試 211
13.4 在Eclipse中運行 212
13.4.1 新建Maven項目的方式 212
13.4.2 導入已存在的項目的方式 214
13.5 storm-starter的入門例子 214
13.5.1 ExclamationTopology 214
13.5.2 WordCountTopology 216
13.5.3 ReachTopology 219
13.6 storm-starter的其他例子 225
13.6.1 BasicDRPCTopology 225
13.6.2 ManualDRPC 226
13.6.3 PrintSampleStream 226
13.6.4 RollingTopWords 227
13.6.5 SkewedRollingTopWords 228
13.6.6 SingleJoinExample 229
13.6.7 TransactionalGlobalCount 230
13.6.8 TransactionalWords 230
13.6.9 WordCountTopologyNode 231
13.7 本章小結 232
第14章研發與集群管理技巧
14.1使用daemontools監控Storm進程233
14.1.1daemontools簡介233
14.1.2安裝daemontools234
14.1.3編寫監控腳本234
14.2使用Monit監控Storm236
14.2.1Monit簡介236
14.2.2安裝Monit237
14.2.3配置Monit238
14.2.4啟動Monit240
14.2.5獲取Monit幫助信息241
14.3常用的集群操作命令242
14.4使用Storm的經驗與建議243
14.5本章小結244
第15章DRPC詳解
15.1概述245
15.2DRPCTopologyBuilder246
15.2.1LinearDRPCTopologyBuilder246
15.2.2LinearDRPCTopologyBuilder提供的方法246
15.2.3LinearDRPCTopologyBuilder使用範例248
15.2.4LinearDRPCTopologyBuilder的工作原理249
15.2.5LinearDRPCTopologyBuilder目前已棄用249
15.3本地模式的DRPC249
15.4遠程模式的DRPC250
15.5一個複雜的DRPC例子(計算reach值)250
15.6非線性DRPC253
15.7本章小結253
第16章事務拓撲詳解
16.1什麼是事務拓撲254
16.1.1設計1254
16.1.2設計2255
16.1.3設計3(Storm的設計)256
16.2事務拓撲的設計細節256
16.3事務拓撲的實現細節257
16.3.1事務Spout的工作原理257
16.3.2“對於給定的事務id不能發射相同的Batch”的處理258
16.3.3更多的細節260
16.4事務拓撲API260
16.4.1Bolt260
16.4.2事務Spout261
16.4.3配置262
16.5TransactionalTopologyBuilder262
16.5.1TransactionalTopologyBuilder提供的方法262
16.5.2TransactionalTopologyBuilder類已棄用266
16.6一個簡單的例子266
16.7本章小結269
第17章Trident詳解
17.1Trident概述270
17.1.1簡單的例子——單詞統計(TridentWordCount)270
17.1.2另一個例子——計算Reach值(TridentReach)274
17.1.3欄位和元組275
17.1.4狀態(State)276
17.1.5Trident拓撲的執行277
17.2TridentAPI279
17.2.1概述279
17.2.2本地分區操作279
17.2.3重新分區操作283
17.2.4聚合操作284
17.2.5流分組操作284
17.2.6合併與連線285
17.3Trident的狀態285
17.3.1Trident狀態分類286
17.3.2事務Spout(TransactionalSpout)286
17.3.3不透明事務Spout(OpaqueTransactionalSpout)288
17.3.4非事務Spout(Non-transactionalSpout)289
17.3.5Spout與State之間的聯繫289
17.3.6StateAPI290
17.3.7persistentAggregate方法294
17.3.8實現MapStates294
17.4TridentSpout295
17.4.1流水線(Pipelining)296
17.4.2TridentSpout的類型296
17.5本章小結296
第 18 章 Storm的內部實現
18.1 檔案系統分析 297
18.2 數據目錄結構 298
18.2.1 Nimbus節點的目錄結構 299
18.2.2 Supervisor節點的目錄結構 299
18.3 代碼庫的結構 300
18.3.1 storm.thrift 301
18.3.2 Java接口 316
18.3.3 實現 316
18.4 拓撲的生命周期 318
18.4.1 啟動拓撲 319
18.4.2 監控拓撲 321
18.4.3 殺死拓撲 321
18.5 Acking框架的實現 322
18.5.1 異或計算的基本原理 322
18.5.2 Acking框架的實現原理 322
18.5.3 Acker的execute方法 323
18.5.4 待定元組(pending tuple)和RotatingMap 323
18.6 Metric 324
18.7 本章小結 329
第 19 章 Storm相關的其他項目
19.1 JStorm項目 330
19.1.1 項目簡介 330
19.1.2 下載與部署 331
19.1.3 原始碼編譯 332
19.2 storm-deploy項目 332
19.3 Storm與Kafka 333
19.3.1 Kafka簡介 333
19.3.2 Kafka的安裝 333
19.3.3 啟動服務 334
19.3.4 測試運行 335
19.3.5 Storm與Kafka的項目 337
19.4 storm-kestrel項目 338
19.4.1 storm-kestrel項目簡介 338
19.4.2 使用storm-kestrel項目 338
19.4.3 Kestrel伺服器和佇列 339
19.4.4 添加元素到kestrel 339
19.4.5 從Kestrel中移除元素 340
19.4.6 持續添加元素到Kestrel 341
19.4.7 使用KestrelSpout 342
19.4.8 執行 342
19.5 本章小結 343
第 20 章 企業套用案例
20.1 Storm席捲眾多網際網路企業 344
20.1.1 Storm的典型套用場景 344
20.1.2 Storm的三大基本套用 345
20.2 Storm在Twitter中的套用 345
20.2.1 Twitter公司簡介 345
20.2.2 Storm幫助Twitter提升產品性能 346
20.2.3 MapR在Twitter中的套用簡介 346
20.3 Storm在阿里巴巴集團的套用 348
20.3.1 阿里巴巴集團簡介 348
20.3.2 Storm在阿里巴巴的套用 348
20.3.3 Storm在淘寶公司的套用 350
20.3.4 Storm在支付寶公司的套用 350
20.4 其他套用Storm的知名企業和項目 351
20.5 本章小結 367
參考資料 368

相關詞條

熱門詞條

聯絡我們