Spark大数据技术实战教程PPT完整全套教学课件_第1页
Spark大数据技术实战教程PPT完整全套教学课件_第2页
Spark大数据技术实战教程PPT完整全套教学课件_第3页
Spark大数据技术实战教程PPT完整全套教学课件_第4页
Spark大数据技术实战教程PPT完整全套教学课件_第5页
已阅读5页,还剩633页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1讲Spark的设计与运行原理

《Spark大数据技术实战》全套PPT课件本节内容提纲搭建Spark开发环境1.31.1Spark概述1.2Spark运行架构与原理1.4运行Pyspark体验Spark程序1.5开发Spark独立应用程序✎学习目标了解掌握掌握理解了解Spark的特点12掌握Spark环境的搭建和配置理解Spark作业提交的工作原理34掌握Spark运行架构和原理本讲将从Spark的发展说起,针对Spark环境搭建、Spark运行架构及其原理进行详细讲解。本讲概要Spark于2009年诞生于美国加州大学伯克利分校的AMP实验室,它是一个可应用于大规模数据处理的统一分析引擎。Spark不仅计算速度快,而且内置了丰富的API,使得我们能够更加容易编写程序。

1.1初识SparkSpark的概述Spark在2013年加入Apache孵化器项目,之后获得迅猛的发展,并于2014年正式成为Apache软件基金会的顶级项目。Spark生态系统已经发展成为一个可应用于大规模数据处理的统一分析引擎,它是基于内存计算的大数据并行计算框架,适用于各种各样的分布式平台的系统。在Spark生态圈中包含了SparkSQL、SparkStreaming、GraphX、MLlib等组件。

1.1初识SparkSpark的概述SparkCoreSparkSQLSpark核心组件,实现了Spark的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。SparkCore中还包含对弹性分布式数据集的API定义。用来操作结构化数据的核心组件,通过SparkSQL可直接查询Hive、HBase等多种外部数据源中的数据。SparkSQL的重要特点是能够统一处理关系表和RDD。

1.1初识SparkSpark的概述MLlibSpark提供的流式计算框架,支持高吞吐量、可容错处理的实时流式数据处理,其核心原理是将流数据分解成一系列短小的批处理作业。SparkStreamingSpark提供的关于机器学习功能的算法程序库,包括分类、回归、聚类、协同过滤算法等,还提供了模型评估、数据导入等额外的功能。

1.1初识SparkSpark的概述

GraphX

独立调度器、Yarn、MesosK8SSpark提供的分布式图处理框架,拥有对图计算和图挖掘算法的API接口及丰富的功能和运算符,便于对分布式图处理的需求,能在海量数据上运行复杂的图算法。集群管理器,负责Spark框架高效地在一个到数千个节点之间进行伸缩计算的资源管理。

1.1初识SparkSpark的特点速度快易用性通用性兼容性Spark计算框架在处理数据时,所有的中间数据都保存在内存中,从而减少磁盘读写操作,提高框架计算效率。同时Spark还兼容HDFS、Hive,可以很好地与Hadoop系统融合,从而弥补MapReduce高延迟的性能缺点。所以说,Spark是一个更加快速、高效的大数据计算平台。

1.1初识SparkSpark应用场景数据工程师可以利用Spark进行数据分析与建模,由于Spark具有良好的易用性,数据工程师只需要具备一定的SQL语言基础、统计学、机器学习等方面的经验,以及使用Python、Matlab或者R语言的基础编程能力,就可以使用Spark进行上述工作。大数据工程师将Spark技术应用于广告、报表、推荐系统等业务中,在广告业务中,利用Spark系统进行应用分析、效果分析、定向优化等业务,在推荐系统业务中,利用Spark内置机器学习算法训练模型数据,进行个性化推荐及热点点击分析等业务。数据科学数据处理

1.1初识SparkSpark与Hadoop对比01Hadoop的MapReduce计算数据时,要转化为Map和Reduce两个过程,从而难以描述复杂的数据处理过程;而Spark的计算模型不局限于Map和Reduce操作,还提供了多种数据集的操作类型,编程模型比MapReduce更加灵活。编程方式002Hadoop的MapReduce进行计算时,每次产生的中间结果都存储在本地磁盘中;而Spark在计算时产生的中间结果存储在内存中。数据存储

1.1初识SparkSpark与Hadoop对比03Hadoop在每次执行数据处理时,都要从磁盘中加载数据,导致磁盘IO开销较大;而Spark在执行数据处理时,要将数据加载到内存中,直接在内存中加载中间结果数据集,减少了磁盘的IO开销。数据处理04MapReduce计算的中间结果数据,保存在磁盘中,Hadoop底层实现了备份机制,从而保证了数据容错;SparkRDD实现了基于Lineage的容错机制和设置检查点方式的容错机制,弥补数据在内存处理时,因断电导致数据丢失的问题。数据容错

1.2Spark运行架构与原理基本概念Application(应用)

运行main()方法并创建SparkContext的进程。DriverProgram(驱动器)Spark上运行的应用。Application中包含一个驱动器进程和集群上的多个执行器进程。ClusterManager(集群管理器)集群上运行应用程序代码的任意一个节点WorkerNode(工作节点)用于在集群上申请资源的外部服务(如:独立部署的集群管理器、Mesos或者Yarn)。

1.2Spark运行架构与原理基本概念Executor(执行器)在Executor进程中执行任务的工作单元,多个Task组成一个StageTask(任务)在集群工作节点上为某个应用启动的工作进程,该进程负责运行计算任务,并为应用程序存储数据。Job(作业)每个Job可划分为更小的Task集合,每组任务被称为StageStage(阶段)一个并行计算作业,由一组任务组成,并由Spark的行动算子(如:save、collect)触发启动。

1.2Spark运行架构与原理Spark集群运行架构Spark运行架构主要由SparkContext、ClusterManager和Worker组成,其中ClusterManager负责整个集群的统一资源管理,Worker节点中的Executor是应用执行的主要进程,内部含有多个Task线程以及内存空间,下面通过图2-12深入了解Spark运行基本流程。

1.2Spark运行架构与原理Spark运行基本流程Spark应用在集群上作为独立的进程组来运行,具体运行流程如下所示。

1.2Spark运行架构与原理Spark运行基本流程当一个Spark应用被提交时,根据提交参数创建Driver进程,Driver进程初始化SparkContext对象,由SparkContext负责和ClusterManager的通信以及资源的申请、任务的分配和监控等。Driver进程向ClusterManager申请资源,ClusterManager接收到Application的注册请求后,会使用自己的资源调度算法,在Spark集群的Worker节点上,通知Worker为应用启动多个Executor。Executor创建后,会向ClusterManager进行资源及状态的反馈,便于ClusterManager对Executor进行状态监控,如果监控到Executor失败,则会立刻重新创建。步骤1步骤2步骤3

1.2Spark运行架构与原理Spark运行基本流程Executor会向SparkContext反向注册申请Task。TaskScheduler将Task发送给Worker进程中的Executor运行并提供应用程序代码。当程序执行完毕后写入数据,Driver向ClusterManager注销申请的资源。步骤4步骤5步骤6

1.3搭建Spark开发环境环境准备由于Spark仅仅是一种计算框架,不负责数据的存储和管理,因此,通常都会将Spark和Hadoop进行统一部署,由Hadoop中的HDFS、HBase等组件负责数据的存储管理,Spark负责数据计算。搭建Spark单机或集群环境前,需要安装Hadoop环境,本课程采用如下配置环境。1.操作系统:Linux系统(建议Ubuntu20.04)2.Spark:3.1.2版本(大于该版本的也可以)3.Hadoop:3.3.1版本(大于该版本都可以)4.JDK:1.11以上版本。

1.3搭建Spark开发环境Spark的部署模式Local模式:单机模式Standalone模式:使用Spark自带的简单集群管理器(集群)YARN模式:使用YARN作为集群管理器(集群)Mesos模式:使用Mesos作为集群管理器(集群)Kubernetes(K8S)模式:使用K8S作为集群管理器(集群)Spark部署模式包括(单机和集群):具体实验步骤详见实验1,就是在单台机器上按照“Hadoop(伪分布式)+Spark(Local模式)”这种方式完成Hadoop和Spark组合环境的搭建。本课程实验采用此种方式。集群部署模式也会讲,但因为资源有限,建议采用此种模式。Hadoop和Spark可以相互协作,由Hadoop的HDFS、HBase等组件负责数据的存储和管理,由Spark负责数据的计算。

1.3搭建Spark开发环境Spark的部署方式Spark部署方式分为单机和集群2种模式;集群又分为四种方式,如下图:

YARN模式Mesos和K8S模式Standalone模式

1.3搭建Spark开发环境Spark集群的部署方式Standalone模式被称为集群单机模式。该模式下,Spark集群架构为主从模式,即一台Master节点与多台Slave节点,Slave节点启动的进程名称为Worker,存在单点故障的问题。Standalone模式(重点):

1.3搭建Spark开发环境Spark集群的部署方式Mesos模式被称为SparkonMesos模式。Mesos是一款资源调度管理系统,为Spark提供服务,由于Spark与Mesos存在密切的关系,因此在设计Spark框架时充分考虑到对Mesos的集成。Mesos模式:

1.3搭建Spark开发环境Spark集群的部署方式Yarn模式被称为SparkonYarn模式,即把Spark作为一个客户端,将作业提交给Yarn服务。由于在生产环境中,很多时候都要与Hadoop使用同一个集群,因此采用Yarn来管理资源调度,可以提高资源利用率。Yarn模式(重点):

1.3搭建Spark开发环境Spark集群的部署方式Kubernetes(K8S)是Google开源的容器集群管理系统,提供应用部署、维护、扩展等功能,能够方便地管理大规模跨主机的容器应用Docker是轻量级虚拟化容器技术,具有轻便性、隔离性、一致性等特点,可以极大简化开发者的部署运维流程,降低服务器成本。Kubernetes模式(难点):1.4运行Pyspark体验Spark程序pyspark提供了简单的方式来学习SparkAPIpyspark可以以实时、交互的方式来分析数据pyspark提供了Python交互式执行环境pyspark命令及其常用的参数如下:pyspark--master<master-url>Spark的运行模式取决于传递给SparkContext的MasterURL的值。MasterURL可以是以下任一种形式:1、local使用一个Worker线程本地化运行SPARK(完全不并行)2、

local[*]使用逻辑CPU个数数量的线程来本地化运行Spark3、local[K]使用K个Worker线程本地化运行Spark(理想情况下,K应该根据运行机器的CPU核数设定)4、spark://HOST:PORT

连接到指定的Sparkstandalonemaster。默认端口是70775、yarn-client

以客户端模式连接YARN集群。集群的位置可以在HADOOP_CONF_DIR环境变量中找到6、yarn-cluster

以集群模式连接YARN集群。集群的位置可以在HADOOP_CONF_DIR环境变量中找到7、mesos://HOST:PORT

连接到指定的Mesos集群。默认接口是50501.4运行Pyspark体验Spark程序在Spark中采用本地模式启动pyspark的命令主要包含以下参数:

--master:这个参数表示当前的pyspark要连接到哪个master,如果是local[*],就是使用本地模式启动pyspark,其中,中括号内的星号表示需要使用几个CPU核心(core),也就是启动几个线程模拟Spark集群

--jars:这个参数用于把相关的JAR包添加到CLASSPATH中;如果有多个jar包,可以使用逗号分隔符连接它们1.4运行Pyspark体验Spark程序比如,要采用本地模式,在4个CPU核心上运行pyspark:$cd/opt/spark$./bin/pyspark--masterlocal[4]或者,可以在CLASSPATH中添加code.jar,命令如下:$cd/opt/spark$./bin/pyspark--masterlocal[4]--jarscode.jar可以执行“pyspark--help”命令,获取完整的选项列表,具体如下:$cd/opt/spark$./bin/pyspark--help1.4运行Pyspark体验Spark程序启动pyspark成功后在输出信息的末尾可以看到“>>>”的命令提示符执行如下命令启动pyspark(默认是local模式):$cd/opt/spark$./bin/pyspark1.4运行Pyspark体验Spark程序可以在里面输入python代码进行调试:可以使用命令“exit()”退出pyspark:>>>8*2+521>>>:exit()1.4运行Pyspark体验Spark程序1.5开发Spark独立应用程序1.5.1编写程序1.5.2通过spark-submit运行程序1.5.1编写程序1frompysparkimportSparkConf,SparkContext2conf=SparkConf().setMaster("local").setAppName("MyApp")3sc=SparkContext(conf=conf)4logFile="file:///opt/spark/README.md"5logData=sc.textFile(logFile,2).cache()6numAs=logData.filter(lambdaline:'a'inline).count()7numBs=logData.filter(lambdaline:'b'inline).count()8print('Lineswitha:%s,Lineswithb:%s'%(numAs,numBs))$cd/opt/spark/mycode/python$python3WordCount.py对于这段Python代码,可以直接使用如下命令执行:执行该命令以后,可以得到如下结果:Lineswitha:62,Lineswithb:30WordCount.py1.5.2通过spark-submit运行程序可以通过spark-submit提交应用程序,该命令的格式如下:spark-submit--master<master-url>--deploy-mode<deploy-mode>#部署模式...#其他参数<application-file>#Python代码文件[application-arguments]#传递给主类的主方法的参数可以执行“spark-submit--help”命令,获取完整的选项列表$cd/opt/spark$./bin/spark-submit--help1.5.2通过spark-submit运行程序MasterURL可以是以下任一种形式:

*local使用一个Worker线程本地化运行SPARK(完全不并行)

*local[*]使用逻辑CPU个数数量的线程来本地化运行Spark

*local[K]使用K个Worker线程本地化运行Spark(理想情况下,K应该根据运行机器的CPU核数设定)

*spark://HOST:PORT连接到指定的Sparkstandalonemaster。默认端口是7077.

*yarn-client以客户端模式连接YARN集群。集群的位置可以在HADOOP_CONF_DIR环境变量中找到。

*yarn-cluster以集群模式连接YARN集群。集群的位置可以在HADOOP_CONF_DIR环境变量中找到。

*mesos://HOST:PORT连接到指定的Mesos集群。默认接口是5050。1.5.2通过spark-submit运行程序以通过spark-submit提交到Spark中运行,命令如下:可以在命令中间使用“\”符号,把一行完整命令“人为断开成多行”进行输入,效果如下:$/opt/spark/bin/spark-submit\>/opt/spark/mycode/python/WordCount.py上面命令的执行结果如下:Lineswitha:62,Lineswithb:32为了避免其他多余信息对运行结果的干扰,可以修改log4j的日志信息显示级别:log4j.rootCategory=INFO,consolelog4j.rootCategory=ERROR,console修改为1.6本讲小结了解Spark生态圈技术和Spark特点。理解Spark和Hadoop优缺点。理解Spark的运行架构和原理。掌握SparkLocal模式环境的搭建。掌握pyspark程序的运行。谢谢!《Spark大数据技术实战》

第2讲Spark集群基础环境Hadoop集群准备

《Spark大数据技术实战》上节内容回顾Spark简介Spark运行架构和原理搭建SparkLocal+Hadoop伪分布式环境运行pyspark体验spark程序本节内容提纲

Spark集群部署模式2.22.1Spark集群基础环境简介2.3Spark集群基础环境Hadoop分布式环境构建✎本讲学习目标理解掌握掌握理解Spark集群的部署模式12掌握Spark集群基础环境的搭建3掌握Spark集群基础环境的运行测试本讲主要通过实操讲解Hadoop完全分布式集群环境的搭建,为下节课Spark集群环境的搭建提供支持。本讲概要为了让Spark获取更好的大规模数据处理能力,需要构建Spark集群环境,但构建Spark集群环境之前必须先构建Hadoop完全分布式集群,本讲主要讲解Spark集群环境的基础实验环境Hadoop完全分布式集群的构建,为下节课的Spark集群的构建做好准备。

2.1Spark集群基础环境Spark集群基础环境简介Spark是一个开源的可应用于大规模数据处理的分布式计算框架,该框架可以独立安装使用,也可以和Hadoop集群一起安装使用。为了让Spark获取更好的大规模数据处理能力,需要构建Spark集群环境,但构建Spark集群环境之前必须先构建Hadoop完全分布式集群,因此要搭建Spark集群环境必须先搭建好Hadoop完全分布式集群基础环境。

2.1Spark集群基础环境Spark集群基础环境简介搭建Spark集群环境前,需要先搭建Hadoop集群环境,本课程集群环境采用如下配置。1.操作系统:Linux系统(建议Ubuntu20.04)2.Spark:3.1.2版本(大于该版本的也可以)3.Hadoop:3.3.1版本(大于该版本都可以)4.JDK:1.11以上版本。

2.1Spark集群基础环境Spark集群基础环境简介Hadoop集群环境,集群机器说明:(1主2从)一台Ubuntu主机系统作Master,一台Ubuntu主机系统做slave1,一台Ubuntu主机系统做slave2。三台主机机器处于同一局域网下。如果有实体物理机更好;如果没有,也可以采取三台虚拟机。这里使用三台主机搭建分布式集群环境,更多台机器同样可以使用如下配置。注意集群虚拟机静态ip的配置。

2.2Spark集群环境Spark集群的部署方式Spark集群分为四种方式,如下图:

YARN模式Mesos或K8S模式Standalone模式

2.2Spark集群部署模式Spark集群的部署方式Standalone模式被称为集群单机模式。该模式下,Spark集群架构为主从模式,即一台Master节点与多台Slave节点,Slave节点启动的进程名称为Worker,存在单点故障的问题。Standalone模式(重点):

2.2Spark集群部署模式Spark集群的部署方式Mesos模式被称为SparkonMesos模式。Mesos是一款资源调度管理系统,为Spark提供服务,由于Spark与Mesos存在密切的关系,因此在设计Spark框架时充分考虑到对Mesos的集成。Mesos模式:

2.2Spark集群部署模式Spark集群的部署方式Yarn模式被称为SparkonYarn模式,即把Spark作为一个客户端,将作业提交给Yarn服务。由于在生产环境中,很多时候都要与Hadoop使用同一个集群,因此采用Yarn来管理资源调度,可以提高资源利用率。Yarn模式(重点):

2.3Spark集群基础环境搭建Hadoop完全分布式集群这里搭建的是3个节点的完全分布式集群,即1个nameNode,2个dataNode,分别如下:Ubuntu-masternameNode28Ubuntu-slave1dataNode29Ubuntu-slave2dataNode30

2.3Spark集群基础环境搭建Hadoop完全分布式集群搭建步骤步骤1:安装JDK步骤2:安装Hadoop并进行集群配置步骤3:安装SSH、配置SSH无密码登录步骤4:验证并测试Hadoop集群环境注:详细实操步骤请参考实验2文档。本讲小结理解Spark集群的部署模式。掌握Spark集群基础环境Hadoop完全分布式集群的搭建。掌握Hadoop完全分布式集群的配置与测试。谢谢!《Spark大数据技术实战》第3讲Spark集群搭建与使用

《Spark大数据技术实战》上节内容回顾Spark集群基础环境简介Spark集群部署模式Spark集群基础环境Hadoop分布式集群构建本节内容提纲

Spark集群准备工作:Haoop分布式集群搭建3.23.1Spark集群概况3.3

安装Spark本节内容提纲

Spark配置3.53.4配置环境变量3.6Spark集群启动与关闭3.7Spark集群的使用✎本讲学习目标理解掌握掌握理解Spark集群的部署模式12掌握Spark集群环境的搭建3掌握Spark集群的使用本讲主要通过实操讲解Spark集群环境的搭建和使用,为后续Spark生态圈知识的学习提供支持。本讲概要为了让Spark获取更好的大规模数据处理能力,需要构建Spark集群环境。本讲主要讲解Spark集群环境配置:采用3台机器(节点)作为实例来实现如何搭建Spark集群;(1个master节点和2个slave节点)3.1集群概况采用3台机器(节点)作为实例来演示如何搭建Spark集群其中1台机器(节点)作为Master节点另外两台机器(节点)作为Slave节点(即作为Worker节点),主机名分别为Slave1和Slave2MasterSlave1Slave23.2准备工作:搭建Hadoop集群环境Spark+HDFS运行架构请参考实验2,此步骤上节课已经完成。也可参考如下地址:/blog/1177-2/3.3安装Spark1.下载:本实验使用Spark:3.1.2版本:spark-3.1.2-bin-without-hadoop下载地址:/dist/spark/,如图2-11所示。3.3安装Spark2.Spark安装。找到下载源文件进行解压、重命名和授权。命令和操作如下所示。3.4配置环境变量1.在Master节点主机的终端中执行如下命令。命令和操作如下所示。hadoop@master:~$sudovim/etc/profile#配置环境变量#在profile文件中添加如下配置:exportSPARK_HOME=/opt/sparkcluster/sparkexportPATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbinhadoop@master:~$source/etc/profile#执行source命令使得配置文件立即生效运行source命令使得配置立即生效:3.5Spark配置1.配置workers文件。将workers.template拷贝到workers。通过workers文件设置Worker节点。编辑workers内容,把默认内容localhost替换成如下内容。命令和操作如下所示。#workers文件中找到localhost替换为如下内容slave1slave23.5Spark配置2.配置spark-env.sh文件将spark-env.sh.template拷贝到spark-env.sh,编辑spark-env.sh,添加如下内容。命令和操作如下所示。编辑spark-env.sh,添加如下内容:exportSPARK_DIST_CLASSPATH=$(/opt/hadoopcluster/hadoop-3.3.1/bin/hadoopclasspath)exportHADOOP_CONF_DIR=/opt/hadoopcluster/hadoop-3.3.1/etc/hadoopexportSPARK_MASTER_IP=353.5Spark配置3.配置好后,将Master主机上的/opt/spark文件夹复制到各个节点上在Master主机上执行如下命令:在slave1,slave2节点上分别执行下面同样的操作:3.5Spark配置4.5.设置JAVA_HOME。在slave1,slave2节点上分别设置jdk路径。命令和操作如下所示。切换到对应的slave的spark根目录,在sbin目录下的spark-config.sh中添加正确的jdk路径。命令和操作如下所示。在slave2节点上分别执行上面同样的操作,不再重复。hadoop@slave1:~$cd/opt/sparkcluster/spark/sbin/hadoop@slave1:/opt/sparkcluster/spark/sbin$sudovimspark-config.sh#添加如下配置信息:exportJAVA_HOME=/opt/java/jdk-11.0.12/#自己安装的jdk路径exportPATH=$PATH:$JAVA_HOMR/bin3.6Spark集群启动1.首先启动Hadoop集群。在Master节点主机上运行start-all.sh命令。命令和操作如下所示。hadoop@master:~$start-all.sh启动Spark集群,首先要先启动Hadoop集群,然后启动Master节点,最后启动所有Slave节点。启动完毕要执行jps命令检查集群是否启动成功。如果启动成功,可以通过Web浏览器访问集群进行查看相关信息。3.6Spark集群启动2.启动Master节点。在master节点运行start-master.sh命令。命令和操作如下所示。hadoop@master:~$start-master.sh3.启动所有Slave节点。在master节点运行start-workers.sh命令。命令和操作如下所示。hadoop@master:~$start-workers.sh3.6Spark集群启动4.jps命令检查spark集群是否启动成功。分别在master节点、slave1节点和slave2节点执行jps命令;如果master节点显示NameNode、ResourceManager、SecondaryNameNode和Master进程,slave1和slave2节点显示NodeManager和Worker进程,表明Spark集群启动成功。命令和操作如下所示。3.6Spark集群启动5.在浏览器上查看Spark独立集群管理器的集群信息.如图2-12所示。访问地址:http://master:8080/3.6Spark集群关闭1.关闭Master节点:stop-master.sh2.关闭Worker节点:stop-workers.sh3.关闭Hadoop集群:stop-all.sh关闭Spark集群要首先关闭Master节点,然后关闭Worker节点,最后关闭Hadoop集群。命令和操作如下所示。3.7集群使用-在集群上运行Spark应用程序3.7.1Standalone集群测试与应用3.7.2高可用HAStandalone集群3.7.3SparkonYARN集群测试与应用3.7.1Standalone集群测试与应用Standalone模式是Spark自带的一种集群模式,不同于前面本地模式启动多个进程来模拟集群的环境,Standalone模式是真实地在多个机器之间搭建Spark集群的环境,完全可以利用该模式搭建多机器集群,用于实际的大数据处理。Standalone是完整的Spark运行环境,其中:Master角色以Master进程存在,Worker角色以Worker进程存在,Driver和Executor运行于Worker进程内,由Worker提供资源供给它们运行。Standalone集群如图所示。3.7.1Standalone集群测试与应用Standalone集群在进程上主要有3类进程:1.主节点Master进程:Master角色,管理整个集群资源,并托管运行各个任务的Driver2.从节点Workers:Worker角色,管理每个机器的资源,分配对应的资源来运行Executor(Task);每个从节点分配资源信息给Worker管理,资源信息包含内存Memory和CPUCores核数。3.历史服务器HistoryServer(可选):SparkApplication运行完成以后,保存事件日志数据至HDFS,启动HistoryServer可以查看应用运行相关信息。3.7.1Standalone集群测试与应用1.启动Standalone集群。命令和操作如下所示。3.7.1Standalone集群测试与应用2.通过pyspark连接到Standalone集群连接方式如下:bin/pyspark--masterspark://master:7077其中--master参数表示连接到Standalone集群,如果不加该选项,表示Local模式运行。集群运行词频统计案例如下:3.7.1Standalone集群测试与应用3.通过spark-submit提交程序到Standalone集群通过spark-submit提交spark官方自带的计算圆周率的案例程序到Standalone集群,可得到Pi值,命令和操作如下:3.7.1Standalone集群测试与应用4.通过Web查看集群运行的信息监控端口是8080:默认是Standalone下,Master角色(进程)的Web端口,用以查看当前Master(集群)的状态。Web访问地址为:http://master:8080,可以通过Web界面查看集群的各种状态以及运行的程序。如图所示。3.7.2高可用HAStandalone集群StandaloneHA的原理是基于Zookeeper做状态的维护,开启多个Master进程,一个作为活跃,其它的作为备份,当活跃进程宕机,备份Master进行接管。SparkStandalone集群是Master-Slaves架构的集群模式,和大部分的Master-Slaves结构集群一样,存在着Master单点故障(SPOF)的问题如何解决这个单点故障的问题,Spark提供了两种方案:1.基于文件系统的单点恢复(Single-NodeRecoverywithLocalFileSystem),这种方案只能用于开发或测试环境。2.基于zookeeper的StandbyMasters(StandbyMasterswithZooKeeper),这种情况可以用于生产环境。3.7.3SparkonYARN集群测试与应用对于企业来说,在已有YARN集群的前提下在单独准备SparkStandalone集群,对资源的利用就不高,所以,在企业中多数场景下,会将Spark运行到YARN集群中。YARN本身是一个资源调度框架,负责对运行在内部的计算框架进行资源调度管理。作为典型的计算框架,Spark本身也是直接运行在YARN中,并接受YARN的调度的。所以,对于SparkOnYARN,无需部署Spark集群,只要找一台服务器,充当Spark的客户端,即可提交任务到YARN集群中运行。3.7.3SparkonYARN集群测试与应用1.SparkOnYARN的本质Master角色由YARN的ResourceManager担任;Worker角色由YARN的NodeManager担任;Driver角色运行在YARN容器内或提交任务的客户端进程中,真正执行任务的Executor运行在YARN提供的容器内。2.使用SparkOnYARN需要做的准备工作(1)需要YARN集群,这个在前面章节搭建Hadoop集群时已经安装了。(2)需要Spark客户端工具,比如spark-submit,可以将Spark程序提交到YARN中。这个前面章节已经测试和学习过。需要被提交的代码程序,如spark/examples/src/main/python/pi.py,计算圆周率的示例程序,或我们后续自己开发的Spark程序。3.7.3SparkonYARN集群测试与应用3.SparkOnYARN的部署模式SparkOnYARN是有两种运行模式的,一种是Cluster模式,另一种是Client模式。这两种模式的区别就是Driver运行的位置。具体区别对比如表2-2所示3.7.3SparkonYARN集群测试与应用4.Cluster模式(1)运行架构3.7.3SparkonYARN集群测试与应用4.Cluster模式(2)运行流程3.7.3SparkonYARN集群测试与应用4.Cluster模式(3)测试:运行官网提供的计算圆周率PI程序,采用cluster模式,命令和操作如下:3.7.3SparkonYARN集群测试与应用4.Cluster模式由于Cluster模式Driver输出结果不能在客户端显示,上述命令执行完毕以后,我们需要到YARN集群上Web端的输出日志Logs下查看输出结果,YARN集群的监控端口是8088,输入访问地址:http://master:8088/cluster/,如图所示。3.7.3SparkonYARN集群测试与应用5.Client模式(1)运行架构3.7.3SparkonYARN集群测试与应用5.Client模式(2)程序执行流程3.7.3SparkonYARN集群测试与应用5.Client模式(3)测试:运行官网提供的计算圆周率PI程序,采用Client模式,命令和操作如下所示:Client模式和Cluster模式最最本质的区别是:Driver程序运行在哪里。Client模式:学习测试时使用,生产环境不推荐。如果要用也可以,但是性能和稳定性略低。(1)Driver运行在Client上,和集群的通信成本高(2)Driver输出结果会在客户端显示Cluster模式:生产环境中使用该模式(1)Driver程序在YARN集群中,和集群的通信成本低(2)Driver输出结果不能在客户端显示(3)该模式下Driver运行ApplicattionMaster这个节点上,由Yarn管理,如果出现问题,yarn会重启ApplicattionMaster(Driver)3.7.3SparkonYARN集群测试与应用

SparkOnYarn两种模式总结本讲小结理解Spark集群的部署模式。掌握Spark集群搭建。掌握Spark集群的使用。谢谢!《Spark大数据技术实战》第4讲基于Python开发Spark应用程序

《Spark大数据技术实战》上节内容回顾Spark集群的部署模式Spark集群环境搭建Spark集群应用和测试Standalone集群和Yarn集群应用和测试本节内容提纲

Python和PySpark的关系4.24.1基于Python开发Spark的方式4.3PySpark的安装与使用4.4

spark-submit运行程序✎本讲学习目标理解掌握掌握理解基于Python开发Spark的方式12掌握Python语言和PySpark之间的关系3掌握PySpark的安装与使用掌握spark-submit运行程序4掌握

本讲主要通过理论和实操讲解如何搭建并使用Python开发Spark应用程序以及Spark和PySpark之间的关系,spark-submit的使用等。为后续Spark生态圈知识的学习提供支持。本讲概要Spark的编程语言可以选择Scala、Python、R、Java和SQL,因Python有着广泛的应用群体,本教材基于Python语言进行编写。本讲主要讲解如何使用Python编写并运行Spark应用程序。4.1基于Python开发运行Spark应用程序基于Python开发运行Spark应用程序有3种方式,分别为PySparkShell命令行方式,客户端spark-submit方式,第三方集成开发工具JupyterNotebook或者PyCharm方式。Spark的运行模式有5种,分别为:Local、Standalone、Yarn、Mesos,Kubernetes,每种模式的说明如表3-1所示。4.2Python编程语言与PySparkPySpark是Spark为Python开发者提供的API。PySpark是在原有Spark运行架构的基础上封装的一层PythonAPI,原理是利用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进程执行,PySpark执行原理如图3-1所示。4.3PySpark的安装Spark应用的开发流程一般是先在本地调试代码,然后将代码提交到集群运行。在使用Python进行Spark应用开发时,Spark提供了相应的PySpark库,安装后即可像编写一般的Python程序一样编写Spark程序。PySpark的安装方式主要分为在线pip命令安装和离线安装两种。4.3.1PySpark的安装-使用pip命令安装1.使用pip命令安装。打开Linux的命令行终端窗口,执行pipinstallpyspark命令即可安装。如果资源有限,建议在本地环境下安装。下面示例在本地环境安装,执行命令和操作如下所示。提示:如果本地环境中pip命令未安装,可以先执行sudoapt-getupdate,然后再执行sudoapt-getinstallpip进行安装。最后再执行上述命令安装pyspark。4.3.2PySpark的安装-使用离线包安装2.使用离线包安装切换到解压缩后的spark目录下的python文件夹。执行命令和安装过程如下所示。cd/opt/spark/python/sudopython3setup.pyinstall4.4PySpark的使用1.在使用PySpark之前,先启动Spark本地或集群环境,最后执行pyspark命令进行启动。4.4.1PySpark交互命令行的启动方式关于PySpark启动的几种模式,涉及的参数说明如表3-2所示。4.4.1PySpark交互命令行的启动方式关于PySpark启动的几种模式,涉及的参数说明如表3-2所示。4.4.1PySpark交互命令行的启动方式1.以Local运行模式,启动PySparkLocal模式在本地环境和集群环境都可以执行,如果资源有限,建议本地环境执行。执行命令和操作如下所示。pyspark--masterlocal[4]#启动Local模式sc.master#查看当前的运行模式4.4.1PySpark交互命令行的启动方式2.以Standalone运行模式,启动PySparkStandalone模式在集群环境可以执行,下列示例采取集群模式执行。执行命令和操作如下所示。pyspark--masterspark://master:7077#启动Standalone模式sc.master#查看当前的运行模式4.4.1PySpark交互命令行的启动方式3.以YARN模式运行,启动PySparkYARN模式只能在集群环境执行,分为Cluster和Client两种方式。执行命令和操作如下所示。pyspark--masteryarn--deploy-modeclient#启动YARN集群,以Client方式连接到yarn,如果以Cluster方式连接,参数为--deploy-modeclustersc.master#查看当前的运行模式4.5spark-submit1.spark-submit简介spark-submit脚本通常位于/opt/spark/bin目录下,可以用whichspark-submit来查看它所在的位置,spark-submit用来启动集群中的应用,它使用统一的提交接口支持各种类型的集群服务器。为了将应用发布到集群中,通常会将应用打成.jar包,在运行spark-submit时将jar包当做参数提交。可以通过spark-submit-h命令查看用法。命令和操作示例如下所示。4.5spark-submit2.spark-submit参数spark-submit提交应用程序,该命令的通用格式如下:spark-submit--master<master-url>--deploy-mode<deploy-mode>#部署模式...#其他参数<application-file>#Python代码文件[application-arguments]#传递给主类的主方法的参数4.5spark-submitspark-submit脚本使用时有很多启动参数,启动参数说明如表3-3所示。2.spark-submit参数4.5spark-submitspark-submit脚本使用时有很多启动参数,启动参数说明如表3-3所示。2.spark-submit参数4.6spark-submit运行程序1.编写词频统计程序spark-submit脚本使用时有很多启动参数,启动参数说明如表3-3所示。单机环境下词频统计程序准备:首先在本地目录/opt/spark目录下新建一个文件夹mycode,然后在该文件夹下使用python编写一个词频统计程序WordCount.py,统计本地spark目录下的READEME.md文件中a和b字符的个数。操作示例和程序内容如下:4.6spark-submit运行程序1.编写词频统计程序#词频统计WordCount.py程序内容如下:frompysparkimportSparkConf,SparkContextconf=SparkConf().setMaster("local").setAppName("MyApp")#设定local模式,也可以在提交时指定sc=SparkContext(conf=conf)logFile="file:///opt/spark/README.md"#需要统计的源文件路径logData=sc.textFile(logFile,2).cache()numAs=logData.filter(lambdaline:'a'inline).count()numBs=logData.filter(lambdaline:'b'inline).count()print('Lineswitha:%s,Lineswithb:%s'%(numAs,numBs))4.6spark-submit运行程序集群环境下词频统计程序准备:首先在集群master节点目录/opt/sparkcluster目录下新建一个文件夹mycode,然后在该文件夹下使用python编写一个词频统计程序WordCount.py,统计master节点/opt/sparkcluster/spark/目录下的READEME.md文件中a和b字符的个数。操作示例和程序内容如下:1.编写词频统计程序4.6spark-submit运行程序hadoop@master:~$cd/opt/sparkcluster/hadoop@master:/opt/sparkcluster$sudomkdirmycode#创建mycode文件夹hadoop@master:/opt/sparkcluster$cdmycode/hadoop@master:/opt/sparkcluster/mycode$sudovimWordCount.py#编写词频统计程序hadoop@master:/opt/sparkcluster/mycode$#词频统计WordCount.py程序内容如下:frompysparkimportSparkConf,SparkContextconf=SparkConf().setAppName("MyApp")#不设置模式,提交时指定sc=SparkContext(conf=conf)logFile="file:///opt/sparkcluster/spark/README.md"#需要统计的源文件路径logData=sc.textFile(logFile,2).cache()numAs=logData.filter(lambdaline:'a'inline).count()numBs=logData.filter(lambdaline:'b'inline).count()print('Lineswitha:%s,Lineswithb:%s'%(numAs,numBs))1.编写词频统计程序4.6spark-submit运行程序2.spark-submit提交到Local模式在单机环境和集群环境下都可以通过spark-submit提交运行。单机环境下通过spark-submit提交词频统计程序WordCount.py到Spark中运行,可得词频统计结果Lineswitha:64,Lineswithb:32,命令和操作如下所示。4.6spark-submit运行程序提示:上述spark-submit命令后的--masterlocal参数也可以省略不写,默认就是以local方式提交的,在代码中已经指定。上述操作可以在命令中间使用“\”符号,把一行完整命令“断开成多行”进行输入,显得更有逻辑和层次感,命令和操作如下所示。2.spark-submit提交到Local模式4.6spark-submit运行程序3.spark-submit提交到Standalone模式Standalone模式属于集群模式,要首先启动spark集群,然后再通过spark-submit在master节点下提交程序。执行命令和操作如下所示。hadoop@master:/opt/sparkcluster/spark/bin$spark-submit--masterspark://master:7077/opt/sparkcluster/mycode/WordCount.py#中间省略了很多INFO级别输出4.6spark-submit运行程序4.spark-submit提交到YARN模式YARN模式属于集群模式,要首先启动spark集群,然后再通过spark-submit提交程序。执行命令和操作如下所示。hadoop@master:/opt/sparkcluster/spark/bin$spark-submit--masteryarn--deploy-modeclient/opt/sparkcluster/mycode/WordCount.py#中间省略了很多INFO级别输出4.7设置Spark日志输出内容控制Spark程序运行时会产生大量的程序执行记录日志,其中有效的日志级别从低到高依次为Debug、INFO、WARN、ERROR、FATA。控制日志输出内容的方式有两种。1.修改perties日志配置文件文件位置为/opt/spark/conf,默认为控制台输出INFO及以上级别的信息。把INFO修改为ERROR,重启Spark,运行PySpark控制台就没有INFO级别的输出,在程序运行异常时能够更快更准确的定位问题的原因。下面示例以单机环境为例,集群环境的配置可以类比单机环境。执行命令和修改代码如下所示。4.7设置Spark日志输出内容控制hadoop@bigdataVM:~$cd/opt/spark/conf/#切换目录hadoop@bigdataVM:/opt/spark/conf$ls#查看log4j日志文件fairscheduler.xml.templatespark-defaults.conf.templateworkers.templateperties.templatespark-env.shperties.templatespark-env.sh.templatehadoop@bigdataVM:/opt/spark/conf$sudomvperties.templateperties#重命名[sudo]hadoop的密码:hadoop@bigdataVM:/opt/spark/conf$sudovimperties#修改配置Log4j.rootCategory=INFO,console#修改前默认配置Log4j.rootCategory=ERROR,console#修改后配置4.7设置Spark日志输出内容控制修改完毕后,重新在单机环境和集群环境通过spark-submit提交词频统计程序,输出结果如图3-4、3-5所示。单机环境下提交执行输出结果:4.7设置Spark日志输出内容控制集群环境下提交到yarn模式:输出结果由上图可见,控制台输出内容少了INFO和WARN级别的输出。4.7设置Spark日志输出内容控制2.在程序代码中使用setLogLeve(logLevel)控制日志输出代码设置如下:sc=SparkContext(‘local[2]’,‘Sparktest’)sc.setLogLevel(“ERROR”)实践任务1:使用JupyterNotebook编写Spark应用程序实践任务2:使用PyCharm编写Spark应用程序本讲小结理解基于Python开发Spark的方式。理解Python和PySpark的关系。掌握PySpark的安装和使用。掌握spark-submit运行程序广州软件学院软件工程系谢谢!《Spark大数据技术实战》第5讲RDD运行原理与编程基础

--RDD的创建与操作

《Spark大数据技术实战》上节内容回顾基于Python开发Spark的方式Python和PySpark的关系PySpark的安装和使用spark-submit运行程序本节内容提纲

RDD编程基础-RDD创建5.25.1RDD概述5.3

RDD编程基础-RDD操作✎本讲学习目标理解掌握掌握理解理解RDD的运行原理12掌握RDD的编程基础-RDD的创建理解RDD的执行流程34掌握RDD常用操作本讲主要通过理论和实操讲解RDD的运行原理和编程基础,RDD的创建和操作,为后续RDD的分区、持久化、综合案例的学习提供支持。本讲概要RDD(ResilientDistributedDataset),即弹性分布式数据集,是一个容错的、并行的数据结构,可以让用户显式地将数据存储到磁盘和内存中,并且还能控制数据的分区。5.1RDD概述1.什么是RDD?2.为什么需要使用RDD?3.RDD的五大特征4.RDD的执行流程5.1RDD概述1.什么是RDD?(1)RDD(ResilientDistributedDataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,代表一个不可变、可分区、里面的元素可并行计算的集合。(2)所有的运算以及操作都建立在

RDD数据结构的基础之上。(3)可以认为RDD是分布式的列表List或数组Array,抽象的数据结构,RDD是一个抽象类AbstractClass和泛型GenericType。RDD表示如图4-1所示。5.1RDD概述(4)RDD提供了一组丰富的操作以支持常见的数据运算,分为“动作”(Action)和“转换”(Transformation)两种类型(5)RDD提供的转换接口都非常简单,都是类似map、filter、groupBy、join等粗粒度的数据转换操作,而不是针对某个数据项的细粒度修改(不适合网页爬虫)(6)表面上RDD的功能很受限、不够强大,实际上RDD已经被实践证明可以高效地表达许多框架的编程模型(比如MapReduce、SQL、Pregel)(7)Spark提供了RDD的API,程序员可以通过调用API实现对RDD的各种操作1.什么是RDD?5.1RDD概述2.为什么需要使用RDD?分布式计算需要以下功能:(1)分区控制(2)Shuffle控制(3)数据存储,序列化,发送(4)数据计算API这些功能不能简单的通过Python内置的本地集合对象(如List、字典等)去完成。在分布式框架中,需要有一个统一的数据抽象对象,来实现上述分布式计算所需的功能。这个抽象对象,就是RDD。5.1RDD概述许多迭代式算法(比如机器学习、图算法等)和交互式数据挖掘工具,共同之处是,不同计算阶段之间会重用中间结果目前的MapReduce框架都是把中间结果写入到稳定存储(比如磁盘)中,带来了大量的数据复制、磁盘IO和序列化开销RDD就是为了满足这种需求而出现的,它提供了一个抽象的数据架构,我们不必担心底层数据的分布式特性,只需将具体的应用逻辑表达为一系列转换处理,不同RDD之间的转换操作形成依赖关系,可以实现管道化,避免中间数据存储2.为什么需要使用RDD?5.1RDD概述3.RDD的五大特征RDD数据结构内部有五个特征,前三个特征是每个RDD都具备的,后两个特征是可选的。第1个特征为:1.RDD是有分区的RDD的分区是RDD数据存储的最小单位,一份RDD的数据本质上是分隔成了多个分区。假设RDD内有3个分区,存储了数据1、2、3、4、5、6。如图4-2所示,数据本质上是存储在三个分区上。5.1RDD概述RDD数据结构内部有五个特征,前三个特征是每个RDD都具备的,后两个特征是可选的。第2个特征为:2.RDD的方法会作用在其所有分区上如图4-4所示,将RDD的数据通过map()方法统一乘以5转换后,我们发现RDD的3个分区的数据都乘以5了。3.RDD的五大特征5.1RDD概述RDD数据结构内部有五个特征,前三个特征是每个RDD都具备的,后两个特征是可选的。第3个特征为:3.RDD之间有依赖关系以词频统计分析为例说明依赖关系。假设HDFS系统默认用户目录下有一个words.txt文本,文本内容如下:hadoopsparkhadoopflinkhadoopsparkhadoopflinkhadoophadoop3.RDD的五大特征5.1RDD概述RDD数据结构内部有五个特征,前三个特征是每个RDD都具备的,后两个特征是可选的。第3个特征为:3.RDD之间有依赖关系以词频统计分析为例说明依赖关系。Spark实现WordCount执行流程如图4-5所示。从图中可以看出,共有4个RDD,它们之间是有依赖关系的。例如,RDD2会产生RDD3,但会依赖RDD1;同样,RDD3会产生RDD

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论