书刊介绍
《从零开始学Storm(第2版)》内容简介
本书由基础知识、安装与部署、研发与维护、进阶知识、企业应用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.2、Storm的诞生
1.2.1、从Twitter说起
1.2.2、Twitter需要处理大批实时性要求高的大数据业务
1.2.3、Storm帮助Twitter解决实时海量大数据处理问题
1.3、Storm的成长
1.3.1、Storm正式开源
1.3.2、Apache接管并孵化Storm
1.3.3、Storm的核心技术和基本组成
1.3.4、Storm的项目小组
1.3.5、Storm的技术支持网站
1.4、Storm的优势
1.4.1、集成多种技术
1.4.2、简单的API
1.4.3、可扩展的
1.4.4、容错的
1.4.5、保证数据处理
1.4.6、可以使用任何语言
1.4.7、部署和操作简单
1.4.8、自由开源
1.5、Storm的应用现状和发展趋势
1.5.1、应用现状
1.5.2、发展趋势
1.6、如何学习Storm
1.7、本书的章节安排及学习建议
1.7.1、本书的章节安排
1.7.2、关于如何阅读本书的建议
1.8、本章小结
第2章:Storm的基本知识
2.1、概念
2.1.1、元组(Tuple)
2.1.2、流(Stream)
2.1.3、龙卷(Spout)
2.1.4、闪电(Bolt)
2.1.5、拓扑(Topology)
2.1.6、主控节点与工作节点
2.1.7、Nimbus进程与Supervisor进程
2.1.8、流分组(Stream
grouping)
2.1.9、工作进程(Worker)
2.1.10、任务(Task)
2.1.11、执行器(Executor)
2.1.12、可靠性(Reliability)
2.2、Storm的配置
2.2.1、Storm的配置类型
2.2.2、defaults.yaml文件
2.2.3、storm.yaml文件
2.2.4、Config类
2.3、序列化(Serialization)
2.3.1、动态类型
2.3.2、自定义序列化
2.3.3、Java序列化
注
意
2.3.4、特定组件序列化注册
2.4、容错机制
2.4.1、Worker进程死亡
2.4.2、节点死亡
2.4.3、Nimbus或者Supervisor守护进程死亡
2.4.4、Nimbus是否是“单点故障”
2.5、可靠性机制——保证消息处理
2.5.1、消息被“完全处理”的含义
2.5.2、如果一个消息被完全处理或完全处理失败会发生什么
2.5.3、Storm如何保证可靠性
2.5.4、Storm如何实现可靠性
2.5.5、调节可靠性
2.6、消息传输机制
2.6.1、ZeroMQ
2.6.2、Netty
2.6.3、自定义消息通信机制
2.7、Storm的开发环境与生产环境
2.7.1、开发环境与本地模式
2.7.2、生产环境与远程模式
2.7.3、开发环境与生产环境的对比
2.8、Storm拓扑的并行度(parallelism)
2.8.1、工作进程、执行器和任务
2.8.2、配置拓扑的并行度
注
意
2.8.3、拓扑示例
2.8.4、如何改变运行中拓扑的并行度
2.9、Storm命令行客户端
2.10、Javadoc文档
2.11、本章小结
第3章:拓扑详解
3.1、什么是拓扑
3.2、TopologyBuilder
3.3、流分组
3.3.1、什么是流分组
3.3.2、不同的流分组方式
3.4、一个简单的拓扑
3.5、在本地模式下运行拓扑
3.6、在生产集群上运行拓扑
3.6.1、常见的配置
3.6.2、杀死拓扑
3.6.3、更新运行中的拓扑
3.6.4、监控拓扑
3.7、拓扑的常见模式
3.7.1、流连接(Stream
Join)
3.7.2、批处理(Batching)
3.7.3、BasicBolt
3.7.4、内存中缓存与字段的组合
3.7.5、流的top
N
3.7.6、高效保存最近更新缓存对象的TimeCacheMap(已弃用)
3.7.7、分布式RPC的CoordinatedBolt与KeyedFairBolt
3.8、本地模式与StormSubmitter的对比
3.9、多语言协议(Multi-Language
Protocol)
3.10、使用非JVM语言操作Storm
3.10.1、支持的非Java语言
3.10.2、对Storm使用非Java语言
3.10.3、实现非Java
DSL的笔记
3.11、Hook
3.12、本章小结
第4章:组件详解
4.1、基本接口
4.1.1、IComponent接口
4.1.2、ISpout接口
4.1.3、IBolt接口
4.1.4、IRichSpout与IRichBolt接口
4.1.5、IBasicBolt接口
4.1.6、IStateSpout与IRichStateSpout接口
4.2、基本抽象类
4.2.1、BaseComponent抽象类
4.2.2、BaseRichSpout抽象类
4.2.3、BaseRichBolt抽象类
4.2.4、BaseBasicBolt抽象类
4.3、事务接口
4.3.1、IPartitionedTransactionalSpout
4.3.2、IOpaquePartitionedTransactionalSpout
4.3.3、ITransactionalSpout
4.3.4、ICommitterTransactionalSpout
4.3.5、IBatchBolt
4.4、组件之间的相互关系
4.5、本章小结
第5章:Spout详解
5.1、可靠的与不可靠的消息
5.2、Spout获取数据的方式
5.2.1、直接连接(Direct
Connection)
5.2.2、消息队列(Enqueued
Messages)
5.2.3、DRPC(分布式RPC)
5.3、常用的Spout
5.3.1、Kestrel作为Spout的数据源
5.3.2、AMQP作为Spout的数据源
5.3.3、JMS作为Spout的数据源
5.3.4、Redis作为Spout的数据源
5.3.5、beanstalkd作为Spout的数据源
5.4、学习编写Spout类
5.5、本章小结
第6章:Bolt详解
6.1、Bolt概述
6.2、可靠的与不可靠的Bolt
6.2.1、使用Anchoring机制实现可靠的Bolt
6.2.2、使用IBasicBolt接口实现自动确认
6.3、复合流与复合Anchoring
6.3.1、复合流
6.3.2、复合Anchoring
6.4、使用其他语言定义Bolt
6.5、学习编写Bolt类
6.5.1、可靠的Bolt
6.5.2、不可靠的Bolt
6.6、本章小结
第7章:ZooKeeper详解
7.1、ZooKeeper简介
7.2、ZooKeeper的下载和部署
7.2.1、ZooKeeper的下载
7.2.2、ZooKeeper的部署
7.3、ZooKeeper的配置
注
意
7.4、ZooKeeper的运行
7.5、ZooKeeper的本地模式实例
7.6、ZooKeeper的数据模型
7.6.1、ZNode
注
意
7.6.2、ZooKeeper中的时间
7.6.3、ZooKeeper的Stat结构
7.7、ZooKeeper的命令行操作范例
7.8、Storm在ZooKeeper中的目录结构
7.9、本章小结
第8章:基础软件的安装与使用
8.1、Linux的基本操作
8.1.1、环境变量
注
意
8.1.2、常用命令
注
意
注
意
8.2、JDK的下载与配置
8.2.1、Sun
JDK的下载
注
意
8.2.2、在Linux下安装JDK
注
意
8.2.3、在Windows下安装JDK
注
意
8.3、GitHub托管项目的下载
8.4、Maven的下载与配置
注
意
8.4.1、Maven的下载
8.4.2、在Linux下部署Maven
8.4.3、在Windows下部署Maven
注
意
8.5、其他软件——Notepad++
8.6、本章小结
第9章:Storm的安装与配置
9.1、Storm集群的安装步骤与准备工作
9.1.1、搭建ZooKeeper集群
9.1.2、安装Storm的本地依赖
注
意
注
意
注
意
注
意
9.1.3、下载并解压Storm发行版本
9.1.4、配置storm.yaml文件
9.1.5、启动Storm的守护进程
9.2、本地模式的Storm完整的配置命令
9.3、本章小结
第10章:Storm集群搭建实践
10.1、准备工作
10.1.1、概述
10.1.2、配置hosts文件
10.1.3、配置静态IP
10.1.4、集群SSH无密码
10.1.5、修改主机名
注
意
10.1.6、关闭防火墙
10.1.7、同步时间
10.1.8、安装JDK
10.2、ZooKeeper集群的搭建
10.2.1、部署第一个节点
10.2.2、部署第i个节点
10.2.3、启动ZooKeeper集群
10.2.4、查看ZooKeeper状态
10.2.5、关闭ZooKeeper集群
10.2.6、清理ZooKeeper集群
10.3、Storm集群的搭建
10.3.1、安装Storm依赖(每个Storm节点)
10.3.2、部署第一个节点
10.3.3、部署第i个节点
10.3.4、启动Storm守护进程
10.4、本章小结
第11章:准备Storm的开发环境
11.1、Storm的开发环境
11.1.1、什么是Storm的开发环境
11.1.2、如何管理Storm
11.1.3、如何提交拓扑到集群
11.2、Eclipse的下载与配置
11.2.1、Eclipse的下载
注
意
11.2.2、Eclipse的配置与运行
11.2.3、Eclipse插件的安装
注
意
11.3、使用Maven管理项目
11.3.1、Maven的下载与配置
11.3.2、配置pom.xml文件
11.3.3、运行Maven命令
11.4、使用Nexus搭建本地Maven私服
11.4.1、下载Nexus
11.4.2、运行Nexus
11.4.3、登录Nexus后台
11.4.4、配置Repositories
11.4.5、配置setting.xml文件
11.4.6、修改Eclipse的Maven插件的配置
11.5、使用SVN管理代码版本
11.5.1、在Windows下搭建SVN服务器
11.5.2、在Linux下搭建SVN服务器
11.5.3、安装SVN客户端
11.6、部署单节点的Storm集群
11.6.1、部署伪分布的ZooKeeper
11.6.2、部署伪分布的Storm集群
11.7、本章小结
第12章:开发自己的Storm应用
12.1、新建Maven项目
12.2、修改为适合Storm开发的项目
12.2.1、对包名进行分类管理
12.2.2、修改pom.xml文件
12.3、编写代码
12.3.1、编写Spout类
12.3.2、编写Bolt类
12.3.3、编写Topology类
12.4、本地测试运行
12.5、提交到Storm集群运行
12.5.1、使用Maven打包
12.5.2、提交jar包到集群
12.6、本章小结
第13章:storm-starter详解
13.1、storm-starter项目概述
13.2、storm-starter的下载
注
意
13.3、使用Maven进行管理
13.3.1、使用Maven打包storm-starter
13.3.2、使用Maven直接运行ExclamationTopology
注
意
13.3.3、使用Maven运行单元测试
13.4、在Eclipse中运行
13.4.1、新建Maven项目的方式
13.4.2、导入已存在的项目的方式
13.5、storm-starter的入门例子
13.5.1、ExclamationTopology
13.5.2、WordCountTopology
13.5.3、ReachTopology
13.6、storm-starter的其他例子
13.6.1、BasicDRPCTopology
13.6.2、ManualDRPC
13.6.3、PrintSampleStream
13.6.4、RollingTopWords
13.6.5、SkewedRollingTopWords
13.6.6、SingleJoinExample
13.6.7、TransactionalGlobalCount
13.6.8、TransactionalWords
13.6.9、WordCountTopologyNode
13.7、本章小结
第14章:研发与集群管理技巧
14.1、使用daemontools监控Storm进程
14.1.1、daemontools简介
14.1.2、安装daemontools
14.1.3、编写监控脚本
14.2、使用Monit监控Storm
14.2.1、Monit简介
14.2.2、安装Monit
14.2.3、配置Monit
14.2.4、启动Monit
14.2.5、获取Monit帮助信息
14.3、常用的集群操作命令
14.4、使用Storm的经验与建议
14.5、本章小结
第15章:DRPC详解
15.1、概述
15.2、DRPCTopologyBuilder
15.2.1、LinearDRPCTopologyBuilder
15.2.2、LinearDRPCTopologyBuilder提供的方法
15.2.3、LinearDRPCTopologyBuilder使用范例
15.2.4、LinearDRPCTopologyBuilder的工作原理
15.2.5、LinearDRPCTopologyBuilder目前已弃用
15.3、本地模式的DRPC
15.4、远程模式的DRPC
15.5、一个复杂的DRPC例子(计算reach值)
15.6、非线性DRPC
注
意
15.7、本章小结
第16章:事务拓扑详解
16.1、什么是事务拓扑
16.1.1、设计1、16.1.2、设计2、16.1.3、设计3(Storm的设计)
16.2、事务拓扑的设计细节
16.3、事务拓扑的实现细节
16.3.1、事务Spout的工作原理
16.3.2、“对于给定的事务id不能发射相同的Batch”的处理
16.3.3、更多的细节
16.4、事务拓扑API
16.4.1、Bolt
16.4.2、事务Spout
16.4.3、配置
16.5、TransactionalTopologyBuilder
16.5.1、TransactionalTopologyBuilder提供的方法
16.5.2、TransactionalTopologyBuilder类已弃用
16.6、一个简单的例子
16.7、本章小结
第17章:Trident详解
17.1、Trident概述
17.1.1、简单的例子——单词统计(TridentWordCount)
17.1.2、另一个例子——计算Reach值(TridentReach)
17.1.3、字段和元组
17.1.4、状态(State)
17.1.5、Trident拓扑的执行
17.2、Trident
API
17.2.1、概述
17.2.2、本地分区操作
17.2.3、重新分区操作
17.2.4、聚合操作
17.2.5、流分组操作
17.2.6、合并与连接
17.3、Trident的状态
17.3.1、Trident状态分类
17.3.2、事务Spout(Transactional
Spout)
17.3.3、不透明事务Spout(Opaque
Transactional
Spout)
17.3.4、非事务Spout(Non-transactional
Spout)
17.3.5、Spout与State之间的联系
17.3.6、State
API
17.3.7、persistentAggregate方法
17.3.8、实现
MapStates
17.4、Trident
Spout
17.4.1、流水线(Pipelining)
17.4.2、Trident
Spout的类型
17.5、本章小结
第18章:Storm的内部实现
18.1、文件系统分析
18.2、数据目录结构
18.2.1、Nimbus节点的目录结构
18.2.2、Supervisor节点的目录结构
18.3、代码库的结构
18.3.1、storm.thrift
18.3.2、Java接口
18.3.3、实现
18.4、拓扑的生命周期
18.4.1、启动拓扑
18.4.2、监控拓扑
18.4.3、杀死拓扑
18.5、Acking框架的实现
18.5.1、异或计算的基本原理
18.5.2、Acking框架的实现原理
18.5.3、Acker的execute方法
18.5.4、待定元组(pending
tuple)和RotatingMap
18.6、Metric
18.7、本章小结
第19章:Storm相关的其他项目
19.1、JStorm项目
19.1.1、项目简介
19.1.2、下载与部署
19.1.3、源代码编译
19.2、storm-deploy项目
19.3、Storm与Kafka
19.3.1、Kafka简介
19.3.2、Kafka的安装
19.3.3、启动服务
19.3.4、测试运行
19.3.5、Storm与Kafka的项目
19.4、storm-kestrel项目
19.4.1、storm-kestrel项目简介
19.4.2、使用storm-kestrel项目
19.4.3、Kestrel服务器和队列
19.4.4、添加元素到kestrel
19.4.5、从Kestrel中移除元素
19.4.6、持续添加元素到Kestrel
19.4.7、使用KestrelSpout
19.4.8、执行
19.5、本章小结
第20章:企业应用案例
20.1、Storm席卷众多互联网企业
20.1.1、Storm的典型应用场景
20.1.2、Storm的三大基本应用
20.2、Storm在Twitter中的应用
20.2.1、Twitter公司简介
20.2.2、Storm帮助Twitter提升产品性能
20.2.3、MapR在Twitter中的应用简介
20.3、Storm在阿里巴巴集团的应用
20.3.1、阿里巴巴集团简介
20.3.2、Storm在阿里巴巴的应用
20.3.3、Storm在淘宝公司的应用
20.3.4、Storm在支付宝公司的应用
20.4、其他应用Storm的知名企业和项目
20.5、本章小结
参考资料