第1章 分布式单词计数 1
1.1 Storm topology的组成部分——stream、spout和bolt 1
1.1.1 stream 2
1.1.2 spout 2
1.1.3 bolt 2
1.2 单词计数topology的数据流 3
1.2.1 语句生成spout 3
1.2.2 语句分割bolt 3
1.2.3 单词计数bolt 4
1.2.4 上报bolt 4
1.3 实现单词计数topology 4
1.3.1 配置开发环境 4
1.3.2 实现SentenceSpout 5
1.3.3 实现语句分割bolt 6
1.3.4 实现单词计数bolt 7
1.3.5 实现上报bolt 8
1.3.6 实现单词计数topology 10
1.4 Storm的并发机制 12
1.4.1 WordCountTopology的并发机制 13
1.4.2 给topology增加worker 14
1.4.3 配置executor和task 14
1.5 理解数据流分组 17
1.6 有保障机制的数据处理 20
1.6.1 spout的可靠性 20
1.6.2 bolt的可靠性 21
1.6.3 可靠的单词计数 22
总结 23
第2章 配置Storm集群 24
2.1 Storm集群的框架 24
2.1.1 理解nimbus守护进程 25
2.1.2 supervisor守护进程的工作方式 26
2.1.3 Apache ZooKeeper简介 26
2.1.4 Storm的DRPC服务工作机制 27
2.1.5 Storm UI 27
2.2 Storm技术栈简介 28
2.2.1 Java和Clojure 28
2.2.2 Python 29
2.3 在Linux上安装Storm 29
2.3.1 安装基础操作系统 30
2.3.2 安装Java 30
2.3.3 安装ZooKeeper 30
2.3.4 安装Storm 30
2.3.5 运行Storm守护进程 31
2.3.6 配置Storm 33
2.3.7 必需的配置项 34
2.3.8 可选配置项 35
2.3.9 Storm可执行程序 36
2.3.10 在工作站上安装Storm可执行程序 36
2.3.11 守护进程命令 37
2.3.12 管理命令 37
2.3.13 本地调试/开发命令 39
2.4 把toplogy提交到集群中 40
2.5 自动化集群配置 42
2.6 Puppet的快速入门 43
2.6.1 Puppet manifest文件 43
2.6.2 Puppet类和模块 44
2.6.3 Puppet模板 45
2.6.4 使用Puppet Hiera来管理环境 46
2.6.5 介绍Hiera 46
总结 48
第3章 Trident和传感器数据 49
3.1 使用场景 50
3.2 Trident topology 50
3.3 Trident spout 52
3.4 Trident运算 57
3.4.1 Trident filter 58
3.4.2 Trident function 59
3.5 Trident聚合器 63
3.5.1 CombinerAggregator 63
3.5.2 ReducerAggregator 63
3.5.3 Aggregator 64
3.6 Trident状态 65
3.6.1 重复事务型状态 69
3.6.2 不透明型状态 70
3.7 执行topology 72
总结 73
第4章 实时趋势分析 74
4.1 应用场景 75
4.2 体系结构 75
4.2.1 数据源应用程序 75
4.2.2 logback Kafka appender 76
4.2.3 Apache Kafka 76
4.2.4 Kafka spout 76
4.2.5 XMPP服务器 76
4.3 安装需要的软件 77
4.3.1 安装Kafka 77
4.3.2 安装OpenFire 78
4.4 示例程序 78
4.5 日志分析topology 84
4.5.1 Kafka spout 84
4.5.2 JSON project function 85
4.5.3 计算移动平均值 86
4.5.4 添加一个滑动窗口 87
4.5.5 实现滑动平均function 91
4.5.6 按照阈值进行过滤 92
4.5.7 通过XMPP发送通知 94
4.6 最终的topology 96
4.7 运行日志分析topology 98
总结 99
第5章 实时图形分析 100
5.1 使用场景 101
5.2 体系结构 102
5.2.1 Twitter客户端 102
5.2.2 Kafka spout 102
5.2.3 Titan分布式图形数据库 103
5.3 图形数据库简介 103
5.3.1 访问图——TinkerPop栈 104
5.3.2 使用Blueprints API操作图形 105
5.3.3 通过Gremlin shell操作图形 106
5.4 软件安装 107
5.5 使用Cassandra存储后端设置Titan 109
5.5.1 安装Cassandra 109
5.5.2 使用Cassandra后端启动Titan 109
5.6 图数据模型 110
5.7 连接Twitter数据流 111
5.7.1 安装Twitter4J客户端 112
5.7.2 OAuth配置 112
5.7.3 TwitterStreamConsumer类 112
5.7.4 TwitterStatusListener类 113
5.8 Twitter graph topology 115
5.9 实现GraphState 116
5.9.1 GraphFactory 117
5.9.2 GraphTupleProcessor 117
5.9.3 GraphStateFactory 117
5.9.4 GraphState 118
5.9.5 GraphUpdater 119
5.10 实现GraphFactory 119
5.11 实现GraphTupleProcessor 120
5.12 组合成TwitterGraph Topology类 121
5.13 使用Gremlin查询图 122
总结 123
第6章 人工智能 124
6.1 为应用场景进行设计 125
6.2 确立体系结构 128
6.2.1 审视设计中的挑战 128
6.2.2 实现递归 128
6.2.3 解决这些挑战 132
6.3 实现体系结构 133
6.3.1 数据模型 133
6.3.2 检视Recursive Topology 136
6.3.3 队列交互 138
6.3.4 function和filter 140
6.3.5 研究Scoring Topology 141
6.3.6 分布式远程命令调用(DRPC) 146
总结 152
第7章 整合Druid进行金融分析 153
7.1 使用场景 154
7.2 集成一个非事务系统 155
7.3 topology 158
7.3.1 spout 159
7.3.2 filter 161
7.3.3 状态设计 162
7.4 实现体系结构 165
7.4.1 DruidState 166
7.4.2 实现StormFirehose对象 169
7.4.3 在ZooKeeper中实现分片状态 174
7.5 执行实现的程序 175
7.6 检视分析过程 176
总结 179
第8章 自然语言处理 180
8.1 Motivating Lambda结构 181
8.2 研究使用场景 183
8.3 实现Lambda architecture 184
8.4 为应用场景设计topology 185
8.5 设计的实现 186
8.5.1 TwitterSpout/TweetEmitter 187
8.5.2 function 188
8.6 检视分析逻辑 191
8.7 Hadoop 196
8.7.1 MapReduce概览 196
8.7.2 Druid安装 197
总结 204
第9章 在Hadoop上部署Storm进行广告分析 205
9.1 应用场景 205
9.2 确定体系结构 206
9.2.1 HDFS简介 208
9.2.2 YARN简介 208
9.3 配置基础设施 211
9.3.1 Hadoop基础设施 211
9.3.2 配置HDFS 212
9.4 部署分析程序 217
9.4.1 以Pig为基础执行批处理分析 217
9.4.2 在Storm-YARN基础上执行实时分析 218
9.5 执行分析 223
9.5.1 执行批处理分析 223
9.5.2 执行实时分析 224
9.6 部署topology 229
9.7 执行toplogy 229
总结 230
第10章 云环境下的Storm 231
10.1 Amazon Elastic Compute Cloud简介 232
10.1.1 建立AWS帐号 232
10.1.2 AWS管理终端 232
10.1.3 手工启动一个EC2实例 234
10.2 Apache Whirr简介 236
10.3 使用Whirr配置Storm集群 237
10.4 Whirr Storm简介 239
10.5 Vagrant简介 243
10.5.1 安装Vagrant 243
10.5.2 创建第一个虚拟机 244
10.6 生成Storm安装准备脚本 247
10.6.1 ZooKeeper 247
10.6.2 Storm 248
10.6.3 Supervisord 249
总结 252