李翔-大数据技术

Big data technology!

第3章 Spark的部署与使用

Spark的部署与使用


1.Spark基础

1.1 什么是spark?

Apache Spark 是一个高速且通用的集群计算框架,具有以下层次结构和特点:

  1. 基本概念:

    • 定义: Spark 是一个通用的大数据计算框架。

    • 计算模型: 基于 RDD(弹性分布式数据集)的模型,允许分布式处理大量数据。

  2. 核心优势:

    • 速度: 相比 Hadoop MapReduce,Spark 的处理速度可快达 100 倍。

    • 内存计算: 数据处理工作主要在内存中进行,减少了磁盘I/O。

    • 批处理与流处理: 结合了流处理的能力,可用于下一代批处理任务。

  3. 部署灵活性:

    • 独立部署: 可作为独立集群部署,需要配合相应的存储层。

    • 与Hadoop集成: 可以与现有 Hadoop 集群集成,甚至替代 MapReduce 引擎。

  4. 数据处理特点:

    • 数据拆分: 将大数据集拆分并分别并行处理。

    • 结果合并: 合并处理后的结果。

    • 存储交互: 只在数据读入和最终结果存储时与存储层交互。

  5. 生态系统和易用性:

    • 丰富的生态系统: 包含各种库,支持机器学习、交互式查询等。

    • 易于编程: 相比 MapReduce,Spark 任务更易于编写。

  6. 多样性:

    • 多种任务处理: 可处理批处理和流处理任务。

    • 多样部署选项: 可独立部署或集成于 Hadoop。

总结来说,Spark 的设计旨在提供一个高速、灵活且易于使用的大数据处理平台,具备处理各种类型数据和任务的能力,是当今大数据领域的关键技术之一。


现在已经有很多大公司正在生产环境下深度地使用Spark作为大数据的计算框架,包括eBay.Yahool、 BAT、网易、京东、华为、大众点评、优酷土豆、搜狗等等。

Spark同时也获得了多个世界顶级IT厂商的支持,包括IBM、 Intel等。


1.2 Apache Spark其核心功能和组件:

img

  1. Spark Core:

    • 功能: 它是 Spark 的基础框架,提供分布式任务调度、输入输出功能、错误处理、存储管理等。

    • RDD: 引入了弹性分布式数据集(RDD)的概念,作为其基本的数据处理单元

  2. Spark SQL:

    • 作用: 用于处理结构化和半结构化数据。

    • 特点: 允许用户使用 SQL 或 HiveSQL 来查询数据,并支持多种数据源。

  3. Spark Streaming:

    • 应用: 用于处理实时数据流。

    • 特性: 提供了用于构建流式应用的 API,可以与 Spark Core 的批处理能力无缝集成。

  4. MLlib (机器学习库):

    • 目的: 提供机器学习算法的实现,包括分类、回归、聚类、协同过滤等。

    • 易用性: 让开发者能够容易地将机器学习功能集成到自己的应用中。

  5. GraphX:

    • 用途: 用于图形和图计算。

    • 功能: 提供了一套用于创建和处理图形的 API。

  6. 集群管理器:

    • 角色: 负责在各种集群管理器上调度 Spark 应用程序。

    • 支持: 包括 Spark 自带的独立集群管理器、Hadoop YARN、Apache Mesos 等。


spark特点

nowjava.com

1.3 Spark基本工作原理

  1. Spark的工作原理

    • 将数据分成小块【RDD】,在多个计算节点上并行处理,最后将结果汇总。

    • 提交Spark作业时,Driver将作业拆分成多个任务,并将这些任务分配到各个Executor节点上执行。

    • Executors在本地数据集上执行任务,通过shuffle操作将结果传递给其他Executors。

    • Driver收集所有Executors的结果,将它们合并成最终的输出。

  2. RDD(Resilient Distributed Datasets)

    • 是Spark中的重要数据结构,代表分布式的数据块。

    • 不可变、分布式、可以进行并行计算。

    • 可以通过各种转换操作(如map、filter、reduce等)进行处理,形成新的RDD。

    • 提供了容错机制,确保在某个节点出现故障时可以在其他节点上重新计算。

综上所述,Spark通过将数据分成小块,并在多个计算节点上并行处理这些小块,利用RDD作为基本数据结构,实现了高效、可靠的分布式数据处理。


最简单的理解: RDD就是源数据的抽象,或者叫映射也就是说,数据要被spark进行处理,在处理之前的首要任务就是要将数据映射成RDD,对于spark来说,RDD才是我们处理数据的规则,我只认RDD,只有RDD,通过我spark的计算引擎,才能发挥巨大的威力!

(1)分布式数据集 RDD是Spark提供的核心抽象,全称为Resillient Distributed Dataset,即弹性分布式数据集。

RDD在抽象上来说是一种元素集合,包含了数据。它是被分区的,分为多个分区,每个分区分布在集群中的不同节点上,从而让RDD中的数据可以被并行操作。

001


(2)弹性 RDD的数据默认情况下存放在内存中的,但是在内存资源不足时,Spark会自动将RDD数据写入磁盘。

002


(3)迭代式处理

对节点1、2、3、4上的数据进行处理完成之后,可能会移动到其他的节点内存中继续处理!Spark 与Mr最大的不同在与迭代式计算模型:Mr分为两个阶段,map和reduce,两个阶段处理完了就结束了,所以我们在一个job中能做的处理很有限,只能在map和reduce中处理;而spark计算过程可以分为n个阶段,因为他是内存迭代式的,我们在处理完一个阶段之后,可以继续往下处理很多阶段,而不是两个阶段。所以Spark相较于MR,计算模型可以提供更强大的功能。

003

(4)容错性 RDD最重要的特性就是,提供了容错性,可以自动从节点失败中恢复过来。即如果某个节点上的RDD partition,因为节点故障,导致数据丢了,那么RDD会自动通过自己的数据来源重新计算该partition。这一切对使用者是透明的。

004


1.4 Spark 运行模式及集群角色

1.4.1 Spark运行模式

运行模式运行类型说明
local本地模式常用于本地开发测试,Spark任务在单个本地节点上执行
standalone集群模式独立模式,在spark自己的资源调度管理框架上运行,该框架采用master/salve结构
yarn集群模式在yarn资源管理器框架上运行,由yarn负责资源管理,spark负责任务调度和计算

1.4.2 Spark集群角色

下图是spark的集群角色图,主要有集群管理节点cluster manager,工作节点worker,执行器executor,驱动器driver和应用程序application 五部分组成,下面详细说明每部分的特点。

005  

(1)Cluster Manager 集群管理器,它存在于Master进程中,主要用来对应用程序申请的资源进行管理,根据其部署模式的不同,可以分为local,standalone,yarn等模式。

(2)worker worker是spark的工作节点,用于执行任务的提交,主要工作职责有下面四点:

  • worker节点通过注册机向cluster manager汇报自身的cpu,内存等信息。

  • worker 节点在spark master作用下创建并启用executor,executor是真正的计算单元。

  • spark master将任务Task分配给worker节点上的executor并执行运用。

  • worker节点同步资源信息和executor状态信息给cluster manager。

    006


在yarn 模式下运行worker节点一般指的是NodeManager节点,standalone模式下运行一般指的是slave节点。

(3)executor executor 是真正执行计算任务的组件,它是application运行在worker上的一个进程。这个进程负责Task的运行,它能够将数据保存在内存或磁盘存储中,也能够将结果数据返回给Driver。

(4)Application

Application是Spark API 编程的应用程序,它包括实现Driver功能的代码和在程序中各个executor上要执行的代码,一个application由多个job组成。其中应用程序的入口为用户所定义的main方法。

(5)Driver 驱动器节点,driver是执行 Spark 应用程序的主要进程。它负责执行用户编写的代码,管理整个应用程序的执行流程,包括任务的分配、监控和调度等。 driver进程通常运行在集群中的一个节点上,可以与集群中的其他节点进行通信。它接收用户提交的 Spark 作业,并将作业划分为多个任务,然后将这些任务分配到各个工作节点(worker节点)上执行。

driver它是一个运行Application中main函数并创建SparkContext的进程。application通过Driver 和Cluster Manager及executor进行通讯。它可以运行在application节点上,也可以由application提交给Cluster Manager,再由Cluster Manager安排worker进行运行。

Driver节点也负责提交Job,并将Job转化为Task,在各个Executor进程间协调Task的调度。

(6)sparkContext sparkContext是整个spark应用程序最关键的一个对象,是Spark所有功能的主要入口点。核心作用是初始化spark应用程序所需要的组件,同时还负责向master程序进行注册等。


2. 安装 Spark

2.1 软件准备

下载Spark3.1.1安装文件。访问Spark官方下载地址下载。

本教程的具体运行环境如下:

  • Hadoop 3.1.3 集群

  • Java JDK 1.8

  • Spark 3.1.1


2.2 Spark的三种部署方式

(1)Local

  • 本地模式,运行在一台机器上,通常是练手或者测试环境。

  • Spark任务在单个本地节点上执行,适合小规模数据的快速验证。

(2)Standalone

  • 使用Spark自身的节点运行,构建一个由Master+Slaves组成的资源调度集群。

  • Spark任务通过Spark自身的调度系统提交给Master节点运行,适用于搭建独立的Spark集群。

(3)Yarn

  • Spark客户端直接连接到Hadoop的YARN资源管理器(ResourceManager),不需要额外构建Spark集群。

  • 有两种模式:

    • yarn-client: Driver程序运行在客户端,适用于交互和调试。

    • yarn-cluster: Driver程序运行在由YARN ResourceManager 启动的ApplicationMaster中,适用于生产环境。

Driver程序是Spark应用程序的中央控制器,负责协调和管理整个应用程序的执行流程,一般为spark的Main函数

007

2.3 spark安装

2.3.1 Standalone模式

standalone 作为 spark 自带的分布式部署模式,是最简单也是最基本的 spark 应用程序部署模式

独立部署(Standalone)模式由Spark自身提供计算资源,无需其他框架提供资源。这种方式降低了和其他第三方资源框架的耦合性,独立性非常强。

  • 构建一个由Master+Slave构成的Spark集群,Spark运行在集群中。 分布式部署集群,自带完整的服务,资源管理和任务监控是Spark自己监控,这个模式也是其他模式的基础。

集群规划:


masterslave1slave2
SparkWorker+MasterWorkerWorker


1. 环境准备
## 前提条件
- 已配置hadoop3.1.3完全分布式集群,
- spark-3.1.1-bin-hadoop3.2.tgz的安装包


2. 解压Spark
cd /opt/software/
[root@master software]# tar -zxvf spark-3.1.1-bin-hadoop3.2.tgz  -C ../apps/
cd /opt/apps
[root@master apps]# mv spark-3.1.1-bin-hadoop3.2/ spark

env:环境

3. 配置spark-env.sh
cd /opt/apps/spark/conf
mv spark-env.sh.template spark-env.sh
vim spark-env.sh

在文件的末尾添加

# JDK安装路径
export JAVA_HOME=/opt/apps/jdk
# 指定hadoop的配置项位置(yarn模式需要的,保证后续运行任务的路径都变成集群路径)
HADOOP_CONF_DIR=/opt/apps/hadoop/etc/hadoop
# 指定 Spark主节点主机名或 IP 地址
export SPARK_MASTER_HOST=master
# 指定 Spark 主节点端口号(内部通信用)
export SPARK_MASTER_PORT=7077
# 设置每个 Spark 工作节点使用的 CPU 核心数
export SPARK_WORKER_CORES=1
# 设置每个 Spark 工作节点可使用的内存大小
export SPARK_WORKER_MEMORY=1024M
# 指定了 Spark 主节点的 Web UI 端口号
export SPARK_MASTER_WEBUI_PORT=8080


4. 配置spark的工作节点
# 复制workers模板文件
cp /opt/apps/spark/conf/workers.template /opt/apps/spark/conf/workers
# 编辑workers文件
vim /opt/apps/spark/conf/workers

内容(根据自己的节点适当删减):

# 指定spark工作节点的主机名或IP地址,每行一个
master
slave1
slave2


5. 配置spark环境变量
# 依次在master、slave1、slave2节点上,添加spark环境变量:
vim /etc/profile

# 添加以下内容
export SPARK_HOME=/opt/apps/spark
export PATH=$PATH:$SPARK_HOME/bin

保存并退出,使环境变量生效:

source /etc/profile


6. 配置Job History Server

在运行Spark应用程序的时候,driver会提供一个webUI给出应用程序的运行信息,但是该webUI随着应用程序的完成而关闭端口,也就是 说,Spark应用程序运行完后,将无法查看应用程序的历史记录。Spark history server就是为了应对这种情况而产生的,通过配置,Spark应用程序在运行完应用程序之后,将应用程序的运行信息写入指定目录,而Spark history server可以将这些运行信息装载并以web的方式供用户浏览。

1)确保HDFS系统启动

在HDFS上创建/user/spark/eventlog目录用来存放日志

# 先启动hdfs和yarn

hdfs dfs -mkdir -p /user/spark/eventlog

2)进入到spark安装目录conf目录下

cd /opt/apps/spark/conf

3)将spark-default.conf.template复制为spark-default.conf

mv spark-defaults.conf.template spark-defaults.conf
vim spark-defaults.conf

# 在文件的末尾添加
# 开启日志
spark.eventLog.enabled true
# 指定日志存储路径为hdfs的路径(与core.site.xml里的一致)
spark.eventLog.dir hdfs://master:9000/user/spark/eventlog
# 是否压缩
spark.eventLog.compress true

#参数描述:

#spark.eventLog.dir:Application在运行过程中所有的信息均记录在该属性指定的路径下 #spark.eventLog.compress 这个参数设置history-server产生的日志文件是否使用压缩,true为使用,false为不使用。启用了事件日志的压缩。压缩事件日志可以减少存储空间的使用,并加快传输和处理速度。 ps:最好不要是用IE内核的浏览器不然效果是显示不出来的


7. 分发spark与环境变量

把配置好的spark分发到slave1,slave2节点下

cd /opt/apps

[root@master apps]# scp -r spark/ root@slave1:/opt/apps/
[root@master apps]# scp -r spark/ root@slave2:/opt/apps/


8. 启动spark
# 1.启动zookeeper集群

# 2.启动Hadoop集群

# 3.启动Spark
cd /opt/apps/spark
## 启动的是Spark进程
[root@master apps]# ./sbin/start-all.sh
## 启动的是Spark的历史服务器
[root@master apps]# ./sbin/start-history-server.sh
# jps:出现master和worker进程即可

# 4.启动shell
[root@master apps]# spark-shell

检查状态:jps出现master和worker进程即可

image-20230628180312795


Spark中的Master和Worker进程作用:

  1. Master进程

    • 负责整个Spark集群的管理和调度。

    • 接收来自客户端的应用程序提交请求,并将任务分配给可用的Worker节点。

    • 维护集群中各个Worker节点的状态和资源情况。

    • 提供Web界面以监控和管理整个集群的运行状态。

  2. Worker进程

    • 在集群中的每个节点上运行,负责执行实际的任务。

    • 接收Master节点分配的任务,并执行计算操作。

    • 管理节点上的资源,如内存、CPU等,并将资源状态报告给Master节点。

    • 提供Web界面以监控节点的资源使用情况和运行状态。

总的来说,Master进程负责集群的整体调度和管理,而Worker进程则负责在各个节点上执行任务和管理节点的资源。这样的分工使得Spark集群能够高效地执行分布式计算任务。


9.执行spark自带的案例

任务:在Spark集群中提交一个名为 SparkPi 的应用程序,该应用程序将计算π的近似值,并将结果返回。

cd /opt/apps/spark

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://master:7077 \
./examples/jars/spark-examples_2.12-3.1.1.jar \
10

命令解释:

  1. bin/spark-submit:这是Spark提供的用于提交应用程序的脚本。

  2. --class org.apache.spark.examples.SparkPi:指定要运行的应用程序的主类,即 org.apache.spark.examples.SparkPi。这是一个计算圆周率的示例应用程序。

  3. --master spark://master:7077:指定Spark集群的Master节点的地址和端口。在这个例子中,Master节点的地址是 master,端口是 7077

  4. ./examples/jars/spark-examples_2.12-3.1.1.jar:指定要提交的应用程序的JAR文件路径。这是Spark示例应用程序的JAR文件路径。

  5. 10:应用程序的参数,传递给主类。表示并行计算的次数。该值会影响计算圆周率的精度和性能。

运行结果:

image-20230115232529414


命令优化:

上一个任务在执行时会输出非常多的运行信息,输出结果不容易找到,可以通过 grep 命令进行过滤

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://master:7077 \
./examples/jars/spark-examples_2.12-3.1.1.jar \
10 \
2>&1 | grep "Pi is"

解释:

2是标准错误的输出,1是标准输出。 使用bash时,可以用2>&1把标准错误流和标准输出流结合在一起。

这是合并标准输出和标准错误的老派做法:2>&1

grep、cat、管道符配合使用:

cat test.txt |grep hello        # 查看文件中包括 hello 的行

  • |管道符,将一个命令的输出作为另外一个命令的输入

  • grep 查找文件里符合条件的字符串

image-20230115232705746


10.修改spark设置日志级别
  1. log4j.properties文件的作用

    • log4j.properties文件是Spark用来配置日志的文件。

    • 通过设置不同的日志级别,可以控制日志的输出等级。

    • 如果 $Spark_HOME/conf 目录下已经存在 log4j.properties 文件,则直接编辑这个文件。如果log4j.properties文件不存在,复制模板文件创建

  2. 设置日志级别

    • 在log4j.properties文件中,通过配置log4j.rootCategory属性来设置日志级别。

    • log4j.rootCategory=ERROR, console 将根日志类别设置为ERROR级别。

    • 表示只记录错误级别的日志,并且将日志输出到控制台。

cd /opt/apps/spark

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://master:7077 \
./examples/jars/spark-examples_2.12-3.1.1.jar \
10

image-20240304220900752


11.查看Spark的Web UI
  1. 访问Spark的Master资源监控Web UI界面:

    • 默认URL访问:http://master:8080

  2. Spark端口变更情况:

    • 如果在启动Spark之前,已经启动了Hadoop、ZooKeeper、HBase等服务,ZooKeeper可能会占用8080端口以提供HTTP管理界面。

    • Spark会尝试使用8081端口来启动。

    • 更换URL访问: http://master:8081

打开浏览器输入“http://master:8081”,查看Spark集群情况

image-20230115191040177


打开浏览器输入“http://slave1:8081”,查看Worker执行情况

image-20230115190826551


启动spark-shell浏览器输入“http://master:4040”查看“Spark Jobs”。

image-20230630152258580


2.3.2 Spark on YARN

Spark客户端直接连接 Yarn,不需要在本地额外构建 Spark 集群。

核心特点

  1. 简易部署

    • Spark 在 YARN 模式下的部署相对简单。

  2. 安装要求

    • Spark 需要安装在 YARN 集群的仅一个节点上,例如 master 节点。

  3. 客户端功能

    • 安装了 Spark 的节点(如 master)可作为客户端,用于提交 Spark 应用程序到 YARN 集群。

YARN 集群的角色

  1. 资源调度:

    • YARN 负责集群资源的调度。

Spark 集群的配置

  1. 无需启动 Master/Worker 节点

    • 在 Spark On YARN 模式下,不需要启动 Spark 自身的 Master 和 Worker 节点。

  2. 独立于 Standalone 集群


    • Spark On Yarn 集群的部署不依赖于 Spark Standalone 集群。

Spark On Yarn 本质

  • Master 角色由 YARN 的 ResourceManager 担任。

  • Worker 角色由 YARN 的 NodeManager 担任。

  • Driver 角色运行在 YARN 容器内或提交任务的客户端进程中。

  • 真正干活的 Executor 运行在 YARN 提供的容器内。

Spark On Yarn 需要啥?

  • 需要 Yarn 集群:已经安装了

  • 需要 Spark 客户端工具,比如 spark-submit,可以将 Spark 程序提交到 YARN 中

  • 需要被提交的代码程序:如 spark/examples/src/.../pi.py 示例程序,或后续自己开发的 Spark 任务

img


Spark On YARN 是有两种运行模式的,一种是 Cluster 模式,一种是 Client 模式

yarn 模式有yarn-client和yarn-cluster两种模式:主要区别在于:Driver程序的运行节点。

  • Driver进程:一个Spark作业运行时包括一个Driver进程,也是作业的主进程,具有main函数,并且有SparkContext的实例,是程序的入口点;

  • Cluster模式:Driver运行在YARN容器内部,和ApplicationMaster在同一个容器内。

  • img

  • Client模式:Driver运行在客户端进程中,比如Driver运行在spark-submit程序的进程中,适用于交互、调试,希望立即看到app的输出。

  • img

  • Cluster和Client模式最最本质的区别是:Driver程序运行在哪里

    其中,就直接的区别就是:

    • 运行在YARN集群中就是Cluster模式,

    • 运行在客户端就是Client模式


1. 环境准备
  • 已配置hadoop3.1.3完全分布式集群

  • spark-3.1.1-bin-hadoop3.2.tgz的安装包


2. 安装Spark
  • 如果已经安装配置了Standalone模式(参照上文),则不用再做安装,跳过此步。

  • 如果没有安装配置了Standalone模式(参照上文),则按下面的步骤【仅在Master主机上安装Spark

解压spark

# 在Master主机上操作
cd /opt/software/
[root@master software]# tar -zxvf spark-3.1.1-bin-hadoop3.2.tgz  -C ../apps/
cd /opt/apps
[root@master apps]# mv spark-3.1.1-bin-hadoop3.2/ spark
3.配置spark-env.sh
cd spark/conf/
cp spark-env.sh.template spark-env.sh

配置以下内容

# JDK安装路径
export JAVA_HOME=/opt/apps/jdk
# 指定hadoop的配置项位置(yarn模式需要的,保证后续运行任务的路径都变成集群路径)
HADOOP_CONF_DIR=/opt/apps/hadoop/etc/hadoop
# 指定了 Hadoop 配置文件的位置。这对于让 Spark 正确地与 Hadoop 集群(如 HDFS)交互是必要的,
# 特别是当在 YARN 模式下运行 Spark 作业时。

注意:原先在Standalone模式配置的spark-env.sh下面的配置项可以删除,只保留了上面两项

  • SPARK_MASTER_HOSTSPARK_MASTER_PORT 用于指定 Spark 主节点的主机名或 IP 地址以及端口号,用于内部通信。在 YARN 模式下,Spark 主节点由 YARN 的 ResourceManager 管理,因此不需要手动设置这些参数。

  • SPARK_WORKER_CORESSPARK_WORKER_MEMORY 用于设置每个 Spark 工作节点可使用的 CPU 核心数和内存大小。在 YARN 模式下,资源的分配由 YARN 负责,因此不需要手动设置这些参数。

  • SPARK_MASTER_WEBUI_PORT 用于指定 Spark 主节点的 Web UI 端口号。在 YARN 模式下,Spark 主节点的 Web UI 端口通常是由 YARN ResourceManager 管理的,因此无需手动设置该参数。

因此,在 Spark on YARN 模式下,这些配置项都是不需要的,可以省略。Spark 应用程序会自动与 YARN 集成,并根据 YARN 的资源调度来分配资源和管理任务


4. 配置spark环境变量
vim /etc/profile

# 添加以下内容
export SPARK_HOME=/opt/apps/spark
export PATH=$PATH:$SPARK_HOME/bin

保存并退出,使环境变量生效:

source /etc/profile


5. 配置spark的运行模式
  • master\slave1\slave2 三台主机都要修改yarn-site.xml文件,添加以下环境变量

  • 命令: vim /opt/apps/hadoop/etc/hadoop/yarn-site.xml

    <!-- 控制 YARN NodeManager 是否启用对任务使用的物理内存和虚拟内存的检查 -->
   <!-- 如果pmem、vmem资源不够,运行任务会报错,此处将资源检查设置为false -->
   <!-- 禁止对任务使用的物理内存的检查(否则如果任务超出分配值,则直接将其杀掉)-->
   <property>
       <name>yarn.nodemanager.pmem-check-enabled</name>
       <value>false</value>
   </property>
   <!-- 禁止对任务使用的虚拟内存的检查(否则如果任务超出分配值,则直接将其杀掉)-->
   <property>
       <name>yarn.nodemanager.vmem-check-enabled</name>
       <value>false</value>
   </property>
  • 保存退出,重启Hadoop集群


6.执行spark自带的案例

启动Hadoop集群

start-dfs.sh
start-yarn.sh

修改spark设置日志级别

# 编辑`$Spark_HOME/conf`下的`log4j.properties`为错误日志,如果没有,复制临时文件生成
log4j.rootCategory=ERROR, console
......


client模式
  1. Driver运行在Client上的Spark-Submit进程中

  2. 应用程序运行结果会在客户端显示

    bin/spark-submit \
    --class org.apache.spark.examples.SparkPi \
    --master yarn \
    --deploy-mode client \
    ./examples/jars/spark-examples_2.12-3.1.1.jar \
    10

    # 解释
    --class 指定了应用程序的主类。
    --master 指定了集群管理器
    --deploy-mode 指定了部署模式。client 模式意味着 Spark 驱动程序将在提交应用程序的机器上运行,通常是用户的本地机器。

    举例:打包自己的jar上传并运行
    bin/spark-submit \
    --class org.example.EtlJob \
    --master yarn \
    --deploy-mode client \
    ./examples/jars/sparkexamples-1.0-SNAPSHOT.jar \
    10

image-20230115220933329


cluster模式
  1. Driver 程序会在 YARN 集群中启动,并由 YARN 管理,客户端机器只是用于提交应用程序,并不直接参与应用程序的执行。

  2. Driver 程序在集群中运行,应用程序的运行结果也将在集群中生成。在客户端机器上,你只能看到应用程序的提交信息和 YARN 的应用程序 ID,但无法直接查看应用程序的运行结果。

    bin/spark-submit \
    --class org.apache.spark.examples.SparkPi \
    --master yarn \
    --deploy-mode cluster \
    ./examples/jars/spark-examples_2.12-3.1.1.jar \
    10


查看运行结果

image-20230115225707114


http: //slave1:8088/proxy/application_1673791169680_0003/

  • http://slave1:8088: 这部分是 ResourceManager 的 Web UI 的基础地址

  • 提供了一个通过 Web 浏览器访问 ResourceManager 的 Web UI 来跟踪和监视特定应用程序的方式。通过访问该链接,用户可以查看应用程序的状态、任务信息、日志等详细信息,以便更好地了解应用程序的运行情况。


image-20230115225415792


image-20230115225454617

image-20230115225541323

image-20230115225604391


3.使用 Zeppelin 进行交互式分析

Apache Zeppelin 是一款基于 Web 的 NoteBook,支持交互式数据分析。使用 Zeppelin,可以使用丰 富的预构建语言后端(或解释器)制作精美的数据驱动、交互式和协作文档。目前,Apache Zeppelin 支 持 Apache Spark、Python、JDBC、Markdown 和 Shell 等多种解释器。

特别是,Apache Zeppelin 提供了内置的 Apache Spark 集成。我们不需要为它构建单独的模块、插件 或库。Apache Zeppelin 与 Spark 集成,提供了如下功能:

  • 自动注入 SparkContext 和 SQLContext  ;

  • 从本地文件系统或 maven 存储库加载运行时 jar 依赖项;

  • 取消作业并显示进度。

Apache Zeppelin 专注于企业级应用,Zeppelin Notebook 可以满足以下企业用户以下需求:

  • 数据摄取

  • 数据发现

  • 数据分析

  • 数据可视化与协作

接下来,我们学习如何安装 Zeppelin 和配置 Zeppelin 解释器,并演示如何使用 Zepplin Notebook 作 为 Spark 的交互式数据分析工具进行大数据的分析和数据可视化。



发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-BlogPHP 1.7.3

版权:李翔
备案/许可证编号为:新ICP备2024006115号-1