在线客服
Hadoop + Spark 大数据巨量分析与机器学习整合开发实战图书
人气:14

Hadoop + Spark 大数据巨量分析与机器学习整合开发实战

手把手教你学习Hadoop + Spark免费赠送范例程序下载 提供微博交流学习及技术支持

作者简介

林大贵,作者从事IT产业多年,包括系统设计、网站开发等诸多领域,具备丰富实战开发经验,多版多部具有影响力的作品。

目录

第1章 大数据与机器学习 1

1.1 大数据定义 2

1.2 Hadoop简介 2

1.3 Hadoop HDFS分布式文件系统 3

1.4 Hadoop MapReduce的介绍 5

1.5 Spark的介绍 6

1.6 机器学习的介绍 8

第2章 VirtualBox虚拟机软件的安装 11

2.1 VirtualBox的下载和安装 12

2.2 设置VirtualBox语言版本 16

2.3 设置VirtualBox存储文件夹 17

2.4 在VirtualBox创建虚拟机 18

第3章 Ubuntu Linux操作系统的安装 23

3.1 下载安装Ubuntu的光盘文件 24

3.2 在Virtual设置Ubuntu虚拟光盘文件 26

3.3 开始安装Ubuntu 28

3.4 启动Ubuntu 33

3.5 安装增强功能 34

3.6 设置默认输入法 38

3.7 设置“终端”程序 40

3.8 设置“终端”程序为白底黑字 42

3.9 设置共享剪贴板 43

第4章 Hadoop Single Node Cluster的安装 46

4.1 安装JDK 47

4.2 设置SSH无密码登录 50

4.3 下载安装Hadoop 53

4.4 设置Hadoop环境变量 56

4.5 修改Hadoop配置设置文件 58

4.6 创建并格式化HDFS目录 62

4.7 启动Hadoop 63

4.8 打开Hadoop ResourceManager Web界面 66

4.9 NameNode HDFS Web界面 67

第5章 Hadoop Multi Node Cluster的安装 69

5.1 把Single Node Cluster复制到data1 71

5.2 设置VirtualBox网卡 73

5.3 设置data1服务器 76

5.4 复制data1服务器到data2、data3、master 84

5.5 设置data2、data3服务器 87

5.6 设置master服务器 91

5.7 master连接到data1、data2、data3创建HDFS目录 94

5.8 创建并格式化NameNode HDFS目录 98

5.9 启动Hadoop Multi Node Cluster 99

5.10 打开Hadoop ResourceManager Web界面 102

5.11 打开NameNode Web界面 103

第6章 Hadoop HDFS命令 104

6.1 启动Hadoop Multi-Node Cluster 105

6.2 创建与查看HDFS目录 107

6.3 从本地计算机复制文件到HDFS 109

6.4 将HDFS上的文件复制到本地计算机 114

6.5 复制与删除HDFS文件 116

6.6 在Hadoop HDFS Web用户界面浏览HDFS 118

第7章 Hadoop MapReduce 122

7.1 介绍wordCount.Java 123

7.2 编辑wordCount.Java 124

7.3 编译wordCount.Java 127

7.4 创建测试文本文件 129

7.5 运行wordCount.Java 130

7.6 查看运行结果 131

7.7 Hadoop MapReduce的缺点 132

第8章 Spark的安装与介绍 133

8.1 Spark的Cluster模式架构图 134

8.2 Scala的介绍与安装 135

8.3 安装Spark 138

8.4 启动spark-shell交互界面 141

8.5 设置spark-shell显示信息 142

8.6 启动Hadoop 144

8.7 本地运行spark-shell程序 145

8.8 在Hadoop YARN运行spark-shell 147

8.9 构建Spark Standalone Cluster执行环境 149

8.10 在Spark Standalone运行spark-shell 155

第9章 Spark RDD 159

9.1 RDD的特性 160

9.2 基本RDD“转换”运算 161

9.3 多个RDD“转换”运算 167

9.4 基本“动作”运算 169

9.5 RDD Key-Value 基本“转换”运算 171

9.6 多个RDD Key-Value“转换”运算 175

9.7 Key-Value“动作”运算 178

9.8 Broadcast广播变量 181

9.9 accumulator累加器 184

9.10 RDD Persistence持久化 186

9.11 使用Spark创建WordCount 188

9.12 Spark WordCount详细解说 191

第10章 Spark的集成开发环境 195

10.1 下载与安装eclipse Scala IDE 197

10.2 下载项目所需要的Library 201

10.3 启动eclipse 205

10.4 创建新的Spark项目 206

10.5 设置项目链接库 210

10.6 新建scala程序 211

10.7 创建WordCount测试文本文件 213

10.8 创建WordCount.scala 213

10.9 编译WordCount.scala程序 215

10.10 运行WordCount.scala程序 217

10.11 导出jar文件 220

10.12 spark-submit的详细介绍 223

10.13 在本地local模式运行WordCount程序 224

10.14 在Hadoop yarn-client运行WordCount程序 226

10.15 在Spark Standalone Cluster上运行WordCount程序 230

10.16 本书范例程序的安装说明 231

第11章 创建推荐引擎 236

11.1 推荐算法介绍 237

11.2 “推荐引擎”大数据分析使用场景 237

11.3 ALS推荐算法的介绍 238

11.4 ml-100k推荐数据的下载与介绍 240

11.5 使用spark-shell导入ml-100k数据 242

11.6 查看导入的数据 244

11.7 使用ALS.train进行训练 247

11.8 使用模型进行推荐 250

11.9 显示推荐的电影名称 252

11.10 创建Recommend项目 255

11.11 Recommend.scala程序代码 257

11.12 创建PrepareData()数据准备 259

11.13 recommend()推荐程序代码 261

11.14 运行Recommend.scala 263

11.15 创建AlsEvaluation.scala调校推荐引擎参数 266

11.16 创建PrepareData()数据准备 269

11.17 进行训练评估 270

11.18 运行AlsEvaluation 279

11.19 修改Recommend.scala为参数组合 281

第12章 StumbleUpon数据集 282

12.1 StumbleUpon数据集简介 283

12.2 下载StumbleUpon数据 285

12.3 用LibreOffice Calc 电子表格查看train.tsv 288

12.4 二元分类算法 291

第13章 决策树二元分类 292

13.1 决策树的介绍 293

13.2 创建Classification项目 294

13.3 开始输入RunDecisionTreeBinary.scala程序 296

13.4 数据准备阶段 298

13.5 训练评估阶段 303

13.6 预测阶段 308

13.7 运行RunDecisionTreeBinary.scala 311

13.6 修改RunDecisionTreeBinary调校训练参数 313

13.7 运行RunDecisionTreeBinary进行参数调校 320

13.8 运行RunDecisionTreeBinary不进行参数调校 323

第14章 逻辑回归二元分类 326

14.1 逻辑回归分析介绍 327

14.2 RunLogisticRegression WithSGDBinary.scala程序说明 328

14.3 运行RunLogisticRegression WithSGDBinary.scala进行参数调校 331

14.4 运行RunLogisticRegression WithSGDBinary.scala不进行参数调校 335

第15章 支持向量机SVM二元分类 337

15.1 支持向量机SVM算法的基本概念 338

15.2 RunSVMWithSGDBinary.scala 程序说明 338

15.3 运行SVMWithSGD.scala进行参数调校 341

15.4 运行SVMWithSGD.scala不进行参数调校 344

第16章 朴素贝叶斯二元分类 346

16.1 朴素贝叶斯分析原理的介绍 347

16.2 RunNaiveBayesBinary.scala程序说明 348

16.3 运行NaiveBayes.scala进行参数调校 351

16.4 运行NaiveBayes.scala不进行参数调校 353

第17章 决策树多元分类 355

17.1 “森林覆盖植被”大数据问题分析场景 356

17.2 UCI Covertype数据集介绍 357

17.3 下载与查看数据 359

17.4 创建RunDecisionTreeMulti.scala 361

17.5 修改RunDecisionTreeMulti.scala程序 362

17.6 运行RunDecisionTreeMulti.scala进行参数调校 367

17.7 运行RunDecisionTreeMulti.scala不进行参数调校 371

第18章 决策树回归分析 373

18.1 Bike Sharing大数据问题分析 374

18.2 Bike Sharing数据集 375

18.3 下载与查看数据 375

18.4 创建RunDecisionTreeRegression.scala 378

18.5 修改RunDecisionTreeRegression.scala 380

18.6 运行RunDecisionTreeRegression. scala进行参数调校 389

18.7 运行RunDecisionTreeRegression. scala不进行参数调校 392

第19章 使用Apache Zeppelin 数据可视化 394

19.1 Apache Zeppelin简介 395

19.2 安装Apache Zeppelin 395

19.3 启动Apache Zeppelin 399

19.4 创建新的Notebook 402

19.5 使用Zeppelin运行Shell 命令 403

19.6 创建临时表UserTable 406

19.7 使用Zeppelin运行年龄统计Spark SQL 407

19.8 使用Zeppelin运行性别统计Spark SQL 409

19.9 按照职业统计 410

19.10 Spark SQL加入文本框输入参数 412

19.11 加入选项参数 414

19.12 同时显示多个统计字段 416

19.13 设置工具栏 419

19.14 设置段落标题 420

19.15 设置Paragraph段落的宽度 422

19.16 设置显示模式 423

在线预览

第 1 章 大数据与机器学习

1.1 大数据定义1.2 Hadoop简介1.3 Hadoop HDFS分布式文件系统1.4 Hadoop MapReduce的介绍1.5 Spark的介绍1.6 机器学习的介绍

1.1 大数据定义大数据(Big data)又称为巨量资料、巨量数据或海量数据。一般来说大数据的特性可归类为3V:? Volume(大量数据)? 因特网、企业 IT、物联网、社区、短信、电话、网络搜索、在线交易等,随时都在快速累积庞大的数据。? 数据量很容易达到TB(Terabyte,1024 GB),甚至 PB(Petabyte,1024TB)或EB(Exabyte,1024 PB)的等级。? Variety(多样性)大数据的数据类型非常多样化,可分为非结构化信息和结构化信息。? 非结构化信息:文字、图片、图像、视频、音乐、地理位置信息、个人化信息——如社区、交友数据等。? 结构化信息:数据库、数据仓库等。? Velocity(时效性)? 数据的传输流动:随着带宽越来越大、设备越来越多,每秒产生的数据流越来越大。? 组织必须能实时处理大量的信息:因为时间太久就失去了数据的价值,数据必须能在最短时间内得出分析结果。大数据的影响已经深入到各个领域和行业,在商业、经济及其他领域中,将大量数据进行分析后,就可得出许多数据的关联性。可用于预测商业趋势、营销研究、金融财务、疾病研究、打击犯罪等。决策行为将基于数据和分析的结果,而不是依靠经验和直觉。1.2 Hadoop 简介Hadoop是存储与处理大量数据的平台,是Apache软件基金会的开放源码、免费且广泛使用的软件。Hadoop名称来自于原作者孩子的黄色小象玩具。这个名字容易拼字与发音,适合作为软件开发代码,黄色小象因此成为Hadoop的标志。? Hadoop的发展历史2002年Doug Cutting与Mike Cafarelia开始进行Nutch项目。2003年Google发表GFS(Google File System)与MapReduce论文。2004年Doug Cutting开始将DFS与MapReduce加入Nutch项目。2006年Doug Cutting加入Yahoo团队,并将Nutch改名为Hadoop。2008年Yahoo使用Hadoop包含了910个集群,对1TB的数据排序花了297秒。? Hadoop特性特性 说明可扩展性(Scalable) 由于Hadoop采用分布式计算与存储,当我们扩充容量或运算时,不需要更换整个系统,只需要增加新的数据节点服务器即可经济性(Economical) 由于Hadoop采用分布式计算与存储,不必使用昂贵高端的服务器,只需一般等级的服务器就可架构出高性能、高容量的集群弹性(Flexible) 传统的关系数据库存储数据时必须有数据表结构schema(各个数据对象的集合),然而Hadoop存储的数据是非结构化(schema-less)的,也就是说可以存储各种形式、不同数据源的数据性(Reliable) Hadoop采用分布式架构,因此即使某一台服务器硬件坏掉,甚至整个机架坏掉,HDFS仍可正常运行,因为数据还会有另外2个副本1.3 Hadoop HDFS分布式文件系统 HDFS采用分布式文件系统(Hadoop Distributed File System),可以由单台服务器扩充到数千台服务器,如图1-1所示。 图1-1 HDFS采用分布式文件系统的可扩充架构? NameNode服务器负责管理与维护HDFS目录系统并控制文件的读写操作。? 多个DataNode服务器负责存储数据,在图1-1中我们只列出3个DataNode,实际上大型的集群可以有成千上万个节点。? HDFS设计的前提与目标? 硬件故障是常态而不是异常(Hardware Failure)HDFS是设计运行在低成本的普通服务器上的。硬件故障是常态,而不是异常,所以HDFS被设计成具有高度容错能力,能够实时检测错误并且自动恢复,这是HDFS最核心的设计目标。? Streaming流式数据存取(Streaming Data Access)运行在HDFS上的应用程序会通过Streaming存取数据集。HDFS的主要设计是批处理,而不是实时互动处理,优点是可以提高存取大量数据的能力,但是牺牲了响应时间。? 大数据集(Large Data Sets)为了存储大数据集,HDFS提供了cluster集群架构,用于存储大数据文件,集群可扩充至数百个节点。? 简单一致性模型(Simple Coherency Model)HDFS的存取模式是一次写入多次读取(write-once-read-many)。一个文件被创建后就不会再修改。这样设计的优点是:可以提高存储大量数据的能力,并简化数据一致性的问题。? 移动“计算”比移动“数据”成本更低(Moving Computation is Cheaper than Moving Data)当我们的cluster集群存储了大量的数据时,要搬移数据必须耗费大量的时间成本。因此如果我们有“计算”数据的需求时,就会将“计算功能”在接近数据的服务器中运行,而不是搬移数据。? 跨硬件与软件平台HDFS在设计时就考虑到平台的可移植性。这种特性有利于Hadoop的推广。? HDFS文件存储架构(见图1-2) 图1-2 HDFS文件存储架构? 文件分割? 当用户以HDFS命令要求存储文件时,系统会将文件切割为多个区块(Block),每个区块是64MB。在图1-2中,文件被分割为A、B、C共3个区块。? 区块副本策略? 一个文件区块默认会复制成3份,你可以在Hadoop配置中设置文件区块要创建几个副本。? 文件区块损坏时,NameNode会自动寻找位于其他DataNode上的副本来恢复数据,维持3份的副本策略。? 机架感知? 在图1-2中,共有Rack1、Rack2、Rack3共3个机架,每个机架都有4台DataNode服务器。? HDFS具备机架感知功能,如图1-2所示。以Block C为例:及时份副本放在Rack1机架的节点,第二份放在同机架Rack1的不同节点,一份放在不同机架Rack3的不同节点。? 这样设计的好处是防止数据遗失,有任何机架出现故障仍可以保障恢复数据,提高网络性能。1.4 Hadoop MapReduce的介绍利用大数据进行数据分析处理时,数据量庞大,所需的运算量也巨大。Hadoop MapReduce的做法是采用分布式计算的技术:? Map将任务分割成更小任务,由每台服务器分别运行,如图1-3所示。? Reduce将所有服务器的运算结果汇总整理,返回的结果。通过MapReduce方式,可以在上千台机器上并行处理巨量的数据,大大减少数据处理的时间。? MapReduce 版本2.0 YARNHadoop 新的MapReduce架构称为YARN(Yet Another Resource Negotiator,另一种资源协调者),是效率更高的资源管理核心。可以到下列网址查看YARN架构图(见图1-4):hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html 图1-4 YARN资源管理系统的架构图从图1-4中可以看到:? 在Client客户端,用户会向Resource Manager请求执行运算(或执行任务)。? 在NameNode会有Resource Manager统筹管理运算的请求。? 在其他的DataNode会有Node Manager负责运行,以及监督每一个任务(task),并且向Resource Manager汇报状态。? Hadoop MapReduce的计算框架如图1-5所示,Hadoop MapReduce在运算时,需要将中间产生的数据存储在硬盘中。然而,磁盘I/O往往是性能的瓶颈,因此会有读写数据延迟的问题。 图1-5 Hadoop MapReduce运算过程的示意图在后续章节,我们介绍的Spark是基于内存的计算框架,可以大幅提升性能。1.5 Spark的介绍Apache Spark是开放源码的集群运算框架,由加州大学伯克利分校的AMPLab开发。Spark是一个弹性的运算框架,适合进行Spark Streaming数据流处理、Spark SQL互动分析、MLlib机器学习等应用,因此Spark可成为一个用途广泛的大数据运算平台。Spark允许用户将数据加载到cluster集群的内存中存储,并多次重复运算,非常适合用于机器学习的算法。? Spark in-memory的计算框架如图1-6所示,Spark是基于内存的计算框架。Spark在运算时,将中间产生的数据暂存在内存中,因此可以加快运行速度。尤其是需要反复操作的次数越多,所需读取的数据量越大,就越能看出Spark的性能。Spark在内存中运行程序,命令运行速度(或命令周期)能比Hadoop MapReduce的命令运行速度快上100倍,即便是运行于硬盘上时Spark的速度也能快上10倍。 图1-6 Spark in-memory的计算框架? Spark发展历史年代 说明2009 由Matei Zaharia在加州大学伯克利分校的AMPLab开发2010 通过BSD授权条款开放源码2013 该项目被捐赠给Apache软件基金会2014/2 Spark成为Apache的顶级项目2014/11 Databricks团队使用Spark刷新数据排序的世界纪录2015/3 Spark 1.3.1版? Spark特色特色 说明命令周期短 Spark是基于内存计算的开放源码集群运算系统,比原先的Hadoop MapReduce快100倍易于开发程序 目前Spark支持多种语言:Scala、Python、Java,也就是说开发者可以根据应用的环境来决定使用哪一种语言开发Spark程序,更具弹性,更符合开发时的需求Hadoop兼容 Spark提供了Hadoop Storage API,使它支持Hadoop的HDFS存储系统。并且支持Hadoop YARN,可共享存储资源与运算,而且几乎与Hive兼容可在各平台运行 ? 我们可以在本地端的机器上运行Spark程序,只需要import Spark的链接库即可? 也可以在自有的群集上运行Spark程序,例如Mesos、Hadoop YARN等自行建立的群集? 针对更大规模的计算工作,我们可以选择将Spark程序送至AWS的EC2平台上运行,按照用户使用的计算资源计费? Spark主要功能(参考图1-7) 图1-7 Spark的主要功能模块功能 说明Spark SQL Spark SQL可以使用熟知的SQL查询语言来运行数据分析Spark Streaming Spark Streaming可实现实时的数据串流的处理,具有大数据量、容错性、可扩充性等特点GraphX GraphX是Spark上的分布式图形处理架构,可用图表计算MLlib MLlib是一个可扩充的Spark机器学习库,可使用许多常见的机器学习算法,简化大规模机器学习的时间。算法包括分类与回归、支持向量机、回归、线性回归、决策树、朴素贝叶斯、聚类分析、协同过滤等1.6 机器学习的介绍由于机器学习技术的进步,应用相当广泛,例如推荐引擎、定向广告、需求预测、垃圾邮件过滤、医学诊断、自然语言处理、搜索引擎、欺诈检测、证券分析、视觉识别、语音识别、手写识别等。? 机器学习架构机器学习(Machine Learning)是通过算法,使用历史数据进行训练,训练完成后会产生模型。未来当有新的数据提供时,我们可以使用训练产生的模型进行预测。机器学习训练用的数据是由Features、Label组成的。? Feature:数据的特征,例如湿度、风向、风速、季节、气压。? Label:数据的标签,也就是我们希望预测的目标,例如降雨(0.不会下雨、1.会下雨)、天气(1.晴天、2.雨天、3.阴天、4.下雪)、气温。如图1-8所示,机器学习可分为以下两个阶段。? 训练阶段(Training)训练数据是过去累积的历史数据,可能是文本文件、数据库或其他来源。经过Feature Extraction(特征提取),产生Feature(数据特征)与Label(预测目标),然后经过机器学习算法的训练后产生模型。? 预测阶段(Predict)新输入数据(可能是文本文件、数据库或其他来源),经过Feature Extraction(特征提取)产生Feature,使用训练完成的模型进行预测,产生预测结果。 图1-8 机器学习的两个阶段? 机器学习分类对于有监督的学习(Supervised Learning),从现有数据我们希望预测的答案有下列分类。? 二元分类我们已知湿度、风向、风速、季节、气压等数据特征,希望预测当天是否会下雨(0. 不会下雨、1. 会下雨)。因为希望预测的目标Label只有2种选项,所以就像是非题。? 多元分类我们已知湿度、风向、风速、季节、气压等数据特征,希望预测当天的天气(1. 晴天、2. 雨天、3. 阴天、4. 下雪)。因为希望预测的目标Label有多个选项,所以就像选择题。? 回归分析我们已知湿度、风向、风速、季节、气压等数据特征,希望预测当天的气温。因为希望预测的目标Label是连续值,所以就像是计算题。但是对于无监督的学习(Unsupervised Learning),从现有数据我们不知道要预测的答案,所以没有Label(预测目标)。cluster聚类分析的目的是将数据分成几个相异性较大的群组,而群组内的相似性较高。根据上述内容我们可以整理出下列表格。分类 算法 Features(特征) Label(预测目标)有监督的学习 二元分类(Binary Classification) 湿度、风向、风速、季节、气压…… 只有0与1选项(是非题)0. 不会下雨、1. 会下雨有监督的学习 多元分类(Multi-Class Classification) 湿度、风向、风速、季节、气压…… 有多个选项(选择题)1. 晴天、2. 雨天、3. 阴天、4. 下雪有监督的学习 回归分析(Regression) 湿度、风向、风速、季节、气压…… 值是数值(计算题)温度可能是 -50~50度的范围无监督的学习 聚类分析(Clustering) 湿度、风向、风速、季节、气压…… 无LabelCluster聚类分析;目的是将数据分成几个相异性较大的群组,而群组内的相似性较高机器学习分类可以整理成图1-9。 图1-9 机器学习的分类

网友评论(不代表本站观点)

来自匿名用**的评论:

质量还不错

2017-01-13 17:25:54
来自w***8(**的评论:

内容不错!给开发人员用的

2017-02-10 22:02:44
来自cqxuche**的评论:

没什么用,就是截图加上粘贴

2017-02-11 17:51:51
来自匿名用**的评论:

种类齐全,值得购买

2017-02-23 15:08:55
来自p***2(**的评论:

包装印刷都不错。

2017-03-08 21:03:01
来自匿名用**的评论:

挺好的,发货送货都很快

2017-03-15 19:02:26
来自峦***(**的评论:

适合模仿学习。

2017-04-15 14:39:08
来自无昵称**的评论:

还没看完看完再评论

2017-04-20 11:06:28
来自宁***s(**的评论:

专业用书 非常好 正版 在当当买书放心

2017-04-23 14:02:49
来自宁***s(**的评论:

非常好的专业书,正版1

2017-04-27 09:01:43
来自**(匿名**的评论:

内容浅显易懂,入门级书籍

2017-05-22 18:42:50
来自匿名用**的评论:

很实用,方便

2017-06-04 20:06:06
来自春***7(**的评论:

有点简单,适合初学

2017-06-18 23:01:50
来自无昵称**的评论:

还没看应该是本不错的指南

2017-06-26 09:31:08
来自无昵称**的评论:

纸张很好!

2017-07-07 23:03:04
来自无昵称**的评论:

包装完好,物流很快!

2017-07-07 23:19:12
来自无昵称**的评论:

纸张很好!

2017-07-07 23:26:39
来自无昵称**的评论:

书很好!!

2017-07-07 23:51:13
来自无昵称**的评论:

纸张很好!

2017-07-07 23:51:43
来自无昵称**的评论:

纸张很好!

2017-07-08 00:15:35
来自匿名用**的评论:

很好的商品

2017-07-28 23:00:42
来自无昵称**的评论:

还不错,还没来及看,先评论了!

2017-07-31 13:54:32
来自匿名用**的评论:

包装不错 性价比很高 印刷很正 纸质好 排版不错包装不错 性价比很高 印刷很正 纸质好 排版不错

2017-08-21 17:49:24
来自无昵称**的评论:

不错,很实用,纸质也很好,很喜欢

2017-08-28 14:36:11
来自无昵称**的评论:

速度快,一步步讲解很详细,适合新人

2017-09-10 10:50:26
来自shuobud**的评论:

得着时间好好研究

2017-09-16 01:21:17
来自无昵称**的评论:

感觉还行…

2017-11-01 12:49:02
来自匿名用**的评论:

很专业的书,对于我这种还没入门的,不太容易看懂,但是看起来还是挺好的

2017-11-08 12:47:14

免责声明

更多出版社