本书从大数据实时计算框架Spark的编程语言Scala入手,第1~4章重点介绍函数式编程语言Scala的基础语法、面向对象编程以及函数式编程等,再通过编程训练案例介绍Scala这门语言的实际开发应用,为读者后面学习Spark框架打下牢固的编程基础。第5~10章重点介绍Spark的安装部署、SparkCore编程、Spark SQL结构化数据处理以及Spark Streaming实时数据处理等,对它们进行详细的剖析和解读。最后,在第11章中通过网站运营指标统计和IP经纬度热力图分析两个实战开发项目,让读者充分掌握Spark大数据实时计算框架技术的应用与实操方法。
本书适合所有对大数据技术感兴趣的读者。
1.贴近实战场景
深度剖析企业级实时运营指标项目案例,快速掌握实战开发经验。
2.掌握实战技术
详细解读Scala 函数式编程,SparkCore、Spark SQL、Spark Streaming 关键原理。
3.附赠丰富资源
随书附赠实例源代码、ppt和数据资源,方便读者学习。
杨 力
曾任北大青鸟学术部经理兼教学总监、中信国安创客霸王课特聘讲师、兄弟连IT教育大数据讲师,致力于大数据技术的推广与普及,通过了Apache Hadoop、OCM等多项技术认证,在大中型企业的信息系统设计与实施方面有丰富的实践经验。
第 1章 Scala入门基础 1
1.1 Scala语言的特色 1
1.2 搭建Scala开发环境 3
1.2.1 安装JDK 3
1.2.2 安装Scala SDK 3
1.2.3 安装IDEA Scala插件 4
1.3 Scala解释器 7
1.3.1 启动Scala解释器 8
1.3.2 执行Scala代码 8
1.3.3 退出Scala解释器 8
1.4 Scala语法基础 8
1.4.1 定义变量 8
1.4.2 惰性赋值 9
1.4.3 字符串 10
1.4.4 数据类型与运算符 11
1.4.5 条件表达式 12
1.5 Scala控制结构和函数 14
1.5.1 for表达式 14
1.5.2 while循环 16
1.5.3 函数 16
1.5.4 方法和函数的区别 17
1.6 方法 18
1.6.1 定义方法 18
1.6.2 方法参数 18
1.6.3 方法调用方式 19
1.7 数组 20
1.7.1 定长数组 21
1.7.2 变长数组 21
1.7.3 遍历数组 22
1.8 元组和列表 23
1.8.1 元组 23
1.8.2 列表 24
1.8.3 Set集合 30
1.9 Map映射 32
1.9.1 不可变Map 32
1.9.2 可变Map 33
1.9.3 Map基本操作 33
1.10 函数式编程 35
1.10.1 遍历(foreach) 35
1.10.2 使用类型推断简化函数定义 36
1.10.3 使用下画线简化函数定义 36
1.10.4 映射(map) 36
1.10.5 扁平化映射(flatMap) 37
1.10.6 过滤(filter) 38
1.10.7 排序 38
1.10.8 分组(groupBy) 40
1.10.9 聚合(reduce) 40
1.10.10 折叠(fold) 41
1.11 本章总结 42
1.12 本章习题 42
第 2章 Scala面向对象编程 43
2.1 类与对象 43
2.2 定义和访问成员变量 44
2.3 使用下画线初始化成员变量 46
2.4 定义成员方法 47
2.5 访问修饰符 48
2.6 类的构造器 51
2.6.1 主构造器 51
2.6.2 辅助构造器 52
2.7 单例对象 53
2.7.1 定义单例对象 53
2.7.2 在单例对象中定义成员方法 54
2.7.3 工具类案例 54
2.8 main方法 55
2.8.1 定义main方法 55
2.8.2 实现App trait来定义入口 55
2.9 伴生对象 56
2.9.1 定义伴生对象 56
2.9.2 apply和unapply方法 57
2.10 继承 59
2.10.1 定义语法 60
2.10.2 类继承 60
2.10.3 单例对象继承 61
2.10.4 override和super 61
2.11 类型判断 62
2.11.1 isInstanceOf和asInstanceOf方法 62
2.11.2 getClass和classOf 63
2.12 抽象类 64
2.13 匿名内部类 65
2.14 特质 66
2.14.1 trait作为接口使用 66
2.14.2 trait中定义具体的字段和抽象字段 68
2.14.3 使用trait实现模板模式 69
2.14.4 对象混入trait 70
2.14.5 使用trait实现调用链模式 71
2.14.6 trait调用链 72
2.14.7 trait的构造机制 74
2.14.8 trait继承类 74
2.15 本章总结 75
2.16 本章习题 75
第3章 Scala编程高级应用 76
3.1 样例类 76
3.1.1 定义样例类 76
3.1.2 样例类方法 77
3.1.3 样例对象 78
3.2 模式匹配 79
3.2.1 简单匹配 79
3.2.2 守卫 80
3.2.3 匹配类型 80
3.2.4 匹配集合 81
3.2.5 变量声明中的模式匹配 82
3.2.6 匹配样例类 83
3.3 Option类型 83
3.4 偏函数 84
3.5 正则表达式 85
3.6 异常处理 86
3.6.1 捕获异常 86
3.6.2 抛出异常 87
3.7 提取器 88
3.8 泛型 89
3.8.1 定义泛型方法 90
3.8.2 定义泛型类 90
3.8.3 上下界 91
3.8.4 非变、协变和逆变 92
3.9 Actor 93
3.9.1 Java并发编程的问题 94
3.9.2 Actor并发编程模型 94
3.9.3 Java并发编程与Actor并发编程 95
3.10 Actor编程案例 95
3.10.1 创建Actor 95
3.10.2 发送消息/接收消息 96
3.10.3 持续接收消息 97
3.10.4 共享线程 99
3.10.5 发送和接收自定义消息 99
3.10.6 基于Actor实现WordCount案例 101
3.11 本章总结 103
3.12 本章习题 103
第4章 Scala函数式编程思想 104
4.1 作为值的函数 104
4.2 匿名函数 105
4.3 柯里化 105
4.4 闭包 106
4.5 隐式转换 107
4.6 隐式参数 109
4.7 Akka并发编程框架 109
4.7.1 Akka特性 110
4.7.2 Akka通信过程 110
4.7.3 创建ActorSystem 111
4.8 Akka编程入门案例 111
4.8.1 实现步骤 112
4.8.2 配置Maven模块依赖 112
4.9 Akka定时任务 114
4.10 实现两个进程之间的通信 116
4.11 本章总结 119
4.12 本章习题 119
第5章 Spark安装部署与入门 120
5.1 Spark简介 120
5.1.1 MapReduce与Spark 120
5.1.2 Spark组件 122
5.1.3 Spark生态系统 123
5.1.4 Spark架构 124
5.1.5 Spark运行部署模式 125
5.1.6 Spark远程过程调用协议 126
5.2 Spark环境搭建 126
5.2.1 本地模式部署 126
5.2.2 Standalone集群模式 128
5.2.3 Standalone-HA集群模式 130
5.2.4 YARN集群模式 132
5.2.5 Spark命令 137
5.3 编写Spark应用程序 139
5.3.1 Maven简介 140
5.3.2 安装Maven 140
5.3.3 Spark开发环境搭建 141
5.3.4 配置pom.xml文件 143
5.3.5 开发应用程序——本地运行 147
5.3.6 修改应用程序——集群运行 148
5.3.7 集群硬件配置说明 150
5.4 本章总结 152
5.5 本章习题 152
第6章 SparkCore编程 153
6.1 RDD概念与详解 153
6.1.1 RDD简介 153
6.1.2 RDD的主要属性 154
6.1.3 小结 156
6.2 RDD API应用程序 156
6.3 RDD的方法(算子)分类 157
6.3.1 Transformation算子 158
6.3.2 Action算子 160
6.4 基础练习 160
6.4.1 实现WordCount案例 161
6.4.2 创建RDD 162
6.4.3 map 163
6.4.4 filter 163
6.4.5 flatMap 164
6.4.6 sortBy 164
6.4.7 交集、并集、差集、笛卡尔积 165
6.4.8 groupByKey 165
6.4.9 groupBy 166
6.4.10 reduce 166
6.4.11 reduceByKey 166
6.4.12 repartition 167
6.4.13 count 167
6.4.14 top 168
6.4.15 take 168
6.4.16 first 168
6.4.17 keys、values 168
6.4.18 案例 169
6.5 实战案例 169
6.5.1 统计平均年龄 169
6.5.2 统计人口信息 171
6.5.3 在IDEA中实现WordCount案例 174
6.5.4 小结 176
6.6 RDD持久化缓存 176
6.7 持久化缓存API详解 177
6.7.1 persist方法和cache方法 177
6.7.2 存储级别 179
6.7.3 小结 181
6.8 RDD容错机制Checkpoint 181
6.8.1 代码演示 181
6.8.2 容错机制Checkpoint详解 182
6.9 本章总结 183
6.10 本章习题 183
第7章 SparkCore运行原理 184
7.1 RDD依赖关系 184
7.1.1 窄依赖与宽依赖 184
7.1.2 对比窄依赖与宽依赖 185
7.2 DAG的生成和划分阶段 186
7.2.1 DAG的生成 186
7.2.2 DAG划分阶段 186
7.2.3 小结 188
7.3 Spark原理初探 188
7.3.1 Spark相关的应用概念 189
7.3.2 Spark基本流程概述 191
7.3.3 流程图解 191
7.3.4 RDD在Spark中的运行过程 192
7.3.5 小结 193
7.4 RDD累加器和广播变量 193
7.4.1 累加器 194
7.4.2 广播变量 196
7.5 RDD的数据源 198
7.5.1 普通文本文件 198
7.5.2 Hadoop API 199
7.5.3 SequenceFile 200
7.5.4 对象文件 201
7.5.5 HBase 202
7.5.6 JDBC 204
7.6 本章总结 207
7.7 本章习题 207
第8章 Spark SQL结构化数据处理入门 208
8.1 数据分析方式 208
8.1.1 命令式 208
8.1.2 SQL式 209
8.2 Spark SQL的发展 210
8.3 数据分类和Spark SQL适用场景 211
8.3.1 结构化数据 211
8.3.2 半结构化数据 212
8.3.3 非结构化数据 213
8.4 Spark SQL特点 214
8.5 Spark SQL数据抽象 214
8.6 DataFrame简介 215
8.7 Dataset简介 215
8.8 RDD、DataFrame和Dataset的区别 216
8.9 Spark SQL初体验 218
8.9.1 SparkSession入口 218
8.9.2 创建DataFrame 219
8.9.3 创建Dataset 222
8.9.4 两种查询风格 224
8.10 本章总结 229
8.11 本章习题 229
第9章 Spark SQL结构化数据处理高级应用 230
9.1 使用IDEA开发Spark SQL 230
9.1.1 创建DataFrame和Dataset 231
9.1.2 花式查询 233
9.1.3 相互转换 235
9.1.4 Spark SQL词频统计实战 237
9.2 Spark SQL多数据源交互 240
9.3 Spark SQL自定义函数 242
9.3.1 自定义函数分类 242
9.3.2 UDF 243
9.3.3 UDAF 244
9.4 Spark on Hive 247
9.4.1 开启Hive的元数据库服务 247
9.4.2 Spark SQL整合Hive元数据库 248
9.4.3 使用Spark SQL操作Hive表 248
9.5 本章总结 249
9.6 本章习题 249
第 10章 Spark Streaming核心编程 250
10.1 场景需求 250
10.2 Spark Streaming概述 251
10.2.1 Spark Streaming的特点 252
10.2.2 Spark Streaming实时计算所处的位置 252
10.3 Spark Streaming原理 254
10.3.1 基本流程 255
10.3.2 数据模型 255
10.4 DStream相关的API 256
10.4.1 Transformation 257
10.4.2 Output 257
10.5 Spark Streaming原理总结 258
10.6 Spark Streaming实战 258
Spark Streaming第 一个案例WordCount 258
10.7 updateStateByKey算子 262
10.7.1 WordCount案例问题分析 262
10.7.2 代码实现 262
10.7.3 执行步骤 263
10.8 reduceByKeyAndWindow算子 264
10.8.1 图解reduceByKeyAndWindow算子 264
10.8.2 代码实现 264
10.8.3 执行步骤 266
10.9 统计一定时间内的热搜词 266
10.9.1 需求分析 266
10.9.2 代码实现 266
10.9.3 执行步骤 268
10.10 整合Kafka 268
10.10.1 Kafka基本概念 268
10.10.2 Kafka的特性 268
10.10.3 核心概念图解 269
10.10.4 Kafka集群部署 270
10.10.5 Kafka常用命令 275
10.10.6 Receiver接收方式 276
10.10.7 Direct直连方式 277
10.10.8 spark-streaming-kafka-0-8版本 277
10.10.9 spark-streaming-kafka-0-10版本 282
10.11 本章总结 285
10.12 本章习题 285
第 11章 Spark综合项目实战 286
11.1 网站运营指标统计项目 286
11.1.1 需求分析 286
11.1.2 数据分析 287
11.1.3 代码实现 287
11.2 热力图分析项目 289
11.2.1 需求分析 289
11.2.2 数据分析 289
11.2.3 项目开发 290
11.3 本章总结 300
11.4 本章习题 300