本专栏系列视频教程

2 spark运行模式入门

1.官网地址 http://spark.apache.org/

2.文档查看地址 https://spark.apache.org/docs/2.1.1/

3.下载地址 https://archive.apache.org/dist/spark/

2.1  idea编程开发

创建maven项目 , 添加依赖

<properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><spark.version>3.0.1</spark.version><encoding>UTF-8</encoding></properties>​<dependencies><!-- 导入spark的依赖,core指的是RDD编程API --><dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_2.12</artifactId><version>${spark.version}</version></dependency></dependencies><build><pluginManagement><plugins><!-- 编译scala的插件 --><plugin><groupId>net.alchim31.maven</groupId><artifactId>scala-maven-plugin</artifactId><version>3.2.2</version></plugin><!-- 编译java的插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.5.1</version></plugin></plugins></pluginManagement><plugins><plugin><groupId>net.alchim31.maven</groupId><artifactId>scala-maven-plugin</artifactId><executions><execution><id>scala-compile-first</id><phase>process-resources</phase><goals><goal>add-source</goal><goal>compile</goal></goals></execution><execution><id>scala-test-compile</id><phase>process-test-resources</phase><goals><goal>testCompile</goal></goals></execution></executions></plugin>​<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><executions><execution><phase>compile</phase><goals><goal>compile</goal></goals></execution></executions></plugin>​<!-- 打jar插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>2.4.3</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><filters><filter><artifact>*:*</artifact><excludes><exclude>META-INF/*.SF</exclude><exclude>META-INF/*.DSA</exclude><exclude>META-INF/*.RSA</exclude></excludes></filter></filters></configuration></execution></executions></plugin></plugins></build>

编写spark代码

 def main(args: Array[String]): Unit = {// 1 构建spark的运行环境 SparkContextval conf = new SparkConf()conf.setAppName("wc")  // 程序名.setMaster("local")   // 运行模式 本地val sc = new SparkContext(conf)// 编程wordcount 和编写scala程序一样// 1 读取数据 2获取行 3 单词 4 单词1 5 聚合 排序//在spark中 RDD是编程的基本/*** 关注点 编程逻辑* 思考 : 数据的处理应该是多任务并行执行的*/val res: RDD[(String, Int)] = sc.textFile("d://word.txt").flatMap(_.split("\\s+")).map((_, 1)).groupBy(_._1).map(tp => (tp._1, tp._2.size)).sortBy(-_._2)res.saveAsTextFile("data/wc/")//释放环境sc.stop()}object Demo2 {def main(args: Array[String]): Unit = {val conf = new SparkConf()conf.setAppName("wc").setMaster("local")val sc = new SparkContext(conf)val rdd1: RDD[String] = sc.textFile("d://word.txt")val words: RDD[String] = rdd1.flatMap(_.split("\\s+"))// spark相对于scala的基础语法提供了更加丰富的编程实现words.map((_, 1)).reduceByKey(_ + _).foreach(println)sc.stop()}}

2.2 local模式

Local 模式就是指的只在一台计算机上来运行 Spark.

通常用于测试的目的来使用 Loc al 模式, 实际的生产环境中不会使用 Local 模式.

2.2.1 上传到linux机器 解压

tar -xxvf

2.2.2 交互客户端spark-shell

bin/spark-shell

Setting default log level to "WARN".

To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).

Spark context Web UI available at http://doit01:4040

Spark context available as 'sc' (master = local[*], app id = local-1620370084250).

Spark session available as 'spark'.

Welcome to

____             __

/ __/__ ___ _____/ /__

_\ \/ _ \/ _ `/ __/ '_/

/___/ .__/\_,_/_/ /_/\_\   version 3.0.0

/_/

scala> val name="doit"

name: String = doit

2.2.3 编程

在这个客户端中,自动创建了spark的运行环境, 所以我们可以直接使用客户端提供的sc对象进行spark编程

这里加载的数据默认是本地路径下的文件

sc.textFile("/word.txt").flatMap(_.split("\\s+")).map((_,1)).groupBy(_._1).map(tp=>(tp._1,tp._2.size)).sortBy(- _._2).saveAsTextFile("/spark/wc/")

提示 :  在交互式窗口中可以使用tab键补全代码提示

2.2.4 提交自己的代码

  • 编写程序
/*** Author:   Hang.Z* Date:     21/06/01* Description:* 使用spark编写wordcount*   读取本地的数据*   将结果保存在本地*   SparkContext 核心环境对象 ,进行编程*com._51doit.spark.day01.Demo1*/object Demo1 {def main(args: Array[String]): Unit = {// 1 构建spark的运行环境 SparkContextval conf = new SparkConf()conf.setAppName("wc")  // 程序名// 运行模式 本地val sc = new SparkContext(conf)// 编程wordcount 和编写scala程序一样// 1 读取数据 2获取行 3 单词 4 单词1 5 聚合 排序//在spark中 RDD是编程的基本/*** 关注点 编程逻辑* 思考 : 数据的处理应该是多任务并行执行的*/val res: RDD[(String, Int)] = sc.textFile("/word.txt").flatMap(_.split("\\s+")).map((_, 1)).groupBy(_._1).map(tp => (tp._1, tp._2.size)).sortBy(-_._2)res.saveAsTextFile("/spark/wc2/")//释放环境sc.stop()}​}

打包 上传到linux机器

bin/spark-submit  --master local[*]  --class com._51doit.spark.day01.Demo1 /wc.jar

• 使用spark-submit来发布应用程序.

./bin/spark-submit \--class <main-class> \--master <master-url> \--deploy-mode <deploy-mode> \--conf <key>=<value> \... # other options<application-jar> \

[application-arguments]

  • – --master 指定 master 的地址,默认为local. 表示在本机运行.
  • – --class 你的应用的启动类 (如 org.apache.spark.examples.SparkPi)

• --deploy-mode 是否发布你的驱动到 worker节点(cluster 模式) 或者作为一个本地客户端 (client 模式) (default: client)

• --conf: 任意的 Spark 配置属性, 格式key=value. 如果值包含空格,可以加引号"key=value"

• application-jar: 打包好的应用 jar,包含依赖. 这个 URL 在集群中全局可见。 比如hdfs:// 共享存储系统, 如果是 file:// path, 那么所有的节点的path都包含同样的jar

• application-arguments: 传给main()方法的参数

• --executor-memory 1G 指定每个executor可用内存为1G

• --total-executor-cores 6 指定所有executor使用的cpu核数为6个

• --executor-cores 表示每个executor使用的 cpu 的核数

• 关于 Master URL 的说明

Master URL

Meaning

local

Run Spark locally with one worker thread (i.e. no parallelism at all).

local[K]

Run Spark locally with K worker threads (ideally, set this to the number of cores on your machine).

local[*]

Run Spark locally with as many worker threads as logical cores on your machine.

spark://HOST:PORT

Connect to the given Spark standalone cluster master. The port must be whichever one your master is configured to use, which is 7077 by default.

mesos://HOST:PORT

Connect to the given Mesos cluster. The port must be whichever one your is configured to use, which is 5050 by default. Or, for a Mesos cluster using ZooKeeper, use mesos://zk://.... To submit with --deploy-mode cluster, the HOST:PORT should be configured to connect to the MesosClusterDispatcher.

yarn

Connect to a YARNcluster in client or cluster mode depending on the value of --deploy-mode. The cluster location will be found based on the HADOOP_CONF_DIR or YARN_CONF_DIR variable.

打包

上传到linux

执行命令

/opt/apps/spark-3.0.0-bin-hadoop3.2/bin/spark-submit  --class com._51doit.bigdata.spark.day01.Demo3 --master local[*] /spark-core-1.0.0.jar

21/05/07 03:13:07 INFO Executor: Running task 0.0 in stage 1.0 (TID 1)

21/05/07 03:13:07 INFO ShuffleBlockFetcherIterator: Getting 1 (80.0 B) non-empty blocks including 1 (80.0 B) local and 0 (0.0 B) host-local and 0 (0.0 B) remote blocks

21/05/07 03:13:07 INFO ShuffleBlockFetcherIterator: Started 0 remote fetches in 10 ms

(spark,1)

(tom,1)

(hello,3)

(jerry,1)

21/05/07 03:13:07 INFO Executor: Finished task 0.0 in stage 1.0 (TID 1). 1267 bytes result sent to driver

21/05/07 03:13:07 INFO TaskSetManager: Finished task 0.0 in stage 1.0 (TID 1) in 72 ms on linux01 (executor driver) (1/1)

2.2.5 执行spark样例程序

/opt/apps/spark-3.0.0-bin-hadoop3.2/bin/spark-submit  --class org.apache.spark.examples.SparkPi --master local[*] ./spark-examples_2.12-3.0.0.jar  1000

21/05/07 03:19:11 INFO TaskSchedulerImpl: Killing all running tasks in stage 0: Stage finished

21/05/07 03:19:11 INFO DAGScheduler: Job 0 finished: reduce at SparkPi.scala:38, took 9.969789 s

Pi is roughly 3.1416970714169707

21/05/07 03:19:11 INFO SparkUI: Stopped Spark web UI at http://linux01:4040

21/05/07 03:19:11 INFO MapOutputTrackerMasterEndpoint: MapOutputTrackerMasterEndpoint stopped!

2.3 standalone模式(集群)自带

spark自带的集群运行模式,采用主从架构工作! 请联想HDFS工作原理,请联想YARN工作原理!.对于大多数情况 Standalone 模式就足够了,如果企业已经有 Yarn 或者 Mesos 环境,也是很方便部署的。

典型的Mater/slave模式,不过也能看出Master是有单点故障的;Spark支持ZooKeeper来实现 HA

  • Master节点在Spark中所承载的作用是分配Application到Worker节点,维护Worker节点,Driver,Application的状态。在Spark中,Master本身也提供了基于硬盘的单节点的可用性,也就是可以直接通过重启Master,Master通过读取硬盘里保存的状态,进行单节点的恢复。
  • Worker 计算资源的实际贡献者,他要向Master汇报自身拥有多少cpu core和memory, 在master的指示下负责启动executor,executor 是执行真正计算的苦力,由master来决定该进程拥有的core和memory数值,Master 掌管整个cluster的资源,主要是指cpu core和memory,但Master自身并不拥有这些资源,而Driver 是资源的实际占用者,Driver会提交一到多个job,每个job在拆分成多个task之后,会分发到各个executor真正的执行。

集群部署之前

  1. 集群的免密
  2. 域名映射
  3. 学习阶段 防火墙关闭
  4. java环境
  5. scala环境

spark

doit01机器

doit02机器

doit03机器

角色

master

角色

worker

worker

worker

Ø 集群中的JAVA环境和SCALA环境

Ø 集群中的域名映射 , 每台机器配置集群中每个机器的域名映射

Ø 集群中的免密配置 , 各个机器免密访问

Ø 集群中的防火墙 , 学习阶段关闭机器中的防火墙

上述环境在前面的学习阶段统统已经搞定!不在过多赘述!

2.3.1 上传,解压

2.3.2 配置

配置 spark-env.sh文件 ,添加如下信息

export  HADOOP_CONF_DIR=/opt/apps/hadoop-3.1.1/etc/hadoop

export  SPARK_MASTER_HOST=doit01

export  JAVA_HOME=/opt/apps/jdk1.8.0_141

配置slaves文件 添加如下信息  : 配置work角色的节点

# A Spark Worker will be started on each of the machines listed below.

linux01

linux02

linux03

2.3.3 分发

将配置好的安装包 ,发送到集群节点上

for i in 2 3 do scp -r spark-3.0.0 doit0$i:$PWD; done

在sbin目录中是集群的启动有关的命令 , 有几个命令

start-master.sh

stop-master.sh

start-slave.sh  start-slaves.sh

stop-slave.sh  stop-slaves.sh

start-all.sh   一键启动集群

stop-all.sh

为了避免命令和hadoop的命令冲突

[root@doit01 sbin]# mv start-all.sh  start-spark.sh [root@doit01 sbin]# mv stop-all.sh   stop-spark.sh

2.3.4 启动

启动脚本在SPARK_HOME的sbin目录下 ,我们在学习hadoop的时候 ,有一个脚本是start-all.sh是启动HDFS和YARN两个集群的命令 ,后续的我们会配置spark的系统环境变量 ,所以就会产生冲突 ,我们修改这里的start-all.sh为start-spark.sh

mv start-all.sh   start-spark.sh

sbin/start-spark.sh

访问spark提供的WEBUI http://linux01:8080

8088

9870

10002

10000

8020

2181

9000

2.3.5 环境变量配置

vi /ect/profile

export  SPARK_HOME=/opt/apps/spark-3.0.0-bin-hadoop3.2

export    PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HBASE_HOME/bin:$HIVE_HOME/bin:$KAFKA_HOME/bin:$SPARK_HOME/bin::$SPARK_HOME/sbin

source   /ect/profile

2.3.6 spark-shell

第一次启动[root@linux01 bin]# spark-shell​2021-05-07 04:20:50,923 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicableSetting default log level to "WARN".To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).Spark context Web UI available at http://linux01:4040Spark context available as 'sc' (master = local[*], app id = local-1620375657189).Spark session available as 'spark'.Welcome to____             __/ __/__ ___ _____/ /___\ \/ _ \/ _ `/ __/ '_//___/ .__/\_,_/_/ /_/\_\   version 3.0.0/_/Using Scala version 2.12.10 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_141)Type in expressions to have them evaluated.Type :help for more information.​scala>第二次启动       默认使用集群中所有work的所有的核[root@linux01 bin]# spark-shell --master spark://linux01:70772021-05-07 04:30:36,803 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicableSetting default log level to "WARN".To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).Spark context Web UI available at http://linux01:4040Spark context available as 'sc' (master = spark://linux01:7077, app id = app-20210507043043-0000).Spark session available as 'spark'.Welcome to____             __/ __/__ ___ _____/ /___\ \/ _ \/ _ `/ __/ '_//___/ .__/\_,_/_/ /_/\_\   version 3.0.0/_/Using Scala version 2.12.10 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_141)Type in expressions to have them evaluated.Type :help for more information.​scala>低三次启动   指定程序所有的可用的核数spark-shell --master spark://linux01:7077  --total-executor-cores 62021-05-07 04:31:47,494 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicableSetting default log level to "WARN".To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).Spark context Web UI available at http://linux01:4040Spark context available as 'sc' (master = spark://linux01:7077, app id = app-20210507043153-0001).Spark session available as 'spark'.Welcome to____             __/ __/__ ___ _____/ /___\ \/ _ \/ _ `/ __/ '_//___/ .__/\_,_/_/ /_/\_\   version 3.0.0/_/Using Scala version 2.12.10 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_141)Type in expressions to have them evaluated.Type :help for more information.​scala>第四次启动   默认情况下一个executor的内存是1G 可以指定executor的内存大小spark-shell --master spark://linux01:7077  --total-executor-cores 6 --executor-memory 512M2021-05-07 04:33:02,470 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicableSetting default log level to "WARN".To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).Spark context Web UI available at http://linux01:4040Spark context available as 'sc' (master = spark://linux01:7077, app id = app-20210507043309-0002).Spark session available as 'spark'.Welcome to____             __/ __/__ ___ _____/ /___\ \/ _ \/ _ `/ __/ '_//___/ .__/\_,_/_/ /_/\_\   version 3.0.0/_/Using Scala version 2.12.10 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_141)Type in expressions to have them evaluated.Type :help for more information.scala>

*注意:  有在spark的配置文件中配置了hadoop的目录, 所以spark在加载的时候 会读取HDFS的配置文件, 这个时候spark处理的文件系统默认是HDFS分布式文件系统*

2.3.7 spark-submit

参数选项

spark-submit

Usage: spark-submit [options] <app jar | python file | R file> [app arguments]

Usage: spark-submit --kill [submission ID] --master [spark://...]

Usage: spark-submit --status [submission ID] --master [spark://...]

Usage: spark-submit run-example [options] example-class [example args]

Options:

--master MASTER_URL     spark://host:port, mesos://host:port, yarn,

•               k8s://https://host:port, or local (Default: local[*]).

--deploy-mode DEPLOY_MODE Whether to launch the driver program locally ("client") or

•               on one of the worker machines inside the cluster ("cluster")

•               (Default: client).

--class CLASS_NAME     Your application's main class (for Java / Scala apps).

--name NAME         A name of your application.

--jars JARS         Comma-separated list of jars to include on the driver

•               and executor classpaths.

--packages         Comma-separated list of maven coordinates of jars to include

•               on the driver and executor classpaths. Will search the local

•               maven repo, then maven central and any additional remote

•               repositories given by --repositories. The format for the

•               coordinates should be groupId:artifactId:version.

--exclude-packages     Comma-separated list of groupId:artifactId, to exclude while

•               resolving the dependencies provided in --packages to avoid

•               dependency conflicts.

--repositories       Comma-separated list of additional remote repositories to

•               search for the maven coordinates given with --packages.

--py-files PY_FILES     Comma-separated list of .zip, .egg, or .py files to place

•               on the PYTHONPATH for Python apps.

--files FILES       Comma-separated list of files to be placed in the working

•               directory of each executor. File paths of these files

•               in executors can be accessed via SparkFiles.get(fileName).

--conf PROP=VALUE     Arbitrary Spark configuration property.

--properties-file FILE   Path to a file from which to load extra properties. If not

•               specified, this will look for conf/spark-defaults.conf.

--driver-memory MEM     Memory for driver (e.g. 1000M, 2G) (Default: 1024M).

--driver-java-options   Extra Java options to pass to the driver.

--driver-library-path   Extra library path entries to pass to the driver.

--driver-class-path     Extra class path entries to pass to the driver. Note that

•               jars added with --jars are automatically included in the

•               classpath.

--executor-memory MEM   Memory per executor (e.g. 1000M, 2G) (Default: 1G).

--proxy-user NAME     User to impersonate when submitting the application.

•               This argument does not work with --principal / --keytab.

--help, -h         Show this help message and exit.

--verbose, -v       Print additional debug output.

--version,         Print the version of current Spark.

Cluster deploy mode only:

--driver-cores NUM     Number of cores used by the driver, only in cluster mode

•               (Default: 1).

Spark standalone or Mesos with cluster deploy mode only:

--supervise         If given, restarts the driver on failure.

--kill SUBMISSION_ID     If given, kills the driver specified.

--status SUBMISSION_ID   If given, requests the status of the driver specified.

Spark standalone and Mesos only:

--total-executor-cores NUM Total cores for all executors.

Spark standalone and YARN only:

--executor-cores NUM     Number of cores per executor. (Default: 1 in YARN mode,

•               or all available cores on the worker in standalone mode)

YARN-only:

--queue QUEUE_NAME     The YARN queue to submit to (Default: "default").

--num-executors NUM     Number of executors to launch (Default: 2).

•               If dynamic allocation is enabled, the initial number of

•               executors will be at least NUM.

--archives ARCHIVES     Comma separated list of archives to be extracted into the

•               working directory of each executor.

--principal PRINCIPAL   Principal to be used to login to KDC, while running on

•               secure HDFS.

--keytab KEYTAB       The full path to the file that contains the keytab for the

•               principal specified above. This keytab will be copied to

•               the node running the Application Master via the Secure

•               Distributed Cache, for renewing the login tickets and the

•               delegation tokens periodically.

必备的选项:

--master 需要指定任务运行的模式

--class  指定任务运行的main方法所在的类

spark-submit --master spark://linux01:7077 --total-executor-cores 6 --executor-memory 512M   --class com._51doit.bigdata.spark.day01.Demo3 /spark-core-1.0.0.jar

spark-submit --master spark://linux01:7077 --total-executor-cores 6 --executor-memory 512M  --class org.apache.spark.examples.SparkPi ./spark-examples_2.12-3.0.0.jar  1000

2.4 历史服务器

在 Spark-shell 没有退出之前, 我们是可以看到正在执行的任务的日志情况:http://linux01:4040. 但是退出 Spark-shell 之后, 执行的所有任务记录全部丢失.所以我们需要配置历史服务器, 来查看以前的shell日志

2.4.1 修改配置文件

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

vi spark-defaults.conf

spark.eventLog.enabled           true

spark.eventLog.dir               hdfs://linux01:8020/spark_logs

vi spark-env.sh

export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=30 -Dspark.history.fs.logDirectory=hdfs://linux01:8020/spark_logs"

2.4.2 分发配置文件

scp

2.4.3 创建日志目录

hdfs dfs -mkdir /spark_logs

hdfs dfs -ls /

2.4.4 启动历史服务

sbin/start-history-server.sh

jps

10516 Master

11508 Jps

9318 NameNode

9465 DataNode

11402 HistoryServer

10603 Worker

2.4.5 访问WEB页面

http://linux01:18080

2.5 Master-HA

上面提到spark的standalone集群采用的主从架构 , 主从结构存在单节点故障问题 ,master主节点宕机以后整个集群无法正常对外工作!

我们可以借助zookeeper配置HA模式

2.5.1 修改配置

在spark-env.sh配置文件中修改如下配置

# export       SPARK_MASTER_HOST=linux01   注释

export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=linux01:2181,linux01:2181,linux03:2181 -Dspark.deploy.zookeeper.dir=/spark"

将配置文件同步到集群的每个节点

2.5.2 启动zookeeper

#!/bin/bashfor i in 1 2 3dossh doit0${i} "source /etc/profile;/opt/apps/zookeeper-3.4.6/bin/zkServer.sh $1"done​sleep 2​if [ $1 == start ]thenfor i in {1..3}dossh doit0${i} "source /etc/profile;/opt/apps/zookeeper-3.4.6/bin/zkServer.sh status "donefish zk.sh start

2.5.3 启动集群

启动集群以后 ,在linux02机器上在启动一个master角色

start-spark.sh

在linux02上执行 sbin/start-master.sh

2.5.4 查看web页面

活跃的主节点

备用主节点

2.5.5 测试

提交程序

spark-submit  --master spark://linux01:7077,linux02:7077 --class com._51doit.bigdata.spark.day01.Demo3 /spark-core-1.0.0.jar

停止linux01节点上的master进程

sbin/stop-master.sh

备用节点master成功切换到active状态

提交程序依然正常执行

spark-submit  --master spark://linux01:7077,linux02:7077 --class com._51doit.bigdata.spark.day01.Demo3 /spark-core-1.0.0.jar

2.6 yarn模式

独立部署(Standalone)模式由Spark自身提供计算资源,无需其他框架提供资源。这种方式降低了和其他第三方资源框架的耦合性,独立性非常强。但是你也要记住,Spark主要是计算框架,而不是资源调度框架,所以本身提供的资源调度并不是它的强项,所以还是和其他专业的资源调度框架集成会更靠谱一些。所以接下来我们来学习在强大的Yarn环境下 Spark是如何工作的(其实是因为在国内工作中,Yarn使用的非常多)。

Spark 客户端可以直接连接 Yarn,不需要额外构建Spark集群。

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

• client:Driver程序运行在客户端,适用于交互、调试,希望立即看到app的输出

• cluster:Driver程序运行在由 RM(ResourceManager)启动的 AM(AplicationMaster)上, 适用于生产环境。

2.6.1 准备一台spark环境机器

2.6.2  修改yarn配置

vi spark-env,shYARN_CONF_DIR=/opt/apps/hadoop-3.1.1/etc/hadoop/JAVA_HOME=/opt/apps/jdk1.8.0_141/HADOOP_CONF_DIR=/opt/apps/hadoop-3.1.1/etc/hadoop/

2.6.3 提交应用程序

启动yarn集群  start-yarn.sh

编写自己的spark程序 ;注意在获取SparkContext对象的时候不要设置master

object Demo4 {def main(args: Array[String]): Unit = {val conf = new SparkConf()conf.setAppName("wc")val sc = new SparkContext(conf)val rdd1: RDD[String] = sc.textFile("/word.txt")val words: RDD[String] = rdd1.flatMap(_.split("\\s+"))// spark相对于scala的基础语法提供了更加丰富的编程实现words.map((_, 1)).reduceByKey(_ + _).collect().foreach(println)sc.stop()}}

打包, 上传到linux节点

/opt/apps/spark3-yarn/bin/spark-submit --master yarn  --deploy-mode cluster --class com._51doit.bigdata.spark.day01.Demo4   /original-spark-core-1.0.0.jar

/opt/apps/spark3-yarn/bin/spark-submit --master yarn  --deploy-mode client --class com._51doit.bigdata.spark.day01.Demo4   /original-spark-core-1.0.0.jar

2.7 windows系统环境测试

2.7.1 解压

2.7.2 测试

spark封神之路(2)-spark运行模式相关推荐

  1. spark封神之路(1)-spark简介

    1 Spark简介 Spark是一种快速.通用.可扩展的大数据分析引擎,2009年诞生于加州大学伯克利分校AMPLab,2010年开源,2013年6月成为Apache孵化项目,2014年2月成为Apa ...

  2. spark封神之路(7)-RDD算子详解第一部分

    1 算子简介 算子是一个函数空间到函数空间上的[映射]O:X→X.广义上的算子可以推广到任何空间,如[内积空间]等. RDD上的方法称为算子 在 RDD 上支持 2 种操作: transformati ...

  3. GitHub 的“封神”之路!

    2008年,在无数人为代码协作方式而感到异常头疼的时候,GitHub 横空出世,完美契合了市场的迫切需求.自此,它以惊人的速度成长起来并蔓延到全世界,彻底融入开发编程的日常之中.仅仅十年,现在的 Gi ...

  4. 微服务架构师封神之路09-Springboot多数据源,Hikari连接池和事务配置

    微服务架构师封神之路09-Springboot多数据源,Hikari连接池,和事务的配置 application.yml 初始化DataSource DataSourceConfig的两种写法 写法一 ...

  5. python猜数字1001untitled_pytest封神之路第零步 快速入门

    背景:本文是在系列第五篇发表后的补充篇章,第一篇介绍了tep,可能对不熟悉pytest的朋友不够友好,特意补充入门篇,帮大家快速了解如何动手写pytest.如果你是从这篇文章第一次阅读,那么请忽略以上 ...

  6. 微服务架构师封神之路02-为你的微服务应用添加日志

    微服务架构师封神之路02-为你的微服务应用添加日志 关于Kubernetes日志架构 我们的目标 helloworld project 项目结构 pom.xml Dockerfile AppMain. ...

  7. “自由主义教皇” 、​Linux 之父的封神之路

    作者 | 年素清 责编 | 王晓曼 出品 | 程序人生(ID:coder_life) "有些人生来就具有统率百万人的领袖风范:另一些人则是为写出颠覆世界的软件而生.唯一一个能同时做到这两者的 ...

  8. 和封神一起“深挖”Spark

    2016云栖大会·北京峰会于8月9号在国家会议中心拉开帷幕,在云栖社区开发者技术专场中,来自阿里云技术专家曹龙(封神)为在场的听众带来<Deep dive into Spark>精彩分享. ...

  9. 阿里P7/P8学习路线图——技术封神之路

    一.基础篇 JVM JVM内存结构 堆.栈.方法区.直接内存.堆和栈区别 Java内存模型 内存可见性.重排序.顺序一致性.volatile.锁.final 垃圾回收 内存分配策略.垃圾收集器(G1) ...

最新文章

  1. java 中的内部类学习小记
  2. web.xml配置说明
  3. 【设计】H5移动端页面设计心得分享(附案例解析)
  4. 前端经典案例——购物车,Jquery实现
  5. 个人计算机与手机的区别,手机与电脑的CPU是一回事吗?一共有六大区别,看看你知道多少!...
  6. Bootstrap Table的使用小结
  7. system进程总是100%
  8. Lua基础(字符处理)
  9. 文本导入ORACLE快速,Oracle批量导入文本文件快速的方法(sqlldr实现)
  10. 从支付宝SDK的支付流程理解什么是公钥和私钥,什么是加密和数字签名
  11. mysql的engine不同,导致事物回滚失败的问题
  12. asp.net 获取当前页面html代码,在asp.net中获取当前页面的URL的方法(推荐)
  13. nanomsg笔记--通信协议与传输协议
  14. android apk结构,APK文件结构详解
  15. 简易的微信公众号管理平台使用指南
  16. 小哥哥小姐姐,来尝尝 Async 函数这块语法糖
  17. 六级英语 之 经济贸易
  18. java火焰纹章攻略女神之剑_火焰纹章晓之女神图文攻略(4)
  19. css 横向、纵向滚动条
  20. 毕业设计:基于java的小区物业信息管理系统的设计与实现(1)

热门文章

  1. 微信视频通话概括-测试用例
  2. 江苏计算机专业的学校排名2015,2015关于江苏省高校排名「最新」
  3. android模拟器 费电,2020哪个安卓模拟器好用流畅?最新常用六家模拟器跑分对比...
  4. 用JavaScript去除字符串两端空格(三种方法)
  5. 豆丁网缓存docin离线浏览(提供源码)修改,已更新
  6. 基于腾讯云的艺术展小程序
  7. IP地址的组成和分类
  8. vue:前端导出word 加图片:前端
  9. XP退役,IE6再见
  10. 后端获取URL和参数