Spark大数据技术与应用(txt+pdf+epub+mobi电子书下载)


发布时间:2020-09-02 09:51:04

点击下载

作者:赵红艳 许桂秋

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Spark大数据技术与应用

Spark大数据技术与应用试读:

前言

随着信息技术的飞速发展,人类社会正在走向数据技术时代,大数据作为数据技术时代的重要组成部分,背后隐藏的价值逐渐被行业组织、政府部门以及社会公众所认识和关注。与传统的数据相比,大数据具有体量巨大、类型多样、价值密度低、高速性等特点,传统的技术手段已经不能满足大数据处理与分析的要求。

在 Spark 大数据分析计算框架诞生之前,Hadoop 起着重要的作用,在实际的项目中担任数据分析和存储的角色,但在实时性和处理速度等方面均不具备优势,Spark的出现打破了这种局面。Spark提供了高级应用程序编程接口,应用开发者只需专注于应用计算本身而不用关注集群。Spark计算速度快,支持交互式计算和复杂算法。同时,Spark是一个通用引擎,用户可用它来完成各种运算,包括SQL查询、文本处理、机器学习等。

本书作为大数据分析与内存计算的入门教材,希望能够帮助读者打开大数据分析与应用的大门。全书采用理论结合实践的方式,循序渐进地介绍了Spark的运行原理,并引入综合性的实践案例,引导读者运用所学知识解决现实中的问题。

全书共分为10章。第1章主要介绍了Spark的发展历程、起源和基本的运行原理,为后面章节学习Spark组件打下基础。第2章介绍了Spark的环境搭建,从软件下载、解压到环境变量、相应参数的设置等方面讲解了如何在本地搭建Spark环境。第3章主要介绍了Python编程语言、PySpark的启动和日志的设置、PySpark 开发包的安装以及如何使用开发工具 PyCharm 编写Spark应用。第4章主要介绍了Spark RDD弹性分布式数据集,内容包括RDD的特点、创建RDD的过程、RDD的常用算子以及RDD的持久化。第5章主要介绍了DataFrame与Spark SQL的区别与联系,并对常用操作进行了阐释。第6章介绍了Spark Streaming的特点、不同数据源的加载、DStream输出与转换操作以及与DataFrame和SQL的互操作。第7章主要介绍了机器学习的相关概念、机器学习的一般流程、Spark机器学习库MLlib和ML。第8章主要介绍了基于Spark的第三方开源图计算工具GraphFrames,内容包括图的概念、图的操作和图算法,并用实际案例进行了应用操作。第9章和第10章分别介绍了综合实例:出租车数据分析和图书推荐系统,通过两个综合实例让读者从理论阶段上升到实际应用阶段,帮助读者更深入理解Spark的使用方法。

本课程建议安排64课时,教师可根据学生的实际学习情况以及高校的培养方案选择教学内容。本书可以作为高等院校计算机、数据科学与大数据技术等相关专业的教材,也可作为Spark开发人员的参考用书。

由于编者水平有限,书中难免出现一些疏漏和不足,恳请广大读者批评指正。编者2019年1月第1章 Spark简介与运行原理

Spark 是现在流行的大数据分析计算框架,在大数据应用中起着不可或缺的作用。本章从Spark的产生、发展及其生态圈等方面对Spark进行介绍。

本章主要内容如下。(1)Spark是什么。(2)Spark的生态系统。(3)Spark架构与原理。(4)Spark 2.X新特性。1.1 Spark是什么

Spark 是2009年由马泰·扎哈里亚(Matei Zaharia)在加州大学伯克利分校的AMPLab实验室开发的子项目,经过开源后捐赠给 Apache软件基金会,最后成为我们现在众所周知的 Apache Spark。它是由 Scala语言实现的专门为大规模数据处理而设计的快速通用的计算引擎。经过多年的发展,现已形成了一个高速发展、应用广泛的生态系统。

Spark主要有以下3个特点。(1)Spark提供了高级应用程序编程接口(Application Programming Interface,API),应用开发者只用专注于应用计算本身即可,而不用关注集群。(2)Spark计算速度快,支持交互式计算和复杂算法。(3)Spark是一个通用引擎,可用它来完成各种运算,包括 SQL查询、文本处理、机器学习、实时流处理等。在 Spark 出现之前,我们一般需要学习使用各种各样的大数据分析引擎来分别实现这些需求。1.1.1 Spark的版本发展历程

Spark 从诞生至今迭代了很多个版本,其性能和生态也是越来越好,目前已经升级到2.3.2版本。其主要发展历程如表1-1所示。表1-1 Spark的版本发展历程1.1.2 Spark与Hadoop的区别与联系

Spark与Hadoop处理的许多任务相同,但是在以下两个方面不相同。(1)解决问题的方式不一样

Hadoop和Spark两者都是大数据框架,但是各自的属性和性能却不完全相同。Hadoop是一个分布式数据基础设施,它将巨大的数据集分派到一个由普通计算机组成的集群中的多个节点进行存储,这意味着我们不需要购买和维护昂贵的服务器硬件。同时,Hadoop还会对这些数据进行排序和追踪,这使得大数据处理和分析更加迅速高效。

Spark 则是一个专门用来对分布式存储的大数据进行处理的工具,但它并不会进行分布式数据的存储。(2)两者可合可分

Hadoop不仅提供了 HDFS分布式数据存储功能,还提供了 MapReduce的数据处理功能。因此我们可以不使用 Spark,而选择使用 Hadoop自身的 MapReduce对数据进行处理。

同样,Spark也不一定需要依附在Hadoop系统中。但如上所述,因为Spark没有提供文件管理系统,所以它需要和其他的分布式文件系统先进行集成然后才能运作。1.1.3 Spark的应用场景

Spark 使用了内存分布式数据集技术,除了能够提供交互式查询外,它还提升了迭代工作负载的性能。在互联网领域,Spark 有快速查询、实时日志采集处理、业务推荐、定制广告、用户图计算等强大功能。国内外的一些大公司,比如谷歌(Google)、阿里巴巴、英特尔(Intel)、网易、科大讯飞等都有实际业务运行在Spark平台上。

下面简单介绍一下Spark在各个领域中的用途。(1)快速查询系统。基于日志数据的快速查询系统业务构建于 Spark 之上,利用其快速查询和内存表等优势,Spark 能够承担大多数日志数据的即时查询工作,在性能方面普遍比Hive快2~10倍。如果借助内存表的功能,性能将会比Hive快百倍。(2)实时日志采集处理系统。Spark 流处理模块对业务日志进行实时快速迭代处理,并进行综合分析,用来满足线上系统分析要求。(3)业务推荐系统。Spark 将业务推荐系统的小时和天级别的模型训练,转变为分钟级别的模型训练;能有效地优化相关排名、个性化推荐以及热点分析等。(4)定制广告系统。定制广告业务需要大数据做应用分析、效果分析、定向优化等,借助 Spark快速迭代的优势,可以实现在“数据实时采集、算法实时训练、系统实时预测”的全流程实时并行高维算法,支持上亿的请求量处理。模拟广告投放计算延迟小、效率高,同MapReduce相比,延迟至少降低一个数量级。(5)用户图计算。利用 Spark 图计算解决了许多生产问题,如基于分布的中枢节点发现、基于最大连通图的社区发现、基于三角形计数的关系衡量、基于随机游走的用户属性传播等。1.2 Spark的生态系统

Spark生态系统以Spark Core为核心,利用Standalone、YARN和Mesos等进行资源调度管理,完成应用程序分析与处理。这些应用程序来自Spark的不同组件,如Spark Shell、Spark Submit交互式批处理、Spark Streaming实时流处理、Spark SQL快速查询、MLlib机器学习、GraphX图处理等,如图1-1所示。图1-1 Spark 生态系统图(1)Spark Core提供Spark最基础与最核心的功能,它的子框架包括Spark SQL、Spark Streaming、MLlib和GraphX。(2)Spark Streaming是Spark API核心的一个存在可达到超高通量的扩展,可以处理实时数据流的数据并进行容错。它可以从Kafka、Flume、Twitter、ZeroMQ、Kinesis、TCP sockets等数据源获取数据,并且可以使用复杂的算法和高级功能对数据进行处理。处理后的数据可以被推送到文件系统或数据库。(3)Spark SQL是一种结构化的数据处理模块。它提供了一个称为Data Frame的编程抽象,也可以作为分布式SQL查询引擎。

一个 DataFrame 相当于一个列数据的分布式采集组织,类似于一个关系型数据库中的一个表。它可以从多种方式构建,如结构化数据文件、Hive、外部数据库或分布式动态数据集(RDD)。(4)GraphX在Graphs和Graph-parallel并行计算中是一个新的部分,GraphX是Spark上的分布式图形处理架构,可用于图表计算。1.3 Spark的架构与原理1.3.1 Spark架构设计

Spark架构主要包括客户端驱动程序Driver App、集群管理器Cluster Manager、工作节点Worker以及基本任务执行单元Executor。(1)Driver App是客户端驱动程序,也可以理解为客户端应用程序,用于将任务程序转换为RDD和DAG,并与Cluster Manager进行通信与调度。(2)Cluster Manager是Spark的集群管理器。它主要负责资源的分配与管理。集群管理器分配的资源属于一级分配,它将各个Worker上的内存、CPU等资源分配给应用程序,但是并不分配Executor的资源。目前,Standalone、YARN、Mesos、EC2等都可以作为Spark的集群管理器。(3)Worker是Spark的工作节点。对Spark应用程序来说,由集群管理器分配得到资源的Worker节点主要负责以下工作:创建Executor,将资源和任务进一步分配给Executor,然后同步资源信息给Cluster Manager。(4)Executor是Spark任务的执行单元。它主要负责任务的执行以及与Worker、Driver App的信息同步。

Spark架构设计图如图1-2所示。图1-2 Spark架构设计图1.3.2 Spark作业运行流程

Spark作业流程图如图1-3所示。图1-3 Spark作业流程图(1)构建Spark Application的运行环境,启动SparkContext。(2)SparkContext向资源管理器申请运行Executor资源,并启动StandaloneExecutorbackend。(3)Executor向SparkContext申请Task。(4)SparkContext将应用程序分发给Executor。(5)SparkContext 构建 DAG 图,将 DAG 图分解成 Stage,将 Taskset 发送给 Task Scheduler,由Task Scheduler将Task发送给Executor运行。(6)Task在Executor上运行,运行完释放所有资源。1.3.3 Spark分布式计算流程

Spark 分布式计算流程包含以下几个步骤:首先分析应用的代码创建有向无环图,然后将有向无环图划分为Stage,然后Stage生成作业(job),生成作业后由 FinalStage提交任务集,提交任务的工作交给TaskSets完成,然后每个Task执行所分配的任务,最终Results跟踪结果。流程图如图1-4所示。图1-4 Spark核心原理图1.4 Spark 2.X新特性1.4.1 精简的API

从Spark 2.0版本开始,与之前的Spark 1.X版本有了较大的改变。(1)统一的 DataFrame 和 Dataset 接口。统一了 Scala 和 Java 的 DataFrame、Dataset接口,在R和Python中由于缺乏安全类型,DataFrame成为主要的程序接口。(2)新增 SparkSession入口。SparkSession替代原来的 SQLContext和 HiveContext作为DataFrame和Dataset的入口函数。SQLContext和HiveContext保持向后兼容。(3)为SparkSession提供全新的工作流式配置。(4)更易用、更高效的计算接口。(5)Dataset中的聚合操作有全新的、改进的聚合接口。1.4.2 Spark作为编译器

Spark 2.0搭载了第二代Tungsten引擎,该引擎是根据现代编译器与MPP数据库的理念来构建的,它将这些理念用于数据处理中,其主要思想就是在运行时使用优化后的字节码,将整体查询合成为单个函数,不再使用虚拟函数调用,而是利用CPU来注册中间数据。

为了有直观的感受,表1-2显示了Spark 1.6与Spark 2.0分别在一个核上处理一行的操作时间(单位:ns)。表1-2 Spark 1.6与Spark 2.0操作时间对比图 单位:ns1.4.3 智能化程度

为了实现Spark更快、更轻松、更智能的目标,Spark 2.X 在许多模块上都做了重要的更新,如 Structured Streaming 引入了低延迟的连续处理(Continuous Processing)、支持Stream-to-stream Joins、通过改善Pandas UDFs 的性能来提升 PySpark、支持第4种调度引擎Kubernetes Clusters(其他3种分别是自带的独立模式Standalone、YARN、Mesos)等。1.5 小结

本章主要介绍了 Spark 定义、生态系统、架构原理和新特性等内容,从原理到应用由浅入深地介绍了Spark,让读者从宏观和微观上对Spark有了认识和了解。习题

简答题(1)Spark与Hadoop的区别是什么?(2)Spark的应用场景有哪些?(3)简述Spark的作业运行流程。(4)Spark 2.X与Spark 1.X有什么不同点?第2章 Spark的环境搭建

上一章主要对Spark的定义、生态系统、架构原理和新特性等方面进行了介绍,让读者对Spark有了一个整体的认识。本章在第1章的基础上对Spark环境的搭建过程进行介绍,带领读者了解基本的配置过程和命令的使用。

本章主要内容如下。(1)Spark相关依赖软件下载。(2)Spark环境配置。(3)Spark集群的启动与关闭。(4)Spark应用的提交和Web页面的监控。2.1 环境搭建前的准备

Spark使用Scala语言进行开发,Scala运行在Java平台之上,因此需要下载并安装JDK和 Scala。值得注意的是,Scala、Java 和 Spark 三者之间是有版本搭配限制的,可以根据官方文档提供的组合进行下载,否则会出现启动异常。具体的关系可在官网相关文档中看到,如图2-1所示,笔者在此使用的环境组合是Spark 2.3.0+Java 8+Scala 2.11。图2-1 Spark、Java、Scala的版本对应关系

Spark运行在Linux操作系统下,因此在进行环境部署之前需要一个Linux环境,可以是物理机,也可以是虚拟机。具体的操作系统安装此处不做重点讲解,此处采用 Linux 的一个发行版Ubuntu作为演示系统。Ubuntu可以在其官网上直接下载。

1.下载Spark

打开浏览器进入Spark的主页,如图2-2所示。本书所用Spark版本为2.3.0。图2-2 Spark官网

单击“Download Spark”按钮进入下载页面,如图2-3所示。图2-3 选择下载版本

在Choose a Spark release下拉框中可以选择历史版本。Choose a package type下拉框中可以选择集成Hadoop的版本,也可以选择源码进行编译。选择后单击Download Spark后面的文件名称即可进入下载页面,如图2-4所示。图2-4 选择下载镜像

可供选择的镜像地址有很多,选择推荐的镜像地址下载即可。

2.下载Scala

打开浏览器进入Scala官网主页,下载界面如图2-5所示。图2-5 Scala官网

单击“DOWNLOAD”栏目进入下载页面。下载页面提示:最流行获取Scala的方法是通过SBT、构建工具或者IDE,此处不选择网页提示的方法进行下载。在网页中找到Other ways to install Scala栏目,如图2-6所示,找到“previous releases”超链接字样,此链接为旧版本Scala的下载页面入口,单击进入该下载列表页面,如图2-7所示。根据Spark需要搭配的Scala版本,进行灵活选择,此处选择的是2.11.12版本。单击进入下载页面,在网页末尾找到“Other resources”栏目,如图2-8所示。因为笔者选择的 Linux为 Ubuntu版本,所以选择的是tgz压缩包类型。如果读者是使用其他版本的Linux,则可以根据具体的版本进行选择下载。单击图2-8左侧的“scala-2.11.12.tgz”即可下载。图2-6 旧版本 Scala入口图2-7 Scala下载入口图2-8 Scala下载列表

3.下载Java

打开浏览器进入JDK下载页面,如图2-9所示。图2-9 JDK下载列表

下载之前需要先接受许可,选择“Accept License Agreement”,然后单击Linux x64版本的文件进行下载。该版本在列表中有两个文件,这里选择压缩包tar.gz文件下载即可。

至此,与Spark相关的依赖软件下载工作已经完成。2.2 Spark相关配置

在使用 Spark之前,需要进行一定的配置。主要工作包括:安装 SSH、实现免密码登录、修改环境变量、修改Spark文件夹的访问权限、节点参数配置等。2.2.1 安装SSH

SSH(Secure Shell)是一种安全的传输协议。通过SSH协议对传输的数据进行加密,从而有效防止远程管理过程中的信息泄露问题。在组建 Spark 集群时,多台实体机需要进行文件传输等通信。在通信过程中如果需要频繁输入密码是不切实际的,因此需要无密码登录。

在 Ubuntu系统中,软件的安装是通过 apt-get install加软件名这种命令方式进行的。安装的软件存在于Ubuntu中配置的源服务器中,在源服务器中存储了大量的软件镜像,类似于一个软件应用商店,通过该命令,就可以通过网络从远程的应用商店中下载并安装SSH。

安装SSH方法如下。

同时按下组合键“Ctrl+Alt+T”打开Shell,或者在桌面等地方单击右键打开Terminal,并输入命令。sudo apt-get install ssh //sudo是使用管理员权限进行安装

运行后会询问是否继续安装,此时从键盘输入“Y”并按回车键同意安装。因为用到了管理员权限进行安装,所以会出现需要输入密码的提示,输入管理员密码后回车即可进行下载安装。安装过程除了询问是否同意某些条件外,不需要人为干预,程序自动下载并安装。2.2.2 SSH免密码登录

安装完SSH后,打开Shell,输入命令生成密钥。命令如下。ssh-keygen –t rsa

或者ssh-keygen

单击回车键,终端会提示需要用户填写一些内容,这里可以不用填写任何内容,按“Enter”键继续运行,如图2-10所示。运行结束以后,默认在~/.ssh目录生成两个文件。

id_rsa //私钥

id_rsa.pub //公钥图2-10 生成密钥

把公钥的内容添加到authorized_keys文件中:cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

更改权限:

chmod 700 ~/.ssh

chmod 600 ~/.ssh/authorized_keys

设置完后输入命令:ssh localhost

如果出现欢迎字样而不出现需要输入密码则说明设置成功。如果出现需要输入密码,则只需修改一下.ssh文件夹的权限和authorized_keys的权限即可,如图2-11所示。图2-11 SSH登录成功2.2.3 修改访问权限

使用tar命令解压下载的文件。

tar –zxvf jdk1.8.0_171

tar –zxvf spark-2.3.0-bin-Hadoop2.7

tar –zxvf Scala-2.11.12

本书中所有的软件都放在了/opt 目录中,因此使用复制命令把所有软件包复制到/opt文件夹中。

sudo cp –R jdk1.8.0_171 /opt

sudo cp –R spark-2.3.0-bin-Hadoop2.7 /opt

sudo cp –R Scala-2.11.12 /opt

修改文件夹的权限为777。sudo chmod –R 777 /opt2.2.4 修改profile文件

Windows操作系统中环境变量的设置一般使用图形化的工具完成,在 Linux里面需要手动地修改/etc/profile文件,也可以修改~/.bashrc文件。其中,不同点就是bashrc仅在交互式Shell启动时被读取,而profile仅在LOGIN Shell时被读取。

输入命令:sudo vi /etc/profile #以管理员权限修改profile文件内容

用管理员权限打开profile文件,输入密码后即可进行编辑。

在键盘上单击 I键开始编辑,I就是 Insert的意思。滚动鼠标至最下面,然后输入以下路径配置。

Java环境配置:

export JAVA_HOME=/opt/jdk1.8.0_17 #配置 JAVA_HOME

export CLASS_PATH=/opt/jdk1.8.0_17/lib #配置类路径

export PATH=$PATH:$JAVA_HOME/bin #添加 bin路径到PATH,添加后可以在命令行中直接调用

Scala环境配置:

export SCALA_HOME=/opt/Scala-2.11.12 #配置 SCALA_HOME

export PATH=$PATH:$SCALA_HOME/bin #添加 bin目录到PATH

Spark环境配置:

export SPARK_HOME=/opt/spark-2.3.0-bin-Hadoop2.7

export PATH=$PATH:$SPARK_HOME/bin #添加 bin目录到PATH

输入完毕后,按Esc键,然后输入冒号,最后输入wq进行保存并退出。:wq

配置好的profile不会立即生效,操作系统重启后即可生效,也可以执行source命令立即生效。source /etc/profile

执行以上命令后,可以在 Shell 中输入 Java、Scala 进行测试,如果能够打印出 Java相关的信息,进入Scala交互命令行,则说明配置成功。2.2.5 修改Spark配置文件(1)复制模板文件。在Spark的conf目录中已经存放了Spark环境配置和节点配置以及日志配置等文件的模板(以template结尾的文件),并且模板文件中有相关配置项的文字描述提示。将文件夹中 spark-env.sh.template、log4j.properties.template、slaves.template 3个文件各复制一份,去掉 template 后缀,然后 Spark启动时就会对文件中的配置项进行读取,否则找不到配置。

cd /opt/spark-2.3.0-bin-Hadoop2.7/conf //进入配置文件夹中

cp spark-env.sh.template spark-env.sh //Spark环境相关

cp log4j.properties.template log4j.properties //Spark日志相关

cp slaves.template slaves //Spark集群节点(2)修改spark-env设置主节点和从节点的配置。

export JAVA_HOME=/opt/jdk1.8.0_171 #添加 Java位置

export SCALA_HOME=/opt/Scala-2.11.12 #添加 Scala位置

export SPARK_MASTER_IP=SparkMaster #设置主节点地址

export SPARK_WORKER_MEMORY=4g #设置节点内存大小

export SPARK_WORKER_CORES=2 #设置节点参与计算的核心数

export SPARK_WORKER_INSTANCES=1 #设置节点实例数(3)修改slaves设置从节点地址。

添加节点主机名称,默认为localhost。2.3 Spark集群启动与关闭

Spark应用最终是以提交集群任务的方式运行的,因此在提交应用之前需要先启动集群,并查看集群状态,确保集群处于正常的可使用状态。Spark 除了可以以 Mesos或者 YARN模式运行之外,也可以以 Standalone和 Local模式运行。Local模式可以进行基本的 Spark操作,一般作为简单的测试使用。本书采用 Standalone模式进行实验, Standalone是一种独立模式,自带完整的服务,无须依赖其他资源管理器,可以单独部署到集群中。(1)启动Spark Standalone集群

进入Spark目录中:cd /opt/spark-2.3.0-bin-Hadoop2.7/sbin

运行start-all.sh启动集群:./start-all.sh

运行成功,结果如图2-12所示。图2-12 启动 Spark Standalone集群

在启动的时候如果出现需要输入密码的情况,这种情况则是因为部分文件没有设置权限。在启动的过程中会生成新的文件夹,只需对Spark目录重新设置权限即可。sudo chmod –R 777 /opt/spark-2.3.0-bin-Hadoop2.7 //设置文件夹可读可写可执行权限

启动成功后打开浏览器,输入地址localhost:8080即可查看集群的UI界面,如图2-13所示。在 UI 界面中可以看到集群节点的核心数、地址、内存、状态等信息。如果打不开该界面,则可能是由于没有启动成功,查看报错原因后修改,再次运行查看。图2-13 Spark集群启动成功(2)关闭集群

集群的关闭与启动相似,同样进入sbin文件夹中,使用stop-all.sh脚本关闭集群。

运行stop-all.sh:./stop-all.sh2.4 Spark应用提交到集群

打开Shell,输入下列命令启动集群:

cd /opt/spark-2.3.0-bin-Hadoop2.7/sbin

./start-all.sh

集群启动完毕后,可以使用 spark-submit 命令进行任务的提交。进入 spark-submit 文件所在的目录中:cd /opt/spark-2.3.0-bin-Hadoop2.7/bin

执行以下命令提交集群:

spark-submit --master spark://master:7077 --deploy-mode client--executor-memory 512M --total-executor-cores 4 demo.py

spark-submit后面附带了很多参数,参数的详细说明如下。

spark-submit: 提交任务命令

--master spark://master:7077 //提交集群的地址

--deploy-mode client //部署模式为 client模式

--executor-memory 512M //设置每个执行单元使用512MB的内存空间

--total-executor-cores 4 //每个执行单元为4个核

执行的过程可以在Spark的Web监控页面中查看。2.5 Spark Web监控页面

应用提交集群后,应用的基本信息和运行情况都将会在 Web界面中展现出来。启动浏览器打开地址 localhost:8080后会出现图2-14所示的界面。该界面中的 Completed Applications列表中将会出现运行过的应用,包括应用的名称、使用的核心、内存、提交时间、所有者和运行时间等信息。图2-14 Spark Standalone Web UI界面

打开Shell,运行PySpark后,在浏览器中输入地址localhost:4040,即可查看Spark的Jobs 监控界面,如图2-15所示。在该界面可以查看 Jobs 的详细执行过程,可以分析执行缓慢的Jobs,然后进行性能调优。图2-15 Spark Jobs2.6 小结

本章对 Spark 环境的搭建过程进行了介绍,重点讲述了部署的详细过程。在实际的生产中,Spark 作为一个组件集成在其他的大资源管理器中,以实例的方式部署,这比用户自己去搭建要简单得多。开发者要不断尝试和试错,才能成长。习题

1.选择题(1)下列描述正确的是( )。

A.Spark的版本与Java的版本可以随意搭配

B.Spark底层是使用Java编写的

C.Java与Scala代码可以混合编写

D.Spark源码不能自行编译(2)安装完SSH后,生成密钥的命令是( )。

A.ssh

B.keygen

C.ssh-keygen

D.ssh-key-gen(3)文件夹赋权限的命令是( )。

A.chmod

B.mod

C.ls

D.cat(4)下列哪个文件的配置项可以修改节点内存大小。( )

A.profile

B.spark-env.sh

C.log4j.properties

D.slaves(5)Spark Web监控的地址端口是( )。

A.8000

B.4040

C.8080

D.50070

2.简答题(1)简述Spark环境搭建的流程。(2)简述Spark集群启动和关闭的方法。第3章 使用Python开发Spark应用

第2章主要讲解了如何搭建 Spark系统环境和提交应用,以及对应用的执行进程进行查看。本章将会带领读者了解如何使用Python进行Spark应用开发,并介绍如何使用IDE对Spark应用的代码进行调试。

本章主要内容如下。(1)Python编程语言。(2)PySpark启动与日志设置。(3)PySpark开发包的安装。(4)使用开发工具PyCharm编写Spark应用。3.1 Python编程语言3.1.1 Python语言介绍

Python是一种面向对象的解释型计算机程序设计语言,具有强大且丰富的库。如今的Python已经成为使用率非常高的一门编程语言。

Python具有简单易学、免费开源、可移植性强、面向对象、可扩展、可嵌入、丰富的库、规范的代码等特点。

现在人工智能领域的代码大多数是由 Python编写的。Python被认为是人工智能、机器学习编程的首选语言,但大多数人并不知道其原因,这就需要从人工智能背后的技术讲起。如图3-1所示,人工智能要求机器能自主学习,机器要会学习就需要积累大量的数据,并且运用机器学习算法(如线性回归、决策树、神经网络等),让机器能从大量的数据中实现学习。Python 简洁易用的特点,以及在数据处理方面的强悍能力,使 Python成为了首选语言。图3-1 人工智能技术组成图3.1.2 PySpark是什么

PySpark 是 Spark 为 Python 开发者提供的 API。为了不破坏 Spark 已有的运行架构, Spark在外围包装一层Python API,借助Py4J实现Python和Java的交互,进而由Python编写Spark应用程序。Py4J是一个用Python和Java编写的库。Python程序通过Py4J动态访问 Java虚拟机中的 Java对象,Java程序也能够回调Python对象,但是Py4J并不能实现在Java里调用Python的方法,为了能在Executor端运行用户定义的Python函数或Lambda表达式,需要为每个Task单独启用一个Python进程,通过socket通信方式将Python函数或Lambda表达式发给Python进程执行,如图3-2所示。图3-2 PySpark执行原理3.2 PySpark的启动与日志设置3.2.1 PySpark的启动方式

Spark可以使用Local、Standalone、YARN、Mesos等模式运行。Local模式用于Spark单机运行下开发测试。Standalone 模式用于构建一个由 Master+Slave 构成的 Spark 集群, Spark将运行在集群中。YARN模式用于Spark客户端直接连接YARN。Mesos模式用于Spark客户端直接连接Mesos。前两个模式都不需要额外构建Spark集群。

说明

本节讲的PySpark的启动是启动Spark的Python交互命令行。

启动命令如下:pyspark

启动成功后会出现图3-3所示的界面。图3-3 PySpark交互界面

PySpark 可以通过指定参数的方式设定启动条件,当 PySpark 后面没有参数时,默认是Local模式启动,部分参数介绍如表3-1所示。表3-1 MASTER_URL参数解析

除此之外,PySpark还可支持多种命令功能,如图3-4所示,可使用如下帮助命令查看:pyspark -h图3-4 PySpark参数列表3.2.2 日志输出内容控制

Spark程序运行时会产生大量的程序执行记录日志,其中有效的日志级别为DEBUG

文件位置为/opt/spark-2.3.0-bin-Hadoop2.7/conf,默认为控制台输出 INFO 及以上级别的信息。如需修改,则可修改下面的代码。log4j.rootCategory=INFO,console

把INFO修改成WARN,重启Spark,运行PySpark控制台就没有INFO级别的输出,在程序运行异常时便能更快更精准地定位问题所在位置和找出原因。(2)在代码中使用setLogLevel(logLevel)控制日志输出

sc=SparkContext('local[2]','First Spark App')

sc.setLogLevel("WARN")3.3 PySpark开发包的安装

Spark 应用的开发流程一般是先在本地调试代码,然后将代码提交到集群运行。在使用 Python 进行 Spark 应用开发时,Spark 提供了相应的 PySpark 库,安装后即可像编写一般的 Python 程序一样编写 Spark 程序,安装的方式主要分为在线安装(pip 命令安装)和离线安装两种。3.3.1 使用pip命令安装

打开Linux的命令行窗口,输入下面的pip命令即可安装PySpark,如图3-5所示。sudo pip install pyspark图3-5 使用 pip命令安装 PySpark3.3.2 使用离线包安装

切换到解压后的spark-2.3.0-bin-Hadoop2.7下的Python文件夹,执行如下命令:

cd ~/Downloads/spark-2.3.0-bin-Hadoop2.7/ Python #切换到指定文件夹

sudo Python setup.py install #使用离线安装

安装过程如图3-6所示。图3-6 离线安装 PySpark3.4 使用PyCharm编写Spark应用3.4.1 PyCharm的安装与基本配置(1)下载PyCharm

PyCharm 是 JetBrains 公司打造的 Python 开发集成环境,用户使用它可以很容易地实现代码自动补全、智能提示、项目组织、语法高亮等功能。读者可以到其官网下载最新版本,如图3-7所示。官网目前提供 Professional和 Community两个版本。Professional版本提供了包括网站开发在内的全部功能,但是需要付费。个人学习开发者可以选择Community版本,该版本免费开源,能够满足基本的Python开发需求。图3-7 PyCharm下载(2)安装PyCharm

下载完毕后,使用tar命令解压下载的文件:tar –zxvf pycharm-community-2018.1.4.tar.gz

进入解压后的PyCharm目录下的bin文件夹,执行pycharm.sh命令,打开PyCharm。

cd /pycharm-community-2018.1.4/bin #进入 PyCharm目录

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载