spark封神之路(2)-spark运行模式
本专栏系列视频教程
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真正的执行。
集群部署之前
- 集群的免密
- 域名映射
- 学习阶段 防火墙关闭
- java环境
- 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-shell2021-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"donesleep 2if [ $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运行模式相关推荐
- spark封神之路(1)-spark简介
1 Spark简介 Spark是一种快速.通用.可扩展的大数据分析引擎,2009年诞生于加州大学伯克利分校AMPLab,2010年开源,2013年6月成为Apache孵化项目,2014年2月成为Apa ...
- spark封神之路(7)-RDD算子详解第一部分
1 算子简介 算子是一个函数空间到函数空间上的[映射]O:X→X.广义上的算子可以推广到任何空间,如[内积空间]等. RDD上的方法称为算子 在 RDD 上支持 2 种操作: transformati ...
- GitHub 的“封神”之路!
2008年,在无数人为代码协作方式而感到异常头疼的时候,GitHub 横空出世,完美契合了市场的迫切需求.自此,它以惊人的速度成长起来并蔓延到全世界,彻底融入开发编程的日常之中.仅仅十年,现在的 Gi ...
- 微服务架构师封神之路09-Springboot多数据源,Hikari连接池和事务配置
微服务架构师封神之路09-Springboot多数据源,Hikari连接池,和事务的配置 application.yml 初始化DataSource DataSourceConfig的两种写法 写法一 ...
- python猜数字1001untitled_pytest封神之路第零步 快速入门
背景:本文是在系列第五篇发表后的补充篇章,第一篇介绍了tep,可能对不熟悉pytest的朋友不够友好,特意补充入门篇,帮大家快速了解如何动手写pytest.如果你是从这篇文章第一次阅读,那么请忽略以上 ...
- 微服务架构师封神之路02-为你的微服务应用添加日志
微服务架构师封神之路02-为你的微服务应用添加日志 关于Kubernetes日志架构 我们的目标 helloworld project 项目结构 pom.xml Dockerfile AppMain. ...
- “自由主义教皇” 、Linux 之父的封神之路
作者 | 年素清 责编 | 王晓曼 出品 | 程序人生(ID:coder_life) "有些人生来就具有统率百万人的领袖风范:另一些人则是为写出颠覆世界的软件而生.唯一一个能同时做到这两者的 ...
- 和封神一起“深挖”Spark
2016云栖大会·北京峰会于8月9号在国家会议中心拉开帷幕,在云栖社区开发者技术专场中,来自阿里云技术专家曹龙(封神)为在场的听众带来<Deep dive into Spark>精彩分享. ...
- 阿里P7/P8学习路线图——技术封神之路
一.基础篇 JVM JVM内存结构 堆.栈.方法区.直接内存.堆和栈区别 Java内存模型 内存可见性.重排序.顺序一致性.volatile.锁.final 垃圾回收 内存分配策略.垃圾收集器(G1) ...
最新文章
- java 中的内部类学习小记
- web.xml配置说明
- 【设计】H5移动端页面设计心得分享(附案例解析)
- 前端经典案例——购物车,Jquery实现
- 个人计算机与手机的区别,手机与电脑的CPU是一回事吗?一共有六大区别,看看你知道多少!...
- Bootstrap Table的使用小结
- system进程总是100%
- Lua基础(字符处理)
- 文本导入ORACLE快速,Oracle批量导入文本文件快速的方法(sqlldr实现)
- 从支付宝SDK的支付流程理解什么是公钥和私钥,什么是加密和数字签名
- mysql的engine不同,导致事物回滚失败的问题
- asp.net 获取当前页面html代码,在asp.net中获取当前页面的URL的方法(推荐)
- nanomsg笔记--通信协议与传输协议
- android apk结构,APK文件结构详解
- 简易的微信公众号管理平台使用指南
- 小哥哥小姐姐,来尝尝 Async 函数这块语法糖
- 六级英语 之 经济贸易
- java火焰纹章攻略女神之剑_火焰纹章晓之女神图文攻略(4)
- css 横向、纵向滚动条
- 毕业设计:基于java的小区物业信息管理系统的设计与实现(1)