本书针对大数据处理的两种典型方式,即批处理和流处理,介绍了当前Apache软件基金会三大软件开源项目Hadoop、Spark和Storm中主要的存储及计算框架。本书从初学者的角度出发,聚焦于大数据处理框架的基本原理以及安装和部署等实践过程。通过本书的学习,读者在了解处理框架的结构、设计原理以及执行流程等原理性知识的同时,还可以结合本书给出的完整部署过程以及WordCount等示例的完整源代码,熟悉如何使用这些处理框架来编写大数据处理程序以及大数据处理程序的基本结构。
本书配套PPT、源代码等资源,欢迎选用本书作为教材的老师登录机工教育服务网www.cmpedu.com注册下载。
本书可作为高等院校计算机、数据科学与大数据技术及人工智能或相关专业的本科生或研究生教材,也可供相关工程技术人员阅读参考。
随着手机和摄像头等大量移动设备的使用、Web 2.0和社交网络带来的数据产生方式的转变,以及云计算、Hadoop、Spark等的出现,大数据越来越多地对人们的生活、企业的运营以及国家的治理和安全产生深远的影响。在这种情况下,研究大数据处理技术,培养大数据专业人才得到了国家和社会各界的广泛重视。当前,已经有越来越多的高校开设数据科学与大数据技术专业,也有越来越多的人学习大数据处理技术。
1本书的定位
对于初次接触大数据处理技术的读者来说,了解大数据处理框架的基本原理并能够搭建运行和开发环境,编写简单的应用代码,进而掌握大数据处理程序的基本结构与编写流程,往往是有难度的。
本书面向大数据处理技术的初学者,在介绍大数据处理框架的结构、设计原理以及执行流程等原理性知识的同时,还给出了大数据处理框架的完整安装过程以及WordCount等示例的完整程序代码,并对代码进行详细的注释说明。本书强调完整的安装过程和示例代码,可以省去读者查找安装过程、代码以及调试代码Bug所带来的麻烦。在介绍安装过程和示例代码的过程中尽可能地对大数据处理框架涉及的诸如Linux命令、文件系统、分布式日志收集工具Flume等相关知识点进行了简单的介绍,可节省读者了解相关背景知识所需要的时间。
2本书的主要内容
本书主要聚焦于大数据处理的两种主要方式,即批处理和流处理,介绍当前Apache软件基金会的三大软件开源项目Hadoop、Spark和Storm中的主要存储和计算组件。由于Hadoop与Spark的组件众多,从实际应用开发者的角度出发,针对Hadoop主要介绍HDFS、MapReduce和HBase三个组件,针对Spark主要介绍Spark的核心框架以及Spark应用于流处理的Spark Streaming组件。
HDFS、MapReduce和HBase是Hadoop的核心组件。HDFS是Hadoop的分布式文件系统,HBase是Hadoop的分布式数据库,两者主要解决的是大数据的可靠存储。MapReduce和Spark的核心框架主要应用于大数据的批处理。Spark作为MapReduce之后发布的批处理框架,弥补了MapReduce的一些局限性,具有了更强的计算表达能力以及更快的处理速度。但是,本书仍然对MapReduce进行介绍,这是因为Spark的设计借鉴了MapReduce,理解MapReduce有助于更好地理解Spark。
对于流处理框架,将介绍Spark Streaming和Storm。两者代表了实际中两种不同的流处理方式。Spark Streaming基于Spark核心框架的批处理功能将数据流分成不同的时间片段,然后针对每个时间片段的数据进行批处理。因此,Spark Streaming对数据流的处理过程并不是完全的实时处理,而Storm采取的是实时处理。
本书的所有安装和运行过程都是在单机的一个虚拟机中完成的,方便读者进行实践。所有的安装过程和程序代码都经过作者的亲自实践,但是编写这些安装过程和代码时可能出现错误,如果在学习过程中发现问题,请联系作者,邮箱为liuchun@henu.edu.cn。
刘春
河南省时空大数据产业技术研究院
大数据基本处理框架原理与实践
前言
第1章大数据与基本处理框架1
1.1大数据产生的背景1
1.1.1数字化1
1.1.2网络化2
1.2大数据的特征2
1.3大数据的价值与意义3
1.3.1量变到质变3
1.3.2数据科学的产生4
1.3.3思维的变革4
1.4大数据带来的挑战5
1.5大数据的基本处理框架5
1.5.1Hadoop6
1.5.2Spark7
1.5.3Storm8
1.6本章小结8
第2章运行与开发环境搭建10
2.1虚拟机的创建10
2.1.1虚拟化软件的安装10
2.1.2虚拟机的创建11
2.1.3VMware Tools的安装17
2.2Linux的常用命令18
2.3JDK的安装18
2.4IDEA+Maven的安装20
2.4.1IDEA的安装20
2.4.2Maven的安装21
2.4.3在IDEA项目中配置JDK
和Maven22
2.5Hadoop运行环境部署23
2.5.1SSH的安装23
2.5.2Hadoop的安装24
2.5.3伪分布式环境配置25
2.6本章小结27
第3章Hadoop文件系统(HDFS)28
3.1文件系统28
3.2HDFS分布式文件系统28
3.2.1HDFS的设计目标29
3.2.2HDFS的原理与结构30
3.3HDFS的操作流程31
3.3.1HDFS文件读流程32
3.3.2HDFS文件写流程32
3.4HDFS的接口34
3.4.1Shell命令34
3.4.2Web客户端36
3.4.3Java API36
3.5本章小结40
第4章Hadoop分布式计算框架
MapReduce414.1MapReduce计算框架概述41
4.2MapReduce计算过程42
4.2.1map阶段42
4.2.2shuffle阶段43
4.2.3reduce阶段45
4.3MapReduce的架构与运行流程45
4.4WordCount的MapReduce程序47
4.4.1WordCount程序的pom.xml文件47
4.4.2WordCount程序的Java文件48
4.4.3WordCount代码说明50
4.5Mapper/Reducer类源码解析52
4.6Hadoop的数据类型55
4.6.1Hadoop基本数据类型55
4.6.2自定义Hadoop数据类型56
4.7数据输入格式InputFormat58
4.7.1默认的TextInputFormat58
4.7.2getSplits()操作60
4.7.3LineRecordReader62
4.7.4自定义输入格式65
4.8数据的输出格式OutputFormat66
4.8.1默认的输出格式
TextOutputFormat66
4.8.2LineRecordWriter68
4.8.3自定义输出格式类型71
4.8.4Hadoop的SequenceFile71
4.9自定义Combiner类72
4.10自定义Partioner类73
4.11多MapReduce任务的串联74
4.12本章小结78
第5章Hadoop数据库系统HBase79
5.1HBase概述79
5.1.1数据库与数据库系统79
5.1.2传统关系型数据库系统80
5.1.3NoSQL数据库系统80
5.1.4HBase数据库系统80
5.2HBase的数据模型81
5.2.1HBase的逻辑视图81
5.2.2HBase的物理视图82
5.3HBase的架构与运行机制83
5.3.1HBase分布式存储策略83
5.3.2HBase的运行架构85
5.4HBase的安装与部署88
5.4.1安装ZooKeeper88
5.4.2安装HBase 90
5.4.3伪分布式环境配置90
5.5HBase操作接口与实践92
5.5.1HBase Shell命令92
5.5.2Java API96
5.6本章小结107
第6章分布式内存计算框架Spark108
6.1Spark概述108
6.1.1MapReduce计算框架的局限性108
6.1.2Spark的优势与特点109
6.2Spark的架构110
6.2.1Spark的基本组件110
6.2.2Spark的运行流程111
6.3RDD112
6.3.1RDD的概念与Spark计算模型112
6.3.2RDD的各种操作114
6.3.3RDD之间的依赖关系118
6.3.4RDD计算过程的容错处理121
6.4Scala语言介绍122
6.4.1变量和类型123
6.4.2控制结构129
6.5Spark的安装部署131
6.5.1Spark安装文件的下载131
6.5.2Spark的安装过程132
6.6基于Spark Shell的WordCount程序133
6.6.1启动Spark Shell133
6.6.2从本地及HDFS读取
WordCount数据134
6.6.3退出Spark Shell136
6.7基于IDEA+Maven的
WordCount程序136
6.7.1IDEA安装Scala插件与SDK137
6.7.2基于Scala的WordCount Spark
应用程序139
6.7.3基于Java的WordCount Spark
应用程序144
6.8Spark与HBase的整合146
6.8.1pom.xml文件147
6.8.2Scala Class文件148
6.9Spark创建RDD的常用方式150
6.9.1基于Scala集合创建RDD150
6.9.2基于外部存储系统创建RDD151
6.10Spark的共享变量152
6.10.1广播变量152
6.10.2累加器153
6.11本章小结154
第7章Spark流计算框架
(Spark Streaming)1567.1流计算与流计算框架156
7.2Spark Streaming的原理与概念157
7.2.1Spark Streaming的设计原理157
7.2.2Dstream与Dstream graph157
7.2.3Spark Streaming的结构
与执行流程160
7.2.4Spark Streaming的容错处理162
7.3Spark Streaming的WordCount案例163
7.3.1以Socket为数据源163
7.3.2以文本文件目录为数据源166
7.4Spark Streaming整合Flume167
7.4.1Flume介绍167
7.4.2Flume的下载安装与配置169
7.4.3整合Flume与Spark Streaming172
7.5Spark Streaming整合Kafka178
7.5.1Kafka介绍178
7.5.2Kafka的下载安装180
7.5.3Kafka的常用命令181
7.5.4整合Kafka与Spark Streaming181
7.6本章小结184
第8章实时流计算框架Storm185
8.1Storm的逻辑架构185
8.2Storm的物理架构186
8.2.1Storm集群的架构186
8.2.2数据流的分组策略187
8.3Storm的消息容错机制188
8.4Strom的下载与安装190
8.4.1Storm的安装配置190
8.4.2Storm的启动191
8.5Storm的WordCount程序192
8.5.1Pom.xml文件193
8.5.2Java Class文件193
8.5.3提交集群运行198