“大数据”近年成为IT领域的热点话题,人们每天都会通过互联网、移动设备等产生大量数据。如何管理大数据、掌握大数据的核心技术、理解大数据相关的生态系统等,是作为大数据开发者必须学习和熟练掌握的。本系列书以“大数据开发者”应掌握的技术为主线,共分两卷,以7个模块分别介绍如何管理大数据生态系统、如何存储和处理数据、如何利用Hadoop工具、如何利用NoSQL与Hadoop协同工作,以及如何利用Hadoop商业发行版和管理工具。本系列书涵盖了大数据开发工作的核心内容,全面且详尽地涵盖了大数据开发的各个领域。
本书为第1卷,共4个模块,分别介绍大数据基础知识、大数据生态系统的管理、HDFS和MapReduce以及Hadoop工具(如Hive、Pig和Oozie等)。本书适用于想成为大数据开发者以及所有对大数据开发感兴趣的技术人员和决策者阅读。
学习方法和特色
◆ 涵盖了大数据开发者所需的大数据和Hadoop 基础组件及相关组件的基本知识,使参与者有可能在一个系列书中获得对所有相关知识、新兴技术和平台的了解。
◆ 在与大数据架构、大数据应用程序开发以及与大数据实施相关的产业相关技术有着极密切关联的编程和技术领域中,锻炼自己全面的和结构化的本领。
◆ 基于场景的学习方法,通过多种有代表性的现实场景的使用和案例研究,将IT 基础知识融入现实环境,鼓励参与者积极、全面地学习和研究,实现体验式教学。
◆ 强调目标明确、基于成果的学习。每一讲都以“本讲目标”开始,该目标会进一步关联整个教程的更广泛的目标。
◆ 简明、循序渐进的编程和编码指导,清晰地解释每行代码的基本原理。
◆ 强调高效、实用的过程和技术,帮助参与者深入理解巧妙且符合道德伦理的专业实践及其对业务的影响。
大数据是当今科技行业的流行语之一。全世界的企业都已经意识到可用的大量数据的价值,并尽****努力来管理和分析数据、发挥其作用,以建立战略和发展竞争优势。与此同时,这项技术的出现,导致了各种新的和增强的工作角色的演变。
“大数据开发者**教程”系列的目标是培养新一代的国际化全能大数据程序员、开发者和技术专家,使其熟悉大数据的相关工具、平台和架构,帮助企业有效地存储、管理并处理海量和多样的数据。同时,本书还有助于读者了解如何有效地整合、实现、定制和管理大数据基础架构。
本系列旨在为读者提供处理大数据的技术、存储、处理、管理和安全基础架构方面的技能,丰富读者与Hadoop 及其组件工具协同工作的经验,并使其可以开发MapReduce 和Pig 程序,操纵分布式文件,以及了解支持MapReduce 程序的API 等。读者同时可以熟悉一些流行的Hadoop 商业发行版系统,如Cloudera、Hortonworks 和Greenplum 等。最后通过一个完整的项目介绍,使读者能够开发一个集成的大数据应用程序。
本系列共两卷,第1 卷“大数据技术与编程基础”包含4 个模块,涉及大数据入门,管理大数据生态系统,使用HDFS 和MapReduce 存储和处理数据,利用Hadoop 工具(如Hive、Pig 和Oozie 等)提升效率;第2 卷“NoSQL、Hadoop 组件及大数据实施”包含3 个模块,涉及ZooKeeper、Sqoop、Flume、YARN 和Storm 等额外的Hadoop 工具,如何利用NoSQL 和Hadoop 实现实时、安全和云,以及Hadoop 商业发行版和管理工具简介。
本书作者均为国际知名IT培训机构的知名讲师,他们通过对技术、IT市场需求以及当今就业培训方面的全球行业标准进行了广泛并严格的调研之后,集结成这套“大数据开发者**教程”。作者们的目标是通过这套书为有志于在大数据开发领域取得事业成功的人技术人员和决策者提供必备的技术和技能。
译者简介
顾晨,男,硕士、PMP、信息系统项目管理师。毕业于上海交通大学。曾获邀参加旧金山的Google I/O大会。喜欢所有与编程相关的事物,拥有14年的编程经验。对于大数据、SAP HANA数据库和思科技术有着极其浓厚的兴趣,是国内较早从事HANA数据库研究的人员之一。先后录制了MCSE、CCNP等多种教学视频,在多家知名网站发布。精通C#、Java编程,目前正致力于人脸识别、室内定位和门店人流统计方面的研究。
模块1 大数据入门
第 1讲 大数据简介 3
1.1 什么是大数据 4
1.1.1 大数据的优势 5
1.1.2 挖掘各种大数据源 6
1.2 数据管理的历史——大数据的演化 7
1.3 大数据的结构化 9
1.4 大数据要素 13
1.4.1 数据量 13
1.4.2 速度 14
1.4.3 多样性 14
1.5 大数据在商务环境中的应用 14
1.6 大数据行业中的职业机会 16
1.6.1 职业机会 17
1.6.2 所需技能 17
1.6.3 大数据的未来 19
练习 20
备忘单 22
第 2讲 大数据在商业上的应用 23
2.1 社交网络数据的重要性 24
2.2 金融欺诈和大数据 30
2.3 保险业的欺诈检测 32
2.4 在零售业中应用大数据 36
练习 40
备忘单 42
第3讲 处理大数据的技术 43
3.1 大数据的分布式和并行计算 44
3.1.1 并行计算技术 46
3.1.2 虚拟化及其对大数据的重要性 47
3.2 Hadoop简介 47
3.3 云计算和大数据 50
3.3.1 大数据计算的特性 50
3.3.2 云部署模型 51
3.3.3 云交付模型 52
3.3.4 大数据云 52
3.3.5 大数据云市场中的供应商 53
3.3.6 使用云服务所存在的问题 54
3.4 大数据内存计算技术 54
练习 56
备忘单 58
第4讲 了解Hadoop生态系统 59
4.1 Hadoop生态系统 60
4.2 用HDFS存储数据 61
4.2.1 HDFS架构 62
4.2.2 HDFS的一些特殊功能 65
4.3 利用Hadoop MapReduce处理数据 65
4.3.1 MapReduce是如何工作的 66
4.3.2 MapReduce的优点和缺点 66
4.3.3 利用Hadoop YARN管理资源和应用 67
4.4 利用HBase存储数据 68
4.5 使用Hive查询大型数据库 69
4.6 与Hadoop生态系统的交互 70
4.6.1 Pig和Pig Latin 70
4.6.2 Sqoop 71
4.6.3 Zookeeper 72
4.6.4 Flume 72
4.6.5 Oozie 73
练习 74
备忘单 76
第5讲 MapReduce基础 77
5.1 MapReduce的起源 78
5.2 MapReduce是如何工作的 79
5.3 MapReduce作业的优化技术 85
5.3.1 硬件/网络拓扑 85
5.3.2 同步 86
5.3.3 文件系统 86
5.4 MapReduce的应用 86
5.5 HBase在大数据处理中的角色 87
5.6 利用Hive挖掘大数据 89
练习 91
备忘单 94
模块2 管理大数据生态系统
第 1讲 大数据技术基础 97
1.1 探索大数据栈 98
1.2 冗余物理基础设施层 99
1.2.1 物理冗余网络 100
1.2.2 管理硬件:存储和服务器 101
1.2.3 基础设施的操作 101
1.3 安全基础设施层 101
1.4 接口层以及与应用程序和互联网的双向反馈 102
1.5 可操作数据库层 103
1.6 组织数据服务层及工具 104
1.7 分析数据仓库层 105
1.8 分析层 105
1.9 大数据应用层 106
1.10 虚拟化和大数据 107
1.11 虚拟化方法 108
1.11.1 服务器虚拟化 109
1.11.2 应用程序虚拟化 109
1.11.3 网络虚拟化 110
1.11.4 处理器和内存虚拟化 110
1.11.5 数据和存储虚拟化 111
1.11.6 用管理程序进行虚拟化管理 111
1.11.7 抽象与虚拟化 112
1.11.8 实施虚拟化来处理大数据 112
练习 114
备忘单 116
第 2讲 大数据管理系统——数据库和数据仓库 117
2.1 RDBMS和大数据环境 118
2.2 非关系型数据库 119
2.2.1 键值数据库 120
2.2.2 文档数据库 122
2.2.3 列式数据库 124
2.2.4 图数据库 125
2.2.5 空间数据库 127
2.3 混合持久化 129
2.4 将大数据与传统数据仓库相集成 130
2.4.1 优化数据仓库 130
2.4.2 大数据结构与数据仓库的区别 130
2.5 大数据分析和数据仓库 132
2.6 改变大数据时代的部署模式 134
2.6.1 设备模型 134
2.6.2 云模型 135
练习 136
备忘单 138
第3讲 分析与大数据 139
3.1 使用大数据以获取结果 140
3.1.1 基本分析 142
3.1.2 高级分析 143
3.1.3 可操作性分析 144
3.1.4 货币化分析 145
3.2 是什么构成了大数据 145
3.2.1 构成大数据的数据 145
3.2.2 大数据分析算法 146
3.2.3 大数据基础设施支持 146
3.3 探索非结构化数据 148
3.4 理解文本分析 149
3.4.1 分析和提取技术 150
3.4.2 理解提取的信息 151
3.4.3 分类法 152
3.4.4 将结果与结构化数据放在一起 153
3.5 建立新的模式和方法以支持大数据 156
3.5.1 大数据分析的特征 156
3.5.2 大数据分析的应用 157
3.5.3 大数据分析框架的特性 161
练习 163
备忘单 165
第4讲 整合数据、实时数据和实施大数据 168
4.1 大数据分析的各个阶段 169
4.1.1 探索阶段 170
4.1.2 编纂阶段 171
4.1.3 整合和合并阶段 171
4.2 大数据集成的基础 173
4.2.1 传统ETL 174
4.2.2 ELT——提取、加载和转换 175
4.2.3 优先处理大数据质量 175
4.2.4 数据性能分析工具 176
4.2.5 将Hadoop用作ETL 177
4.3 流数据和复杂的事件处理 177
4.3.1 流数据 178
4.3.2 复杂事件处理 181
4.3.3 区分CEP和流 182
4.3.4 流数据和CEP对业务的影响 183
4.4 使大数据成为运营流程的一部分 183
4.5 了解大数据的工作流 186
4.6 确保大数据有效性、准确性和时效性 187
4.6.1 数据的有效性和准确性 187
4.6.2 数据的时效性 187
练习 189
备忘单 191
第5讲 大数据解决方案和动态数据 192
5.1 大数据作为企业战略工具 193
5.1.1 阶段1:利用数据做计划 193
5.1.2 阶段2:执行分析 194
5.1.3 阶段3:检查结果 194
5.1.4 阶段4:根据计划行事 194
5.2 实时分析:把新的维度添加到周期 194
5.2.1 阶段5:实时监控 195
5.2.2 阶段6:调整影响 195
5.2.3 阶段7:实验 195
5.3 对动态数据的需求 196
5.4 案例1:针对环境影响使用流数据 198
5.4.1 这是怎么做到的 198
5.4.2 利用传感器提供实时信息 198
5.4.3 利用实时数据进行研究 199
5.5 案例2:为了公共政策使用大数据 199
5.5.1 问题 200
5.5.2 使用流数据 200
5.6 案例3:在医疗保健行业使用流数据 200
5.6.1 问题 201
5.6.2 使用流数据 201
5.7 案例4:在能源行业使用流数据 201
5.7.1 利用流数据提高能源效率 201
5.7.2 流数据的使用推进了可替代能源的生产 202
5.8 案例5:用实时文本分析提高客户体验 202
5.9 案例6:在金融业使用实时数据 203
5.9.1 保险 204
5.9.2 银行 204
5.9.3 信用卡公司 204
5.10 案例7:使用实时数据防止保险欺诈 205
练习 207
备忘单 210
模块3 存储和处理数据:HDFS和MapReduce
第 1讲 在Hadoop中存储数据 213
1.1 HDFS 214
1.1.1 HDFS的架构 214
1.1.2 使用HDFS文件 218
1.1.3 Hadoop特有的文件类型 220
1.1.4 HDFS联盟和高可用性 224
1.2 HBase 226
1.2.1 HBase的架构 226
1.2.2 HBase模式设计准则 231
1.3 HBase编程 232
1.4 为有效的数据存储结合HDFS和HBase 237
1.5 为应用程序选择恰当的Hadoop数据组织 237
1.5.1 数据被MapReduce独占访问时 237
1.5.2 创建新数据时 238
1.5.3 数据尺寸太大时 238
1.5.4 数据用于实时访问时 238
练习 239
备忘单 241
第 2讲 利用MapReduce处理数据 242
2.1 开始了解MapReduce 243
2.1.1 MapReduce框架 243
2.1.2 MapReduce执行管道 244
2.1.3 MapReduce的运行协调和任务管理 247
2.2 第 一个MapReduce应用程序 249
2.3 设计MapReduce的实现 257
2.3.1 使用MapReduce作为并行处理的框架 258
2.3.2 MapReduce的简单数据处理 259
2.3.3 构建与MapReduce的连接 260
2.3.4 构建迭代的MapReduce应用程序 264
2.3.5 用还是不用MapReduce 268
2.3.6 常见的MapReduce设计提示 269
练习 271
备忘单 274
第3讲 自定义MapReduce执行 275
3.1 用InputFormat控制MapReduce的执行 276
3.1.1 为计算密集型应用程序实施InputFormat 277
3.1.2 实现InputFormat控制map的数量 282
3.1.3 为多HBase表实现InputFormat 287
3.2 用你自定义RecordReader的方式读取数据 290
3.3 用自定义OutputFormat组织输出数据 292
3.4 自定义RecordWriter以你的方式写数据 293
3.5 利用结合器优化MapReduce执行 295
3.6 用分区器来控制reducer的执行 298
练习 299
备忘单 302
第4讲 测试和调试MapReduce应用程序 303
4.1 MapReduce应用程序的单元测试 304
4.1.1 测试mapper 306
4.1.2 测试reducer 307
4.1.3 集成测试 308
4.2 用Eclipse进行本地程序测试 310
4.3 利用日志文件做Hadoop测试 312
4.4 利用工作计数器进行报表度量 316
4.5 在MapReduce中的防御式编程 318
练习 320
备忘单 322
第5讲 实现MapReduce WordCount程序——案例学习 323
5.1 背景 324
5.1.1 句子层级的情感分析 325
5.1.2 情感词法采集 325
5.1.3 文档级别的情感分析 325
5.1.4 比较情感分析 325
5.1.5 基于外观的情感分析 326
5.2 场景 326
5.3 数据解释 326
5.4 方法论 326
5.5 方法 327
模块4 利用Hadoop工具Hive、Pig和Oozie提升效率
第 1讲 探索Hive 343
1.1 介绍Hive 344
1.1.1 Hive数据单元 345
1.1.2 Hive架构 346
1.1.3 Hive元数据存储 347
1.2 启动Hive 347
1.2.1 Hive命令行界面 348
1.2.2 Hive变量 349
1.2.3 Hive属性 349
1.2.4 Hive一次性命令 349
1.3 执行来自文件的Hive查询 350
1.3.1 shell执行 350
1.3.2 Hadoop dfs命令 350
1.3.3 Hive中的注释 351
1.4 数据类型 351
1.4.1 基本数据类型 352
1.4.2 复杂数据类型 354
1.4.3 Hive内置运算符 355
1.5 Hive内置函数 356
1.6 压缩的数据存储 358
1.7 Hive数据定义语言 359
1.7.1 管理Hive中的数据库 359
1.7.2 管理Hive中的表 360
1.8 Hive中的数据操作 364
1.8.1 将数据载入Hive表 364
1.8.2 将数据插入表 365
1.8.3 插入至本地文件 367
练习 368
备忘单 370
第 2讲 高级Hive查询 371
2.1 HiveQL查询 372
2.1.1 SELECT查询 372
2.1.2 LIMIT子句 373
2.1.3 嵌入查询 373
2.1.4 CASE…WHEN…THEN 373
2.1.5 LIKE和RLIKE 373
2.1.6 GROUP BY 374
2.1.7 HAVING 374
2.2 使用函数操作列值 374
2.2.1 内置函数 374
2.2.2 用户定义函数 375
2.3 Hive中的连接 376
2.3.1 内连接 376
2.3.2 外连接 377
2.3.3 笛卡儿积连接 378
2.3.4 Map侧的连接 379
2.3.5 ORDER BY 379
2.3.6 UNION ALL 379
2.4 Hive的最佳实践 380
2.4.1 使用分区 380
2.4.2 规范化 381
2.4.3 有效使用单次扫描 381
2.4.4 桶的使用 381
2.5 性能调优和查询优化 382
2.5.1 EXPLAIN命令 383
2.5.2 LIMIT调优 387
2.6 各种执行类型 387
2.6.1 本地执行 387
2.6.2 并行执行 387
2.6.3 索引 388
2.6.4 预测执行 388
2.7 Hive文件和记录格式 388
2.7.1 文本文件 388
2.7.2 序列文件 389
2.7.3 RCFile 389
2.7.4 记录格式(SerDe) 390
2.7.5 Regex SerDe 390
2.7.6 Avro SerDe 391
2.7.7 JSON SerDe 392
2.8 HiveThrift服务 393
2.8.1 启动HiveThrift服务器 393
2.8.2 使用JDBC的样例HiveThrift客户端 393
2.9 Hive中的安全 395
2.9.1 认证 395
2.9.2 授权 395
练习 397
备忘单 400
第3讲 用Pig分析数据 402
3.1 介绍Pig 403
3.1.1 Pig架构 403
3.1.2 Pig Latin的优势 404
3.2 安装Pig 405
3.2.1 安装Pig所需条件 405
3.2.2 下载Pig 405
3.2.3 构建Pig库 406
3.3 Pig的属性 406
3.4 运行Pig 407
3.5 Pig Latin应用程序流 408
3.6 开始利用Pig Latin 409
3.6.1 Pig Latin结构 410
3.6.2 Pig数据类型 411
3.6.3 Pig语法 412
3.7 Pig脚本接口 413
3.8 Pig Latin的脚本 415
3.8.1 用户定义函数 415
3.8.2 参数替代 418
3.9 Pig中的关系型操作 419
3.9.1 FOREACH 419
3.9.2 FILTER 420
3.9.3 GROUP 421
3.9.4 ORDER BY 422
3.9.5 DISTINCT 423
3.9.6 JOIN 424
3.9.7 LIMIT 425
3.9.8 SAMPLE 426
练习 427
备忘单 430
第4讲 Oozie对数据处理进行自动化 431
4.1 开始了解Oozie 432
4.2 Oozie工作流 433
4.2.1 在Oozie工作流中执行异步活动 436
4.2.2 实现Oozie工作流 437
4.3 Oozie协调器 443
4.4 Oozie套件 448
4.5 利用EL的Oozie参数化 451
4.5.1 工作流函数 451
4.5.2 协调器函数 452
4.5.3 套件函数 452
4.5.4 其他EL函数 452
4.6 Oozie作业执行模型 452
4.7 访问Oozie 455
4.8 Oozie SLA 456
练习 460
备忘单 462
第5讲 使用Oozie 464
5.1 业务场景:使用探测包验证关于位置的信息 465
5.2 根据探测包设计位置验证 466
5.3 设计Oozie工作流 467
5.4 实现Oozie工作流应用程序 469
5.4.1 实现数据准备工作流 469
5.4.2 实现考勤指数和集群簇的工作流 477
5.5 实现工作流的活动 479
5.5.1 从java行为中填充执行上下文 479
5.5.2 在Oozie工作流中使用MapReduce作业 480
5.6 实现Oozie协调器应用程序 483
5.7 实现Oozie套件应用程序 488
5.8 部署、测试和执行Oozie应用程序 489
5.8.1 使用Oozie CLI执行Oozie应用程序 490
5.8.2 将参数传递给Oozie作业 493
5.8.3 决定如何将参数传递给Oozie作业 495
练习 497
备忘单 499