描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302514275丛书名: 大数据与人工智能技术丛书
产品特色
编辑推荐
包含250分钟微课视频、丰富的实例代码以及真实、完整的项目案例。
内容囊括Linux和MySQL使用基础、Hadoop和Spark集群搭建、Hadoop两大核心的原理与使用、Hadoop生态圈工具(Hive、HBase、Spoop、Flume等)、Scala基础、RDD、Spark SQL、Spark streaming和Spark-ML等知识点,并有配套实例代码。
详细讲解真实的大数据项目“电力能源大数据分析”。
内容囊括Linux和MySQL使用基础、Hadoop和Spark集群搭建、Hadoop两大核心的原理与使用、Hadoop生态圈工具(Hive、HBase、Spoop、Flume等)、Scala基础、RDD、Spark SQL、Spark streaming和Spark-ML等知识点,并有配套实例代码。
详细讲解真实的大数据项目“电力能源大数据分析”。
内容简介
全书内容分为大数据系统基础、Hadoop技术、Spark技术和项目实战4部分。其中,Linux是学习大数据技术的基础,先从Linux入手,打下坚实的基础,之后才能更好地学习Hadoop和Spark。4部分内容分别介绍如下。
大数据系统基础篇通过大数据概述、Linux系统安装、Linux系统基础命令、Shell编程和MySQL数据操作,为以后编程奠定坚实的基础。
Hadoop技术篇以Hadoop生态圈为中心,详细介绍Hadoop高可用集群搭建、HDFS技术、MapReduce技术、Hive技术,为读者学习大数据开发技术提供便利,并以实用的方式简单介绍HBase、Sqoop、Flume工具的使用,使读者在精通一门技术的前提下,能扩展了解相关知识,真正成为一专多能的专业型人才。
Spark技术篇从Spark概述、Scala语言、环境搭建、RDD核心技术、Spark SQL和机器学习等多方面讲解Spark大数据的开发,从基础的Scala语言开始学习,并以Hadoop环境为基础搭建Spark大数据集群,从*基础、*常用、*容易理解的思路出发,帮助读者逐步掌握Spark大数据技术。
项目实战篇从真实项目“电力能源大数据分析”中抽取一部分业务作为实战解读,通过简洁的流程讲解,使读者了解大数据项目开发的整个过程。
大数据系统基础篇通过大数据概述、Linux系统安装、Linux系统基础命令、Shell编程和MySQL数据操作,为以后编程奠定坚实的基础。
Hadoop技术篇以Hadoop生态圈为中心,详细介绍Hadoop高可用集群搭建、HDFS技术、MapReduce技术、Hive技术,为读者学习大数据开发技术提供便利,并以实用的方式简单介绍HBase、Sqoop、Flume工具的使用,使读者在精通一门技术的前提下,能扩展了解相关知识,真正成为一专多能的专业型人才。
Spark技术篇从Spark概述、Scala语言、环境搭建、RDD核心技术、Spark SQL和机器学习等多方面讲解Spark大数据的开发,从基础的Scala语言开始学习,并以Hadoop环境为基础搭建Spark大数据集群,从*基础、*常用、*容易理解的思路出发,帮助读者逐步掌握Spark大数据技术。
项目实战篇从真实项目“电力能源大数据分析”中抽取一部分业务作为实战解读,通过简洁的流程讲解,使读者了解大数据项目开发的整个过程。
目 录
第1篇 大数据系统基础
第1章 大数据概述 3
1.1 数据的产生与发展 3
1.2 大数据的基础知识 4
1.3 大数据架构 5
第2章 系统的安装与使用 7
2.1 系统安装 7
2.1.1 安装CentOS 6.x 7
2.1.2 安装步骤 7
2.2 基本命令 18
2.2.1 cd命令 18
2.2.2 打包和解压指令 19
2.2.3 其他常用命令 21
2.3 权限与目录 26
2.3.1 权限 26
2.3.2 目录 27
2.4 文件操作 28
2.4.1 文件与目录管理 28
2.4.2 用户和用户组管理 39
2.5 习题与思考 46
第3章 任务命令 47
3.1 脚本配置 47
3.1.1 Shell脚本 47
3.1.2 Shell变量 47
3.1.3 Shell传递参数 48
3.1.4 Shell数组 50
3.1.5 Shell运算符 51
3.1.6 Shell echo命令 55
3.1.7 Shell printf命令 57
3.1.8 Shell test命令 58
3.1.9 Shell流程控制 60
3.2 网络配置 67
3.3 习题与思考 70
第4章 数据库操作 71
4.1 数据库简介 71
4.1.1 MySQL数据库简介 71
4.1.2 安装MySQL 72
4.2 数据库基本操作 72
4.2.1 MySQL的DDL操作 72
4.2.2 MySQL的DML操作 80
4.3 数据库用户操作 83
4.3.1 创建用户 83
4.3.2 给用户授权 83
4.3.3 撤销授权 84
4.3.4 查看用户权限 85
4.3.5 删除用户 85
4.3.6 修改用户密码 86
4.4 数据库查询操作 86
4.5 习题与思考 90
第2篇 Hadoop技术
第5章 Hadoop开发环境 95
5.1 Hadoop生态圈工具 95
5.2 环境搭建 97
5.2.1 步骤1——虚拟机安装 97
5.2.2 步骤2——安装JDK和Hadoop 97
5.2.3 步骤3——复制虚拟机 113
5.2.4 步骤4——设置免密 117
5.2.5 步骤5——安装Zookeeper 119
5.2.6 步骤6——启动Hadoop集群 122
5.2.7 正常启动顺序 125
5.3 常见问题汇总 127
5.4 习题与思考 128
第6章 HDFS技术 129
6.1 HDFS架构 129
6.2 HDFS命令 130
6.2.1 version命令 131
6.2.2 dfsadmin命令 131
6.2.3 jar命令 132
6.2.4 fs命令 132
6.3 API的使用 140
6.4 习题与思考 142
第7章 MapReduce技术 143
7.1 MapReduce工作原理 143
7.1.1 MapReduce作业运行流程 143
7.1.2 早期MapReduce架构存在的问题 144
7.2 YARN运行概述 144
7.2.1 YARN模块介绍 144
7.2.2 YARN工作流程 145
7.3 MapReduce编程模型 146
7.4 MapReduce数据流 148
7.4.1 输入文件 150
7.4.2 输入格式 150
7.4.3 数据片段 151
7.4.4 记录读取器 151
7.4.5 Mapper 151
7.4.6 Shuffle 152
7.4.7 排序 153
7.4.8 归约 153
7.4.9 输出格式 153
7.5 MapReduce API编程 154
7.5.1 词频统计 154
7.5.2 指定字段 156
7.5.3 求平均数 158
7.5.4 关联 160
7.6 习题与思考 163
第8章 Hive数据仓库 165
8.1 Hive模型 165
8.1.1 Hive架构与基本组成 165
8.1.2 Hive的数据模型 166
8.2 Hive的安装 167
8.2.1 Hive的基本安装 167
8.2.2 MySQL的安装 168
8.2.3 Hive配置 169
8.3 HQL详解 170
8.3.1 Hive数据管理方式 170
8.3.2 HQL操作 174
8.4 习题与思考 182
第9章 HBase分布式数据库 183
9.1 HBase工作原理 183
9.1.1 HBase表结构 183
9.1.2 体系结构 184
9.1.3 物理模型 186
9.1.4 HBase读写流程 187
9.2 HBase完全分布式 189
9.2.1 安装前的准备 189
9.2.2 配置文件 189
9.2.3 集群启动 191
9.3 HBase Shell 192
9.3.1 DDL操作 192
9.3.2 DML操作 194
9.4 习题与思考 197
第10章 Sqoop工具 198
10.1 Sqoop安装 199
10.2 Sqoop的使用 200
10.2.1 MySQL的导入导出 200
10.2.2 Oracle的导入导出 201
10.3 习题与思考 202
第11章 Flume日志收集 203
11.1 体系架构 204
11.1.1 Flume内部结构 204
11.1.2 Flume事件 204
11.2 Flume的特点 205
11.3 Flume集群搭建 206
11.4 Flume实例 207
11.4.1 实例1:实时测试客户端传输的数据 207
11.4.2 实例2:监控本地文件夹并写入到HDFS中 208
11.5 习题与思考 210
第3篇 Spark技术
第12章 Spark概述 213
12.1 Spark框架原理 213
12.2 Spark大数据处理 214
12.3 RDD数据集 215
12.4 Spark子系统 215
第13章 Scala语言 216
13.1 Scala语法基础 216
13.1.1 变量、常量与赋值 216
13.1.2 运算符与表达式 217
13.1.3 条件分支控制 217
13.1.4 循环流程控制 218
13.1.5 Scala数据类型 218
13.2 Scala运算与函数 219
13.3 Scala闭包 220
13.4 Scala数组与字符串 220
13.4.1 Scala数组 220
13.4.2 Scala字符串 221
13.5 Scala迭代器 221
13.6 Scala类和对象 222
13.7 习题与思考 223
第14章 Spark高可用环境 224
14.1 环境搭建 224
14.1.1 准备工作 224
14.1.2 下载并安装Spark 224
14.2 常见问题汇总 226
第15章 RDD技术 228
15.1 RDD的实现 228
15.1.1 数据源 228
15.1.2 调度器 228
15.2 RDD编程接口 229
15.3 RDD操作 229
15.3.1 Spark基于命令行的操作 229
15.3.2 Spark基于应用作业的操作 231
15.3.3 Spark操作的基础命令与开发工具介绍 231
15.3.4 Spark基于YARN的调度模式 231
15.3.5 Spark基于Scala语言的本地应用开发 234
15.3.6 Spark基于Scala语言的集群应用开发 235
15.3.7 Spark基于Java语言的应用开发 236
15.3.8 Spark基于Java语言的本地应用开发 237
15.3.9 Spark基于Java语言的集群应用开发 238
15.4 习题与思考 241
第16章 Spark SQL 242
16.1 Spark SQL架构原理 242
16.1.1 Hive的两种功能 242
16.1.2 Spark SQL的重要功能 242
16.1.3 Spark SQL的DataFrame特征 243
16.2 Spark SQL操作Hive 243
16.2.1 添加配置文件,便于Spark SQL访问Hive仓库 243
16.2.2 安装JDBC驱动 243
16.2.3 启动MySQL服务及其Hive的元数据服务 243
16.2.4 启动HDFS集群和Spark集群 244
16.2.5 启动Spark-Shell并测试 244
16.3 Spark SQL操作HDFS 244
16.3.1 操作代码 244
16.3.2 工程文件 246
16.3.3 创建测试数据 246
16.3.4 运行Job并提交到集群 247
16.3.5 查看运行结果 247
16.4 Spark SQL操作关系数据库 248
16.4.1 添加访问MySQL的驱动包 248
16.4.2 添加必要的开发环境 248
16.4.3 使用Spark SQL操作关系数据库 248
16.4.4 初始化MySQL数据库服务 250
16.4.5 准备Spark SQL源数据 251
16.4.6 运行Spark代码 252
16.4.7 创建dist文件夹 252
16.4.8 安装数据库驱动 252
16.4.9 基于集群操作 253
16.4.10 打包工程代码到dist目录下 256
16.4.11 启动集群并提交Job应用 256
16.4.12 检查关系数据库中是否已有数据 258
16.5 习题与思考 258
第17章 Spark Streaming 260
17.1 架构与原理 260
17.1.1 Spark Streaming中的离散流特征 260
17.1.2 Spark Streaming的应用场景 260
17.2 KafKa中间件 261
17.2.1 KafKa的特点 261
17.2.2 ZeroCopy技术 261
17.2.3 KafKa的通信原理 261
17.2.4 KafKa的内部存储结构 262
17.2.5 KafKa的下载 262
17.2.6 KafKa集群搭建 262
17.2.7 启动并使用KafKa集群 263
17.2.8 停止KafKa集群 264
17.2.9 KafKa集成Flume 264
17.3 Socket事件流操作 265
17.3.1 netcat网络Socket控制台工具 265
17.3.2 基于本地的Spark Streaming流式数据分析示例 266
17.3.3 基于集群的Spark Streaming流式数据分析示例 269
17.3.4 基于集群模式下的集群文件I/O流分析示例 272
17.4 KafKa事件流操作 275
17.4.1 基于Receiver模式的KafKa集成 275
17.4.2 基于Direct模式的KafKa集成 278
17.5 I/O文件事件流操作 280
17.5.1 基于路径扫描的Spark Streaming 281
17.5.2 打包至工程的dist目录 284
17.5.3 启动集群 284
第18章 Spark机器学习 289
18.1 机器学习原理 289
18.1.1 机器学习的概念 289
18.1.2 机器学习的分类 289
18.1.3 Spark机器学习的版本演变 290
18.1.4 DataFrame数据结构 290
18.1.5 DataSet数据结构 290
18.1.6 执行引擎的性能与效率 290
18.1.7 Spark 2.x的新特性 290
18.2 线性回归 291
18.2.1 线性回归分析过程 291
18.2.2 矩阵分析过程 291
18.2.3 基于本地模式的线性回归分析 291
18.2.4 基于集群模式的线性回归分析 294
18.3 聚类分析 300
18.3.1 K-Means聚类算法原理 300
18.3.2 聚类分析过程 300
18.3.3 基于本地模式的聚类算法分析 301
18.3.4 基于集群模式的聚类算法分析 305
18.4 协同过滤 312
18.4.1 个性化推荐算法 312
18.4.2 相关性推荐算法 312
18.4.3 基于本地的协同过滤算法分析 312
18.4.4 基于集群的协同过滤算法分析 317
第4篇 项目实战
第19章 基于电力能源的大数据实战 325
19.1 需求分析 325
19.2 项目设计 325
19.2.1 数据采集 325
19.2.2 数据处理 326
19.2.3 数据呈现 326
19.3 数据收集与处理 329
19.3.1 数据收集 329
19.3.2 数据处理 329
19.4 大数据呈现 341
19.4.1 数据传输 341
19.4.2 数据呈现 342
19.5 项目总结 343
第1章 大数据概述 3
1.1 数据的产生与发展 3
1.2 大数据的基础知识 4
1.3 大数据架构 5
第2章 系统的安装与使用 7
2.1 系统安装 7
2.1.1 安装CentOS 6.x 7
2.1.2 安装步骤 7
2.2 基本命令 18
2.2.1 cd命令 18
2.2.2 打包和解压指令 19
2.2.3 其他常用命令 21
2.3 权限与目录 26
2.3.1 权限 26
2.3.2 目录 27
2.4 文件操作 28
2.4.1 文件与目录管理 28
2.4.2 用户和用户组管理 39
2.5 习题与思考 46
第3章 任务命令 47
3.1 脚本配置 47
3.1.1 Shell脚本 47
3.1.2 Shell变量 47
3.1.3 Shell传递参数 48
3.1.4 Shell数组 50
3.1.5 Shell运算符 51
3.1.6 Shell echo命令 55
3.1.7 Shell printf命令 57
3.1.8 Shell test命令 58
3.1.9 Shell流程控制 60
3.2 网络配置 67
3.3 习题与思考 70
第4章 数据库操作 71
4.1 数据库简介 71
4.1.1 MySQL数据库简介 71
4.1.2 安装MySQL 72
4.2 数据库基本操作 72
4.2.1 MySQL的DDL操作 72
4.2.2 MySQL的DML操作 80
4.3 数据库用户操作 83
4.3.1 创建用户 83
4.3.2 给用户授权 83
4.3.3 撤销授权 84
4.3.4 查看用户权限 85
4.3.5 删除用户 85
4.3.6 修改用户密码 86
4.4 数据库查询操作 86
4.5 习题与思考 90
第2篇 Hadoop技术
第5章 Hadoop开发环境 95
5.1 Hadoop生态圈工具 95
5.2 环境搭建 97
5.2.1 步骤1——虚拟机安装 97
5.2.2 步骤2——安装JDK和Hadoop 97
5.2.3 步骤3——复制虚拟机 113
5.2.4 步骤4——设置免密 117
5.2.5 步骤5——安装Zookeeper 119
5.2.6 步骤6——启动Hadoop集群 122
5.2.7 正常启动顺序 125
5.3 常见问题汇总 127
5.4 习题与思考 128
第6章 HDFS技术 129
6.1 HDFS架构 129
6.2 HDFS命令 130
6.2.1 version命令 131
6.2.2 dfsadmin命令 131
6.2.3 jar命令 132
6.2.4 fs命令 132
6.3 API的使用 140
6.4 习题与思考 142
第7章 MapReduce技术 143
7.1 MapReduce工作原理 143
7.1.1 MapReduce作业运行流程 143
7.1.2 早期MapReduce架构存在的问题 144
7.2 YARN运行概述 144
7.2.1 YARN模块介绍 144
7.2.2 YARN工作流程 145
7.3 MapReduce编程模型 146
7.4 MapReduce数据流 148
7.4.1 输入文件 150
7.4.2 输入格式 150
7.4.3 数据片段 151
7.4.4 记录读取器 151
7.4.5 Mapper 151
7.4.6 Shuffle 152
7.4.7 排序 153
7.4.8 归约 153
7.4.9 输出格式 153
7.5 MapReduce API编程 154
7.5.1 词频统计 154
7.5.2 指定字段 156
7.5.3 求平均数 158
7.5.4 关联 160
7.6 习题与思考 163
第8章 Hive数据仓库 165
8.1 Hive模型 165
8.1.1 Hive架构与基本组成 165
8.1.2 Hive的数据模型 166
8.2 Hive的安装 167
8.2.1 Hive的基本安装 167
8.2.2 MySQL的安装 168
8.2.3 Hive配置 169
8.3 HQL详解 170
8.3.1 Hive数据管理方式 170
8.3.2 HQL操作 174
8.4 习题与思考 182
第9章 HBase分布式数据库 183
9.1 HBase工作原理 183
9.1.1 HBase表结构 183
9.1.2 体系结构 184
9.1.3 物理模型 186
9.1.4 HBase读写流程 187
9.2 HBase完全分布式 189
9.2.1 安装前的准备 189
9.2.2 配置文件 189
9.2.3 集群启动 191
9.3 HBase Shell 192
9.3.1 DDL操作 192
9.3.2 DML操作 194
9.4 习题与思考 197
第10章 Sqoop工具 198
10.1 Sqoop安装 199
10.2 Sqoop的使用 200
10.2.1 MySQL的导入导出 200
10.2.2 Oracle的导入导出 201
10.3 习题与思考 202
第11章 Flume日志收集 203
11.1 体系架构 204
11.1.1 Flume内部结构 204
11.1.2 Flume事件 204
11.2 Flume的特点 205
11.3 Flume集群搭建 206
11.4 Flume实例 207
11.4.1 实例1:实时测试客户端传输的数据 207
11.4.2 实例2:监控本地文件夹并写入到HDFS中 208
11.5 习题与思考 210
第3篇 Spark技术
第12章 Spark概述 213
12.1 Spark框架原理 213
12.2 Spark大数据处理 214
12.3 RDD数据集 215
12.4 Spark子系统 215
第13章 Scala语言 216
13.1 Scala语法基础 216
13.1.1 变量、常量与赋值 216
13.1.2 运算符与表达式 217
13.1.3 条件分支控制 217
13.1.4 循环流程控制 218
13.1.5 Scala数据类型 218
13.2 Scala运算与函数 219
13.3 Scala闭包 220
13.4 Scala数组与字符串 220
13.4.1 Scala数组 220
13.4.2 Scala字符串 221
13.5 Scala迭代器 221
13.6 Scala类和对象 222
13.7 习题与思考 223
第14章 Spark高可用环境 224
14.1 环境搭建 224
14.1.1 准备工作 224
14.1.2 下载并安装Spark 224
14.2 常见问题汇总 226
第15章 RDD技术 228
15.1 RDD的实现 228
15.1.1 数据源 228
15.1.2 调度器 228
15.2 RDD编程接口 229
15.3 RDD操作 229
15.3.1 Spark基于命令行的操作 229
15.3.2 Spark基于应用作业的操作 231
15.3.3 Spark操作的基础命令与开发工具介绍 231
15.3.4 Spark基于YARN的调度模式 231
15.3.5 Spark基于Scala语言的本地应用开发 234
15.3.6 Spark基于Scala语言的集群应用开发 235
15.3.7 Spark基于Java语言的应用开发 236
15.3.8 Spark基于Java语言的本地应用开发 237
15.3.9 Spark基于Java语言的集群应用开发 238
15.4 习题与思考 241
第16章 Spark SQL 242
16.1 Spark SQL架构原理 242
16.1.1 Hive的两种功能 242
16.1.2 Spark SQL的重要功能 242
16.1.3 Spark SQL的DataFrame特征 243
16.2 Spark SQL操作Hive 243
16.2.1 添加配置文件,便于Spark SQL访问Hive仓库 243
16.2.2 安装JDBC驱动 243
16.2.3 启动MySQL服务及其Hive的元数据服务 243
16.2.4 启动HDFS集群和Spark集群 244
16.2.5 启动Spark-Shell并测试 244
16.3 Spark SQL操作HDFS 244
16.3.1 操作代码 244
16.3.2 工程文件 246
16.3.3 创建测试数据 246
16.3.4 运行Job并提交到集群 247
16.3.5 查看运行结果 247
16.4 Spark SQL操作关系数据库 248
16.4.1 添加访问MySQL的驱动包 248
16.4.2 添加必要的开发环境 248
16.4.3 使用Spark SQL操作关系数据库 248
16.4.4 初始化MySQL数据库服务 250
16.4.5 准备Spark SQL源数据 251
16.4.6 运行Spark代码 252
16.4.7 创建dist文件夹 252
16.4.8 安装数据库驱动 252
16.4.9 基于集群操作 253
16.4.10 打包工程代码到dist目录下 256
16.4.11 启动集群并提交Job应用 256
16.4.12 检查关系数据库中是否已有数据 258
16.5 习题与思考 258
第17章 Spark Streaming 260
17.1 架构与原理 260
17.1.1 Spark Streaming中的离散流特征 260
17.1.2 Spark Streaming的应用场景 260
17.2 KafKa中间件 261
17.2.1 KafKa的特点 261
17.2.2 ZeroCopy技术 261
17.2.3 KafKa的通信原理 261
17.2.4 KafKa的内部存储结构 262
17.2.5 KafKa的下载 262
17.2.6 KafKa集群搭建 262
17.2.7 启动并使用KafKa集群 263
17.2.8 停止KafKa集群 264
17.2.9 KafKa集成Flume 264
17.3 Socket事件流操作 265
17.3.1 netcat网络Socket控制台工具 265
17.3.2 基于本地的Spark Streaming流式数据分析示例 266
17.3.3 基于集群的Spark Streaming流式数据分析示例 269
17.3.4 基于集群模式下的集群文件I/O流分析示例 272
17.4 KafKa事件流操作 275
17.4.1 基于Receiver模式的KafKa集成 275
17.4.2 基于Direct模式的KafKa集成 278
17.5 I/O文件事件流操作 280
17.5.1 基于路径扫描的Spark Streaming 281
17.5.2 打包至工程的dist目录 284
17.5.3 启动集群 284
第18章 Spark机器学习 289
18.1 机器学习原理 289
18.1.1 机器学习的概念 289
18.1.2 机器学习的分类 289
18.1.3 Spark机器学习的版本演变 290
18.1.4 DataFrame数据结构 290
18.1.5 DataSet数据结构 290
18.1.6 执行引擎的性能与效率 290
18.1.7 Spark 2.x的新特性 290
18.2 线性回归 291
18.2.1 线性回归分析过程 291
18.2.2 矩阵分析过程 291
18.2.3 基于本地模式的线性回归分析 291
18.2.4 基于集群模式的线性回归分析 294
18.3 聚类分析 300
18.3.1 K-Means聚类算法原理 300
18.3.2 聚类分析过程 300
18.3.3 基于本地模式的聚类算法分析 301
18.3.4 基于集群模式的聚类算法分析 305
18.4 协同过滤 312
18.4.1 个性化推荐算法 312
18.4.2 相关性推荐算法 312
18.4.3 基于本地的协同过滤算法分析 312
18.4.4 基于集群的协同过滤算法分析 317
第4篇 项目实战
第19章 基于电力能源的大数据实战 325
19.1 需求分析 325
19.2 项目设计 325
19.2.1 数据采集 325
19.2.2 数据处理 326
19.2.3 数据呈现 326
19.3 数据收集与处理 329
19.3.1 数据收集 329
19.3.2 数据处理 329
19.4 大数据呈现 341
19.4.1 数据传输 341
19.4.2 数据呈现 342
19.5 项目总结 343
前 言
随着信息技术的不断发展,以及物联网、社交网络、移动终端等新兴技术与服务的不断涌现和广泛应用,数据种类日益增多,数据的规模急剧增大,大数据时代已悄然来临。由于大数据对政府决策、商业规划和危险预防等方面所起的重大作用,大数据逐渐成为一种重要的国家战略性资源,受到政府、能源及信息领域的普遍关注。大数据的多样性(Variety)、规模性(Volume)和高速性(Velocity)等特点,使得传统的数据存储、管理、分析技术已经无法满足大数据的处理要求。
时至今日,无论你是来自互联网、通信行业,还是来自金融业、服务业或零售业,相信你都不会对大数据感到陌生。调查显示,32.5%的公司正在搭建大数据平台,29.5%的公司已经在生产环境实践大数据技术,并有成功的用例/产品;24.5%的公司已经做了足够的了解,开发准备就绪;基本不了解的只占调查对象的13.5%。根据某知名数据公司的调查数据,目前国内市场的IT人才缺口已经高达几十万,到2025年,这一数字还会增加至200万,“尤其是大数据技术方面的人才”。在智联、58同城等大型招聘网站发布的招聘职位中,大数据相关岗位占比已经超过50%,薪酬比软件工程师高10%以上。由此可见,大数据人才的培养是一份重大的责任和使命。
1.高校大数据人才培养的背景
(1)高校教育中,大数据人才培养存在起步晚、规模化不足的问题,而且高校学生从大学入学到研究生毕业需要相当长的一段时间。本书从实用的角度出发,为高校快速培养大数据人才提供可行性。
(2)如前文所述,大数据人才紧缺的现象在全球越来越突出。在此背景下,本书旨在弥补高校大数据教材的不足,以模拟真实生产环境为教学目标,为企业培养“到岗就能用”的大数据实用型人才。
(3)经济社会的高速发展,对IT产业(尤其是软件产业)提出了更高的要求,对大数据开发人才从数量和质量方面提出了更高的要求。
(4)教育技术的进步和移动互联网时代的到来,打破了高校进行知识传播的技术壁垒。大量的资本和风险投资涌进IT培训产业。达内、传智播客等实体IT培训机构,开课吧、慕课网、极客网等在线IT培养机构纷纷引入先进的教学理念、强大的技术支持,再加上商业化运作,对高校IT人才培养带来巨大的挑战和竞争压力。
(5)教学环境的变化。教室、实验室硬件配置齐全,实现了高速稳定的互联网接入,笔记本电脑和手机等互联网接入设备日渐普及,这些都为先进教学理念和教学模式(如微课)的实施提供了硬件和软件上的准备。
(6)教育参与者。教师应该树立“教育就是服务”的教育观念,贯彻工程教育的教育理念,从注重“教师教什么”转移到“学生学到了什么”。学生作为“数字原住民”,对新鲜事物、新技术、新教学方式(人性化学习、泛在学习等)有着天然的渴望,教师应尽量多利用新的教学手段,提升课程的吸引力。
综上所述,IT产业、软件技术以及软件人才培养中的教学理念、教学模式、教学环境、教学对象等因素的发展变化倒逼着高校进行教学改革,教师必须围绕以上因素进行教学创新,传统教材形式的革新也势在必行。
2.本书内容
全书内容分为大数据系统基础、Hadoop技术、Spark技术和项目实战4部分。其中,Linux是学习大数据技术的基础,先从Linux入手,打下坚实的基础,之后才能更好地学习Hadoop和Spark。4部分内容分别介绍如下。
大数据系统基础篇通过大数据概述、Linux系统安装、Linux系统基础命令、Shell编程和MySQL数据操作,为以后编程奠定坚实的基础。
Hadoop技术篇以Hadoop生态圈为中心,详细介绍Hadoop高可用集群搭建、HDFS技术、MapReduce技术、Hive技术,为读者学习大数据开发技术提供便利,并以实用的方式简单介绍HBase、Sqoop、Flume工具的使用,使读者在精通一门技术的前提下,能扩展了解相关知识,真正成为一专多能的专业型人才。
Spark技术篇从Spark概述、Scala语言、环境搭建、RDD核心技术、Spark SQL和机器学习等多方面讲解Spark大数据的开发,从基础的Scala语言开始学习,并以Hadoop环境为基础搭建Spark大数据集群,从基础、常用、容易理解的思路出发,帮助读者逐步掌握Spark大数据技术。
项目实战篇从真实项目“电力能源大数据分析”中抽取一部分业务作为实战解读,通过简洁的流程讲解,使读者了解大数据项目开发的整个过程。
3.本书特色
本书不是对相关原理进行纯理论的阐述,而是提供了丰富的上机实践操作和范例程序,极大地降低了读者学习大数据技术的门槛。对于需要直接上机实践的读者而言,本书更像是一本大数据学习的实践上机手册。书中首先展示了如何在单台Windows系统上通过VirtualBox虚拟机安装多台Linux虚拟机,而后建立Hadoop集群,再建立Spark开发环境。搭建这个上机实践的平台并不限制于单台实体计算机,主要是考虑个人读者上机实践的实际条件和环境。对于有条件的公司和学校,参照这个搭建过程,同样可以将实践平台搭建在多台实体计算机上。
搭建好大数据上机实践的软硬件环境之后,就可以在各个章节的学习中结合本书提供的范例程序逐一设置、修改、调试和运行,从中体会大数据实践应用的真谛——对大数据进行高效的“加工”,萃取大数据中蕴含的“智能和知识”,实现数据的“增值”,并终将其应用于实际工作或者商业项目中。
4.本书的使用
第1篇讲解Linux系统和Linux系统上的软件应用。本篇是学习大数据技术的步,就如同你要学习Java开发,必须先学会操作Windows系统一样。
第2篇讲解Hadoop大数据技术。Hadoop大数据集群要求在CentOS 6.9版本的系统上搭建,JDK版本为JDK 1.8,Hadoop版本为Hadoop 2.6.5,Zookeeper版本为Zookeeper 3.4.10。
第3篇讲解在Hadoop大数据技术的基础上搭建Spark环境,所以读者在学习本篇内容之前,需要熟悉第2篇中的Hadoop大数据集群搭建的内容。
第4篇讲解电力大数据项目,是基础HDFS的离线分析项目,读者需要掌握Java知识、Hadoop技术和Web前端知识。
5.作者与致谢
本书由刘彬斌主编。参与本书的编写、资料整理、书稿校对、课件制作等工作的还有李永富、李柏章、周磊、汪磊等。另外,感谢清华大学出版社相关编辑专业和严谨的工作,为本书的顺利出版提供了宝贵的意见,并付出了辛勤的劳动。
编 者
2018年3月
时至今日,无论你是来自互联网、通信行业,还是来自金融业、服务业或零售业,相信你都不会对大数据感到陌生。调查显示,32.5%的公司正在搭建大数据平台,29.5%的公司已经在生产环境实践大数据技术,并有成功的用例/产品;24.5%的公司已经做了足够的了解,开发准备就绪;基本不了解的只占调查对象的13.5%。根据某知名数据公司的调查数据,目前国内市场的IT人才缺口已经高达几十万,到2025年,这一数字还会增加至200万,“尤其是大数据技术方面的人才”。在智联、58同城等大型招聘网站发布的招聘职位中,大数据相关岗位占比已经超过50%,薪酬比软件工程师高10%以上。由此可见,大数据人才的培养是一份重大的责任和使命。
1.高校大数据人才培养的背景
(1)高校教育中,大数据人才培养存在起步晚、规模化不足的问题,而且高校学生从大学入学到研究生毕业需要相当长的一段时间。本书从实用的角度出发,为高校快速培养大数据人才提供可行性。
(2)如前文所述,大数据人才紧缺的现象在全球越来越突出。在此背景下,本书旨在弥补高校大数据教材的不足,以模拟真实生产环境为教学目标,为企业培养“到岗就能用”的大数据实用型人才。
(3)经济社会的高速发展,对IT产业(尤其是软件产业)提出了更高的要求,对大数据开发人才从数量和质量方面提出了更高的要求。
(4)教育技术的进步和移动互联网时代的到来,打破了高校进行知识传播的技术壁垒。大量的资本和风险投资涌进IT培训产业。达内、传智播客等实体IT培训机构,开课吧、慕课网、极客网等在线IT培养机构纷纷引入先进的教学理念、强大的技术支持,再加上商业化运作,对高校IT人才培养带来巨大的挑战和竞争压力。
(5)教学环境的变化。教室、实验室硬件配置齐全,实现了高速稳定的互联网接入,笔记本电脑和手机等互联网接入设备日渐普及,这些都为先进教学理念和教学模式(如微课)的实施提供了硬件和软件上的准备。
(6)教育参与者。教师应该树立“教育就是服务”的教育观念,贯彻工程教育的教育理念,从注重“教师教什么”转移到“学生学到了什么”。学生作为“数字原住民”,对新鲜事物、新技术、新教学方式(人性化学习、泛在学习等)有着天然的渴望,教师应尽量多利用新的教学手段,提升课程的吸引力。
综上所述,IT产业、软件技术以及软件人才培养中的教学理念、教学模式、教学环境、教学对象等因素的发展变化倒逼着高校进行教学改革,教师必须围绕以上因素进行教学创新,传统教材形式的革新也势在必行。
2.本书内容
全书内容分为大数据系统基础、Hadoop技术、Spark技术和项目实战4部分。其中,Linux是学习大数据技术的基础,先从Linux入手,打下坚实的基础,之后才能更好地学习Hadoop和Spark。4部分内容分别介绍如下。
大数据系统基础篇通过大数据概述、Linux系统安装、Linux系统基础命令、Shell编程和MySQL数据操作,为以后编程奠定坚实的基础。
Hadoop技术篇以Hadoop生态圈为中心,详细介绍Hadoop高可用集群搭建、HDFS技术、MapReduce技术、Hive技术,为读者学习大数据开发技术提供便利,并以实用的方式简单介绍HBase、Sqoop、Flume工具的使用,使读者在精通一门技术的前提下,能扩展了解相关知识,真正成为一专多能的专业型人才。
Spark技术篇从Spark概述、Scala语言、环境搭建、RDD核心技术、Spark SQL和机器学习等多方面讲解Spark大数据的开发,从基础的Scala语言开始学习,并以Hadoop环境为基础搭建Spark大数据集群,从基础、常用、容易理解的思路出发,帮助读者逐步掌握Spark大数据技术。
项目实战篇从真实项目“电力能源大数据分析”中抽取一部分业务作为实战解读,通过简洁的流程讲解,使读者了解大数据项目开发的整个过程。
3.本书特色
本书不是对相关原理进行纯理论的阐述,而是提供了丰富的上机实践操作和范例程序,极大地降低了读者学习大数据技术的门槛。对于需要直接上机实践的读者而言,本书更像是一本大数据学习的实践上机手册。书中首先展示了如何在单台Windows系统上通过VirtualBox虚拟机安装多台Linux虚拟机,而后建立Hadoop集群,再建立Spark开发环境。搭建这个上机实践的平台并不限制于单台实体计算机,主要是考虑个人读者上机实践的实际条件和环境。对于有条件的公司和学校,参照这个搭建过程,同样可以将实践平台搭建在多台实体计算机上。
搭建好大数据上机实践的软硬件环境之后,就可以在各个章节的学习中结合本书提供的范例程序逐一设置、修改、调试和运行,从中体会大数据实践应用的真谛——对大数据进行高效的“加工”,萃取大数据中蕴含的“智能和知识”,实现数据的“增值”,并终将其应用于实际工作或者商业项目中。
4.本书的使用
第1篇讲解Linux系统和Linux系统上的软件应用。本篇是学习大数据技术的步,就如同你要学习Java开发,必须先学会操作Windows系统一样。
第2篇讲解Hadoop大数据技术。Hadoop大数据集群要求在CentOS 6.9版本的系统上搭建,JDK版本为JDK 1.8,Hadoop版本为Hadoop 2.6.5,Zookeeper版本为Zookeeper 3.4.10。
第3篇讲解在Hadoop大数据技术的基础上搭建Spark环境,所以读者在学习本篇内容之前,需要熟悉第2篇中的Hadoop大数据集群搭建的内容。
第4篇讲解电力大数据项目,是基础HDFS的离线分析项目,读者需要掌握Java知识、Hadoop技术和Web前端知识。
5.作者与致谢
本书由刘彬斌主编。参与本书的编写、资料整理、书稿校对、课件制作等工作的还有李永富、李柏章、周磊、汪磊等。另外,感谢清华大学出版社相关编辑专业和严谨的工作,为本书的顺利出版提供了宝贵的意见,并付出了辛勤的劳动。
编 者
2018年3月
在线试读
任 务 命 令
3.1 脚 本 配 置
3.1.1 Shell脚本
Shell是用C语言编写的程序,它是用户使用Linux内核的桥梁。Shell既是一种命令语言,又是一种程序设计语言。Shell应用程序提供了一个界面,用户通过这个界面可以访问操作内核的服务。关于Shell的讲解视频可扫描二维码观看。
Shell脚本(Shell Script)是一种为Shell编写的脚本程序。业界所说的Shell通常是指Shell脚本,但Shell和Shell Script是两个不同的概念。
Shell编程跟Java、PHP编程一样,只需要一个能编写代码的文本编辑器和一个能解释执行的脚本解释器。
Linux的Shell种类众多,常见的有:
* Bourne Shell(/usr/bin/sh或/bin/sh)
* Bourne Again Shell(/bin/bash)
* C Shell(/usr/bin/csh)
* K Shell(/usr/bin/ksh)
* Shell for Root(/sbin/sh)
…
3.1.2 Shell变量
关于Shell变量的讲解视频可扫描二维码观看。
Linux的Shell编程是一种非常成熟的编程语言,它支持各种类型的变量。有三种主要的变量类型:环境变量、局部变量和Shell变量。
环境变量:所有的程序,包括Shell启动程序,都能访问环境变量。有些程序需要环境变量来保证其正常运行,必要的时候Shell脚本也可以自定义环境变量。
局部变量:局部变量是在脚本或命令中定义,仅在当前Shell实例中有效,其他Shell程序不能访问的局部变量。
Shell变量:Shell变量是由Shell程序设置的特殊变量。Shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了Shell的正常运行。
Shell编程和其他编程语言的主要不同之处是:在Shell编程中,变量是非类型性质的,不必指定变量是数字类型还是字符串类型。
1.局部变量
Shell编程中,使用局部变量无须事先声明,同时变量名的命名须遵循如下规则:
* 首个字符必须为字母(a~z,A~Z)。
* 中间不能有空格,可以使用下画线(_)。
* 不能使用标点符号。
* 不能使用bash中的关键字(可以用help命令查看保留关键字)。
2.局部变量赋值
变量赋值的格式:
变量名=值
访问变量值:取用一个变量的值,只需在变量名前面加一个$。
示例如下:
#!/bin/bash
# 对变量赋值:
a=”hello world” #等号两边均不能有空格存在
# 打印变量a的值:
echo -e “A is: $an”
备注:bash中变量赋值,等号两边均不能有空格存在。
可以使用自己喜欢的编辑器,输入上述内容,并保存为文件test_hello.bsh,然后执行 chmod x test_hello.bsh使其具有执行权限,后输入“./test_hello”或“bash test_hello.bsh”执行该脚本。
程序运行结果:
A is: hello world
有时候变量名可能会和其他文字混淆,例如:
num=1
echo “this is the $numst”
上述脚本并不会输出”this is the 1st”而是”this is the “,这是由于Shell会去搜索变量 numst的值,而实际上这个变量并未赋值,可以用大括号来告诉 Shell 把 num 变量跟其他部分 分开。num=1
echo “this is the ${num}st”
程序运行结果:
this is the 1st
3.1.3 Shell传递参数
关于Shell传递参数的讲解视频可扫描二维码观看。
1.普通字符
可以在执行Shell脚本时,向脚本传递参数,脚本内获取参数的格式为$n。n代表一个数据,n=1为执行脚本的个参数,n=2为执行脚本的第二个参数,以此类推。
示例如下:以下代码向脚本传递三个参数,并分别输出。
#!/bin/bash
echo “Shell传递参数实例!”;
echo “个参数为$1”;
echo “第二个参数为$2”;
echo “第三个参数为$3”;
为脚本设置可执行权限后,并执行脚本,输出结果如下所示:
[root@localhost ~]# chmod u x test.sh
[root@localhost ~]# ./test.sh 1 8 89
打印结果:
Shell传递参数实例!
个参数为:1
第二个参数为:8
第三个参数为:89
2.字符
除普通字符外,还有一些特殊字符可以用来处理参数,如表3.1所示。
表 3.1
参数
说明
$#
传递到脚本的参数个数
$*
以一个单字符串显示所有向脚本传递的参数
$$
脚本运行的当前进程ID号
$!
后台运行的后一个进程的ID号
$@
与$*相同,但是使用时加引号,并在引号中返回每个参数
$-
显示Shell使用的当前选项,与set命令功能相同
$?
显示后命令的退出状态。0表示没有错误,其他任何值表明有错误
示例如下:
#!/bin/bash
echo “Shell传递参数实例!”;
echo “个参数为$1”;
echo “参数个数为$#”;
echo “传递的参数作为一个字符串显示:$*”;
为脚本设置可执行权限后,并执行脚本,输出结果如下所示:
[root@localhost ~]# chomod u x test.sh
[root@localhost ~]# ./test.sh 1 8 89
打印结果:
Shell传递参数实例
个参数为:1
参数个数为:3
传递的参数作为一个字符串显示:1 8 89
3.1 脚 本 配 置
3.1.1 Shell脚本
Shell是用C语言编写的程序,它是用户使用Linux内核的桥梁。Shell既是一种命令语言,又是一种程序设计语言。Shell应用程序提供了一个界面,用户通过这个界面可以访问操作内核的服务。关于Shell的讲解视频可扫描二维码观看。
Shell脚本(Shell Script)是一种为Shell编写的脚本程序。业界所说的Shell通常是指Shell脚本,但Shell和Shell Script是两个不同的概念。
Shell编程跟Java、PHP编程一样,只需要一个能编写代码的文本编辑器和一个能解释执行的脚本解释器。
Linux的Shell种类众多,常见的有:
* Bourne Shell(/usr/bin/sh或/bin/sh)
* Bourne Again Shell(/bin/bash)
* C Shell(/usr/bin/csh)
* K Shell(/usr/bin/ksh)
* Shell for Root(/sbin/sh)
…
3.1.2 Shell变量
关于Shell变量的讲解视频可扫描二维码观看。
Linux的Shell编程是一种非常成熟的编程语言,它支持各种类型的变量。有三种主要的变量类型:环境变量、局部变量和Shell变量。
环境变量:所有的程序,包括Shell启动程序,都能访问环境变量。有些程序需要环境变量来保证其正常运行,必要的时候Shell脚本也可以自定义环境变量。
局部变量:局部变量是在脚本或命令中定义,仅在当前Shell实例中有效,其他Shell程序不能访问的局部变量。
Shell变量:Shell变量是由Shell程序设置的特殊变量。Shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了Shell的正常运行。
Shell编程和其他编程语言的主要不同之处是:在Shell编程中,变量是非类型性质的,不必指定变量是数字类型还是字符串类型。
1.局部变量
Shell编程中,使用局部变量无须事先声明,同时变量名的命名须遵循如下规则:
* 首个字符必须为字母(a~z,A~Z)。
* 中间不能有空格,可以使用下画线(_)。
* 不能使用标点符号。
* 不能使用bash中的关键字(可以用help命令查看保留关键字)。
2.局部变量赋值
变量赋值的格式:
变量名=值
访问变量值:取用一个变量的值,只需在变量名前面加一个$。
示例如下:
#!/bin/bash
# 对变量赋值:
a=”hello world” #等号两边均不能有空格存在
# 打印变量a的值:
echo -e “A is: $an”
备注:bash中变量赋值,等号两边均不能有空格存在。
可以使用自己喜欢的编辑器,输入上述内容,并保存为文件test_hello.bsh,然后执行 chmod x test_hello.bsh使其具有执行权限,后输入“./test_hello”或“bash test_hello.bsh”执行该脚本。
程序运行结果:
A is: hello world
有时候变量名可能会和其他文字混淆,例如:
num=1
echo “this is the $numst”
上述脚本并不会输出”this is the 1st”而是”this is the “,这是由于Shell会去搜索变量 numst的值,而实际上这个变量并未赋值,可以用大括号来告诉 Shell 把 num 变量跟其他部分 分开。num=1
echo “this is the ${num}st”
程序运行结果:
this is the 1st
3.1.3 Shell传递参数
关于Shell传递参数的讲解视频可扫描二维码观看。
1.普通字符
可以在执行Shell脚本时,向脚本传递参数,脚本内获取参数的格式为$n。n代表一个数据,n=1为执行脚本的个参数,n=2为执行脚本的第二个参数,以此类推。
示例如下:以下代码向脚本传递三个参数,并分别输出。
#!/bin/bash
echo “Shell传递参数实例!”;
echo “个参数为$1”;
echo “第二个参数为$2”;
echo “第三个参数为$3”;
为脚本设置可执行权限后,并执行脚本,输出结果如下所示:
[root@localhost ~]# chmod u x test.sh
[root@localhost ~]# ./test.sh 1 8 89
打印结果:
Shell传递参数实例!
个参数为:1
第二个参数为:8
第三个参数为:89
2.字符
除普通字符外,还有一些特殊字符可以用来处理参数,如表3.1所示。
表 3.1
参数
说明
$#
传递到脚本的参数个数
$*
以一个单字符串显示所有向脚本传递的参数
$$
脚本运行的当前进程ID号
$!
后台运行的后一个进程的ID号
$@
与$*相同,但是使用时加引号,并在引号中返回每个参数
$-
显示Shell使用的当前选项,与set命令功能相同
$?
显示后命令的退出状态。0表示没有错误,其他任何值表明有错误
示例如下:
#!/bin/bash
echo “Shell传递参数实例!”;
echo “个参数为$1”;
echo “参数个数为$#”;
echo “传递的参数作为一个字符串显示:$*”;
为脚本设置可执行权限后,并执行脚本,输出结果如下所示:
[root@localhost ~]# chomod u x test.sh
[root@localhost ~]# ./test.sh 1 8 89
打印结果:
Shell传递参数实例
个参数为:1
参数个数为:3
传递的参数作为一个字符串显示:1 8 89
评论
还没有评论。