Spark分布式处理实战

978-7-115-62070-5
作者: 刘均王璐烽
译者:
编辑: 秦健
分类: Spark

图书目录:

详情

本书以项目实践作为主线,结合必需的理论知识,以任务的形式进行内容设计,每个任务都包含任务描述及任务实施的步骤,读者按照实施步骤进行操作就可以完成相应的学习任务,从而不断提升项目实践能力。本书主要内容涉及Spark基本原理、基于IDEA搭建Spark开发环境、RDD基本原理、Spark SQL基本操作流程、电商业务系统的基本流程、电商用户行为分析的基本指标以及分析过程、通过不同的维度对销售数据进行分析、通过不同的维度对订单数据进行分析以及常用的可视化分析图表的应用场景等。 本书适合需要使用Spark进行大数据处理的程序员、架构师和产品经理作为技术参考和培训资料,也可作为高校本科生和研究生的教材。

图书摘要

版权信息

书名:Spark分布式处理实战

ISBN:978-7-115-62070-5

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。


版  权

主  编 刘 均 王璐烽

  主  编 刘海舒 张 强 杜 瑶 黄智慧

责任编辑 秦 健

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315

内 容 提 要

主  编 刘 均 王璐烽

本书以项目实践作为主线,结合必需的理论知识,以任务的形式进行内容设计,每个任务都包含任务描述及任务实施的步骤,读者按照实施步骤进行操作就可以完成相应的学习任务,从而不断提升项目实践能力。本书主要内容涉及Spark基本原理、基于IDEA搭建Spark开发环境、RDD基本原理、Spark SQL基本操作流程、电商业务系统的基本流程、电商用户行为分析的基本指标以及分析过程、通过不同的维度对销售数据进行分析、通过不同的维度对订单数据进行分析以及常用的可视化分析图表的应用场景等。

本书适合需要使用Spark进行大数据处理的程序员、架构师和产品经理作为技术参考和培训资料,也可作为高校本科生和研究生的教材。

前  言

写作背景

党中央、国务院高度重视大数据产业发展,推动实施国家大数据战略。习近平总书记就推动大数据和数字经济相关战略部署、发展大数据产业多次做出重要指示。工业和信息化部会同相关部委建立大数据促进发展部际联席会议制度,不断完善政策体系,聚力打造大数据产品和服务体系,积极推进各领域大数据融合应用,培育发展大数据产业集聚高地。

党的二十大报告指出“深入实施科教兴国战略、人才强国战略、创新驱动发展战略,开辟发展新领域新赛道,不断塑造发展新动能新优势”。移动互联网与大数据技术的飞速发展,极大地改变了人们的生活方式,人们可以随时随地享受便捷的网络服务,电子商务(简称“电商”)系统已经成为人们生活中不可缺少的消费方式。在多年的快速发展中,国内的大型电商平台积累了海量的用户行为日志、商品订单等数据。大数据技术需要从海量的数据中对电商数据进行处理和分析,探索数据之间的内在规律,挖掘有价值的信息,以满足用户个性化和精准化的服务需求。

在众多的大数据技术中,Apache Spark成为大数据分析的重要工具之一。Spark是加州大学伯克利分校的AMP实验室开源的基于内存的并行计算框架。相对于基于Hadoop的MapReduce计算而言,Spark可以将中间计算结果保存在内存中,不再需要重复读写硬盘数据,大大提升了并行计算的效率,在大数据企业级项目中得到广泛应用。

本书采用理论与实践相结合的方式,以项目为主线来设计教学实践环节,由浅入深地讲解了Spark在企业级项目中的应用,尤其是大型电商平台的数据分析项目中的应用。读者在项目学习过程中可以边学边练,循序渐进。按照本书讲解的步骤进行操作,读者可以完成相应的学习任务。通过本书的学习,读者可以逐步增强Spark大数据分析项目的实践能力。

本书读者对象

本书适合需要使用Spark进行大数据处理的程序员、架构师和产品经理作为技术参考和培训资料,也可作为高校本科生和研究生的教材。

如何阅读本书

本书以项目实践作为主线,结合必需的理论知识,以任务的形式进行设计。每个任务都包含任务描述及任务实施的步骤,读者按照实施步骤进行操作就可以完成相应的学习任务,不断提升项目实践能力。

各项目的主要内容如下。

项目1讲解Spark基本原理,通过案例实现Spark集群的安装和配置,完成Spark任务集群提交与运行的任务。

项目2讲解如何基于IDEA搭建Spark开发环境,编写Spark单词统计程序,将程序部署到Spark集群中并运行。

项目3介绍RDD的基本原理,通过案例讲解Spark RDD转换算子和行动算子的使用方法、RDD分区的原理、共享变量的实现原理。

项目4通过案例讲解Spark SQL基本操作流程,Spark SQL常用的数据源的使用方法,Spark SQL内置函数和自定义函数的使用方法,Spark SQL的关联表、分组集合、排序等操作方法。

项目5介绍电商业务系统的基本流程,通过案例讲解电商系统数据库的设计方法以及电商数据分析的基本流程。

项目6以一个国内某大型电商APP系统提供的用户行为数据作为分析对象,讲解电商用户行为分析的基本指标以及分析过程,主要包括用户访问量分析、用户购买行为分析及各阶段转化率分析等。

项目7以国内某大型电商平台提供的美妆商品销售数据集作为分析对象(数据集时间涵盖了双十一电商购物节),通过不同的维度对销售数据进行分析,主要维度包括店铺维度、商品维度等。

项目8以国内某大型电商平台提供的订单数据集作为分析对象,通过不同的维度对订单数据进行分析,主要维度包括时间维度、区域维度等。

项目9介绍常用的可视化分析图表的应用场景,以电商用户行为分析指标、电商销售数据分析指标以及电商订单数据分析指标作为数据可视化分析的指标,讲解Superset数据可视化分析工具的使用方法。

勘误和支持

由于作者的水平有限,加上编写时间仓促,书中难免会有疏漏之处,恳请读者批评指正。如果你有更多的宝贵意见,欢迎通过出版社与我们取得联系,期待能够得到你们的真挚反馈。

编著者

资源与支持

资源获取

本书提供如下资源:

教学大纲;

程序源码;

教学课件;

微视频;

习题答案;

本书思维导图;

异步社区7天VIP会员。

要获得以上资源,您可以扫描下方二维码,根据指引领取。

提交勘误

作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。

当您发现错误时,请登录异步社区(https://www.epubit.com),按书名搜索,进入本书页面,点击“发表勘误”,输入勘误信息,点击“提交勘误”按钮即可(见右图)。本书的作者和编辑会对您提交的勘误进行审核,确认并接受后,您将获赠异步社区的 100 积分。积分可用于在异步社区兑换优惠券、样书或奖品。

与我们联系

我们的联系邮箱是contact@epubit.com.cn。

如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。

如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们。

如果您所在的学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。

如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接发邮件给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。

关于异步社区和异步图书

“异步社区”(www.epubit.com)是由人民邮电出版社创办的IT专业图书社区,于2015年8月上线运营,致力于优质内容的出版和分享,为读者提供高品质的学习内容,为作译者提供专业的出版服务,实现作者与读者在线交流互动,以及传统出版与数字出版的融合发展。

“异步图书”是异步社区策划出版的精品IT图书的品牌,依托于人民邮电出版社在计算机图书领域30余年的发展与积淀。异步图书面向IT行业以及各行业使用IT技术的用户。

项目1 Spark集群环境搭建

本项目讲解Spark计算引擎的安装及任务提交和运行的方法。Spark是一种快速、通用、可扩展的大数据分析引擎,在大数据分析领域得到广泛应用。为了能够发挥并行计算的优势,大数据计算任务一般在集群环境中完成。本项目以3台服务器节点构建的集群环境为基础,详细讲解搭建Spark集群的步骤。读者按照本项目的步骤进行操作就可以完成Spark集群的搭建。

思政目标

培养学生勇于实践创新、科学严谨的工作态度。

培养学生勤于思考,追求卓越的科学精神。

理解Spark的基本原理。

掌握安装Spark集群的方法。

掌握Spark集群启动和停止的方法。

掌握向Spark集群提交任务的基本方法。

任务1  Spark本地模式安装

【任务描述】

本任务主要介绍Spark本地模式安装方式。通过本任务的学习和实践,读者可以了解Spark的基本原理,掌握安装Scala插件的方法,掌握Spark本地模式安装的方法。

【知识链接】

1.Spark简介

Spark 是一种快速、通用、可扩展的大数据分析引擎,2009年诞生于加州大学伯克利分校AMP实验室,2013年6月成为Apache孵化项目,2014年2月成为Apache顶级项目。该项目主要使用Scala语言进行编写。

Spark集群的资源管理模式主要有Standalone、YARN和Mesos 3种。资源管理框架之上主要是Spark Core模块,它实现了Spark最基础的功能。Spark Core模块之上是更高层的API,主要由Spark SQL、Spark Streaming、Spark MLlib和Spark Graph X组成,如图1-1所示。

图1-1 Spark模块

Spark的主要模块介绍如下。

Spark Core:实现了Spark的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。Spark Core中还包含了对弹性分布式数据集(Resilient Distributed Dataset,RDD)的API定义。

Spark SQL:Spark用来操作结构化数据的程序包。通过Spark SQL,可以使用SQL或者Apache Hive版本的SQL查询语言(Hibernate Query Language,HQL)来查询数据。Spark SQL支持多种数据源,比如Hive表、Parquet以及JSON等。

Spark Streaming:Spark提供的对实时数据进行流式计算的组件,提供了用来操作数据流的API。

Spark MLlib:提供常见的机器学习功能的程序库,包括分类、回归、聚类、协同过滤等,还提供模型评估、数据导入等额外的功能。

集群管理器:Spark支持在各种集群管理器上运行,包括YARN、Mesos,以及Spark自带的调度器——独立(Standalone)调度器。

2.Spark的主要优势

Spark 采用内存性计算方式。相对于Hadoop,在基于内存的并行计算方面,Spark具有非常明显的优势。Spark的主要优势如下。

快。与Hadoop的MapReduce相比,Spark基于内存的运算要快100倍以上,基于硬盘的运算也要快10倍以上,如图1-2所示。Spark实现了高效的执行引擎,可以基于内存高效处理数据流,计算的中间结果存储在内存中。

易用。Spark支持Java、Python和Scala编程语言的API,还支持超过80种高级算法,使用户可以快速构建不同的应用。而且Spark支持交互式的Python和Scala的Shell,可以非常方便地使用Spark集群执行分布式计算。

通用。Spark提供了统一的解决方案。Spark可以用于批处理、交互式查询、实时流处理、机器学习和图计算,可以在同一个应用中无缝使用。

兼容性高。Spark可以非常方便地与其他的开源产品进行融合。比如,Spark可以使用YARN和Mesos作为资源管理器,并且可以处理所有Hadoop支持的数据,包括HDFS、HBase和Cassandra等。

图1-2 Spark和Hadoop性能对比

3.Spark系统架构

Spark 系统的架构是基于Master/Slave模式进行设计的。系统主要由一个Driver和多个Worker Node组成,如图1-3所示。

图1-3 Spark系统架构

Driver是运行Spark应用的入口,它会创建SparkContext,SparkContext负责和Cluster Manager通信,进行资源申请、任务分配和监控等。

Cluster Manager负责申请和管理在Worker Node上运行应用所需的资源,包括Spark原生的Cluster Manager、Mesos Cluster Manager和Hadoop YARN Cluster Manager。

Executor是Application运行在Worker Node上的一个进程,负责运行Task(任务)以及将数据存储在内存或者磁盘上,每个Application都有各自独立的一批Executor。每个Executor则包含了一定数量的资源来运行分配给它的任务。在提交应用中,可以提供参数指定计算节点的个数,以及对应的资源。

4.Spark任务执行流程

在集群环境中提及并运行Spark任务,需要考虑资源的申请、分配及注销的过程。资源管理器承担了这个任务,它分配并监控资源的使用情况,根据集群不同的部署模式,会应用不同的资源管理器,可能是YARN、Mesos或者是Spark的Standalone。

SparkContext负责生成RDD对象,并基于RDD构建DAG图。DAG Scheduler将DAG图分解为Stage,生成Taskset。TaskScheduler提交和监控Task。

Spark任务执行流程如图1-4所示。

图1-4 Spark任务执行流程

(1)构建Spark应用的运行环境,启动SparkContext。SparkContext向Cluster Manager注册,并申请运行Executor资源。

(2)Cluster Manager为Executor分配资源并启动Executor进程,Executor运行情况将随着“心跳”发送到Cluster Manager上。

(3)SparkContext构建DAG图,将DAG图分解成多个Stage,并把每个Stage的Taskset(任务集)发送给Task Scheduler(任务调度器)。Executor向SparkContext申请Task,Task Scheduler将Task发放给Executor,同时,SparkContext将应用程序代码发放给Executor。

(4)Task在Executor上运行,把运行结果反馈给Task Scheduler,然后再反馈给DAG Scheduler。运行完毕后写入数据。SparkContext向ClusterManager注销并释放所有资源。

【任务实施】

1.Scala的安装

因为Spark主要基于Scala语言开发,所以在安装Spark之前,首先要安装Scala。主要的安装过程如下。

(1)将Scala安装包上传到指定目录/opt/module/soft,上传完成后,切换到安装目录。

[hadoop@hadoop1 ~]$ cd /opt/module/soft

(2)将安装包解压缩到安装目录/opt/module。

[hadoop@hadoop1 soft]$ tar -zxvf scala-2.12.11.tgz -C /opt/module

(3)默认安装的目录名scala-2.12.11较长,可以将目录名改为scala。

[hadoop@hadoop1 soft]$ mv /opt/module/scala-2.12.11/ /opt/module/scala

(4)编辑/etc/profile文件,修改环境变量,在PATH变量中添加Scala安装路径下面的bin目录,这样就可以在任意的目录下执行该文件夹下面的命令。

[hadoop@hadoop1 soft]$ sudo vi /etc/profile

#scala
export SCALA_HOME=/opt/module/scala
export PATH=$PATH:$SCALA_HOME/bin

(5)环境变量编辑完成后,为使得环境变量立即生效,需要使用source命令刷新文件。

[hadoop@hadoop1 soft]$ source /etc/profile

(6)安装完成后,验证Scala环境能否正常使用。输入scala命令,进入Scala的命令行模式,输入scala命令进行验证。如果能够正常运行,说明Scala已经正常安装。

[hadoop@hadoop1 soft]$ scala

2.Spark的安装

在Scala软件安装完成以后,就可以安装Spark了。

(1)从官方网站下载正确的安装版本。访问Apache网站并下载Spark。本书开发的案例基于Spark 3.0。由于Spark安装版本和Hadoop相关,因此在选择Spark的版本时要考虑集群环境中Hadoop的安装版本。

Spark的下载目录如图1-5所示。选择spark-3.0.0进行下载。单击相应的文件夹链接,查看并选择相应的版本进行下载,如图1-6所示。

图1-5 Spark下载目录

图1-6 Spark 3.0.0下载页面

(2)将压缩包上传到服务器指定文件夹/opt/soft。如果文件夹不存在,可以先创建这个文件夹。将Spark安装文件解压缩到指定文件夹后安装。

[hadoop@hadoop1 ~]$ tar -zxvf /opt/soft/spark-3.0.0-bin-hadoop2.7.tgz -C /opt/module

(3)解压缩后的文件夹名称为spark-3.0.0-bin-hadoop2.7,因为这个名称比较长,可以对文件夹进行改名,使用mv命令修改文件夹名称为spark。

[hadoop@hadoop1 ~]$ mv /opt/module/spark-3.0.0-bin-hadoop2.7/ /opt/module/spark

(4)编辑文件/etc/profile,修改环境变量。在PATH变量中添加Spark安装路径下面的bin目录和sbin目录,这样就可以在任意的目录下执行这两个文件夹下面的命令。

[hadoop@hadoop1 ~]$ vi /etc/profile
# spark
export SPARK_HOME=/opt/module/spark
export PATH=$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH

(5)环境变量编辑完成后,为使得环境变量立即生效,需要使用source命令刷新文件。

[hadoop@hadoop1 ~]$ source /etc/profile

任务2  Spark集群安装及配置

【任务描述】

本任务主要介绍Spark集群的安装及配置方式。通过本任务的学习和实践,读者可以了解Spark集群的部署模式,掌握使用独立集群模式安装并配置Spark集群的方法,掌握Spark历史任务的使用方法。

【知识链接】

Spark部署模式

Spark的部署模式主要分为单机模式、独立集群模式、Spark on Mesos模式和Spark on YARN模式。

单机模式:在本地部署单个Spark服务,仅使用单服务器节点的服务。这种情况在企业应用中使用得相对较少。这是因为在处理海量数据时,需要借助服务器集群。单机模式一般用于测试。

独立集群模式:Spark框架自带完整的资源调度管理服务,可以独立部署到一个集群中,而不需要依赖其他系统为其提供资源管理调度服务。在架构的设计上,Spark是由一个Master和若干Slave构成的,并且以槽(Slot)作为资源分配单位。Spark设计了统一的槽以供各种任务使用。

Spark on Mesos模式:Mesos是一种资源调度管理框架,可以为运行在它上面的Spark提供服务。在Spark on Mesos模式中,Spark程序所需要的各种资源都由Mesos负责调度。

Spark on YARN模式:Spark可运行于YARN上,与Hadoop进行统一部署。资源管理和调度依赖YARN,而分布式存储则依赖HDFS。

接下来将主要介绍Spark的独立集群模式的安装过程。

【任务实施】

1.Spark独立集群模式安装

在本书所介绍的案例使用了由3台服务器节点构建的集群。集群的主机名、IP地址、服务器节点角色如表1-1所示。

表1-1 集群规划

主机名

IP地址

说明

hadoop1

192.168.127.128

Master、Slave

hadoop2

192.168.127.129

Slave

hadoop3

192.168.127.130

Slave

在本地模式安装并正常运行的前提下,可以通过修改配置文件的方式和复制的方式将单个节点的安装扩展到多个节点,安装时按照以下操作步骤进行。

(1)查看配置文件。首先进入安装目录的conf目录。这个文件夹包含了配置文件,文件名称扩展为.template,可以直接去掉文件扩展名进行修改;也可以保留原始文件,复制一个新的文件,然后再去掉扩展名.template,在新文件中修改内容。

[hadoop@hadoop1 ~]$ cd /opt/module/spark/conf

[hadoop@hadoop1 conf]$ ls
fairscheduler.xml.template  log4j.properties.template  metrics.properties.template  slaves.template  
spark-defaults.conf.template  spark-env.sh.template

(2)基于slaves.template文件复制一个新的文件,然后去掉扩展名.template,文件名称变为slaves。

[hadoop@hadoop1 conf]$ cp slaves.template slaves

(3)编辑slaves文件,在slaves文件中添加3台服务器的主机名,如图1-7所示。

[hadoop@hadoop1 conf]$ vi slaves

图1-7 设置Slave节点

(4)基于spark-env.sh.template文件复制一个新的文件,然后去掉扩展名.template,文件名称变为spark-env.sh。

[hadoop@hadoop1 conf]$ cp spark-env.sh.template spark-env.sh

(5)编辑spark-env.sh文件,设置Master节点,如图1-8所示。

[hadoop@hadoop1 conf]$ vi spark-env.sh

图1-8 设置Master节点

(6)设置JAVA_HOME,指向JDK安装的目录。

[hadoop@hadoop1 conf]$ vi /opt/module/spark/sbin/spark-config.sh

# JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144

(7)在集群的其他服务器节点hadoop2和hadoop3中进行相同的安装,或者通过从已经安装好的节点远程复制文件的方式进行安装。

(8)启动Spark集群的命令是安装目录的sbin下面的start-all.sh文件。因为这个文件名和Hadoop安装目录下的sbin同名,为了能够保证在任意路径下执行启动脚本而不冲突,可以将启动脚本复制成另一个文件start-spark.sh。同样,停止集群的脚本stop-all.sh也存在这种情况,可以将其复制成一个新的文件stop-spark.sh。

[hadoop@hadoop1 conf]$ cp /opt/module/spark/sbin/start-all.sh /opt/module/spark/sbin/start-spark.sh

[hadoop@hadoop1 conf]$ cp /opt/module/spark/sbin/stop-all.sh /opt/module/spark/sbin/stop-spark.sh

(9)启动和停止Spark集群,如图1-9所示。

[hadoop@hadoop1 conf]$ start-spark.sh

[hadoop@hadoop1 conf]$ stop-spark.sh

(10)通过Web UI查看集群。可以通过主机名或者IP地址进行访问。默认端口号为8080,可以在浏览器中访问http://hadoop1:8080,如图1-10所示。

图1-9 启动和停止Spark集群

图1-10 通过Web UI查看集群

2.Spark历史服务配置

默认情况下,由于Spark提交的任务不会被记录到日志中,也就是说,向Spark集群提交的任务信息并不会保留,因此在企业级应用中一般会开启Spark历史服务。配置Spark历史服务的主要步骤如下。

(1)启动Hadoop。在HDFS上创建Spark的事件日志目录,目录名称可以任意设置。使用如下命令在HDFS上创建spark-eventlog目录。

[hadoop@hadoop1 ~]$ hdfs dfs -mkdir /spark-eventlog

(2)修改Spark历史日志,如图1-11所示。

[hadoop@hadoop1 ~]$ vi /opt/module/spark/conf/spark-defaults.conf

图1-11 Spark历史日志设置

(3)修改spark-env.sh文件。Spark History的参数如表1-2所示。修改后的结果如图1-12所示。修改完成后保存文件设置。

[hadoop@hadoop1 ~]$ vi /opt/module/spark/conf/spark-env.sh

表1-2  Spark History的参数

参数

说明

spark.history.ui.port

Web UI访问的端口号,在端口号不冲突的前提下可以任意设置

spark.history.fs.logDirectory

指定历史服务器日志存储路径

spark.history.retainedApplications

指定保存Application历史记录的个数,如果超过这个值,则删除旧的应用程序信息。这指的是内存中的应用数

图1-12 Spark历史日志参数设置

任务3  Spark任务提交与运行

【任务描述】

本任务主要介绍向Spark集群提交并运行任务的方法。通过本任务的学习和实践,读者可以掌握使用Spark提供的SparkPi程序计算圆周率的方法,掌握使用Spark Shell对文本文件中的单词进行统计的方法。

【任务实施】

1.使用Spark计算圆周率

Spark安装目录的examples目录下面提供了很多基础案例,SparkPi就是其中一个,它实现了计算圆周率的功能。接下来使用spark-submit命令提交任务并进行圆周率的计算。

spark-submit \
--class org.apache.spark.examples.SparkPi \
--master local[2] \
./examples/jars/spark-examples_2.12-3.0.0.jar \
10

主要实现步骤如下。

(1)启动集群环境,运行spark-submit命令,如图1-13所示。

图1-13 运行spark-submit命令

(2)查看运行结果,可以查看圆周率的近似值,如图1-14所示。

图1-14 计算圆周率

2.Spark单词统计任务的提交与运行

下面统计文本文件中单词的数量。文本文件的单词之间使用空格进行分隔。通过向Spark提交任务的方式计算所有文本文件中单词的数量。使用spark-shell命令对文本文件中的单词进行统计,主要使用了RDD的转换算子和行动算子。这里只简单介绍RDD算子的使用方法,在后面的内容中会做详细讲解。主要的实现步骤如下。

(1)创建存放文本文件的目录input。

[hadoop@hadoop1 ~]$ cd /opt/module/spark
[hadoop@hadoop1 spark]$ mkdir input

(2)进入input目录,准备创建wc1.txt和wc2.txt两个文本文件。

[hadoop@hadoop1 spark]$ cd input

(3)创建并编辑wc1.txt文件。

[hadoop@hadoop1 input]$ vi wc1.txt

wc1.txt的文件内容如下。

hello world
hello spark

(4)创建并编辑wc2.txt文件。

[hadoop@hadoop1 input]$ vi wc2.txt

wc2.txt的文件内容如下。

hello scala
hello bigdata

(5)提交任务。

启动Spark Shell。Spark Shell是一个基于Scala的命令的运行环境,在其中可以直接编写Scala代码,如图1-15所示。

[hadoop@hadoop1 input]$ spark-shell

图1-15 启动Spark Shell

使用RDD的转换算子和行动算子实现单词统计功能。提交运行并查看运行结果,结果是以数组的形式进行展示,以二元组的形式输出单词的数量,如图1-16所示。

sc.textFile("/opt/module/spark/input").flatMap(_.split(" ")).map((_,1)).reduceByKey (_+_).collect

图1-16 单词统计结果

在完成主要的操作步骤以后,为方便读者理解单词统计任务,下面对RDD的算子进行简要说明。

textFile:转换算子,参数是文件路径,读取文件夹下面的文本文件并转换为RDD。

flatMap:转换算子,针对RDD中的每一行文本进行扁平化映射操作,将每行文本按照空格进行分隔,转换为单词形式。

map:转换算子,进行映射操作,将单词转换为二元组的形式,如将hello转换为(hello,1)的形式。

reduceByKey:转换算子,以单词作为主键进行聚合操作,简单来说,就是将相同的单词进行数量加和操作,如将(hello,1)和(hello,1)进行聚合操作,转换为(hello,2)。

collect:结果收集,将结果以数组的形式进行展示。

项目小结

本项目通过3个任务讲解了Spark集群的资源管理模式、Spark集群的安装及配置、Spark集群的启动和停止方式、向Spark集群提交并运行任务的方法。本项目主要包括以下内容。

Spark集群的资源管理模式主要有Standalone、YARN和Mesos 3种。

Spark的系统架构是基于Master/Slave模式进行设计的。系统主要由一个Driver和多个Worker Node组成。

使用独立集群模式安装并配置Spark集群,同时需要配置Spark历史服务。

以Spark提供的SparkPi程序以及单词统计程序为例,实现向Spark集群提交任务的基本流程。

项目拓展

请读者自行完成对HDFS上的文本文件进行单词统计的功能。

重要提示:在HDFS上创建文本文件,需要启动Hadoop集群,使用HDFS的命令创建文件夹及上传文件。

思考与练习

一、选择题

1.下面哪种Spark部署模式不属于集群部署模式。(  )

(A)Local模式

(B)独立集群模式

(C)Spark on YARN模式

(D)Spark on Mesos模式

2.Spark中提供最基础API的功能模块是。(  )

(A)Spark Core

(B)Spark SQL

(C)Spark MLlib

(D)Spark Streaming

3.在单词统计程序中,读取文本文件并生成RDD的算子是。(  )

(A)collect

(B)flatMap

(C)map 

(D)textFile

二、简答题

1.简述Spark框架的主要模块。

2.简述Spark与Hadoop相比的主要优势。

3.说明单词统计程序中各个算子实现的基本功能。

1.在虚拟机环境下自行安装Spark集群。

2.向Spark集群提交单词统计任务,实现对文本文件中的单词进行统计。

相关图书

Apache Spark大数据分析:基于Azure Databricks云平台
Apache Spark大数据分析:基于Azure Databricks云平台
Spark大数据实时计算:基于Scala开发实战
Spark大数据实时计算:基于Scala开发实战
Spark和Python机器学习实战:预测分析核心方法(第2版)
Spark和Python机器学习实战:预测分析核心方法(第2版)
图解Spark 大数据快速分析实战
图解Spark 大数据快速分析实战
精通Spark数据科学
精通Spark数据科学
Spark机器学习实战
Spark机器学习实战

相关文章

相关课程