《Spark核心技术与高级应用》——3.3节独立应用程序编程

简介:

本节书摘来自华章社区《Spark核心技术与高级应用》一书中的第3章,第3.3节独立应用程序编程,作者于俊 向海 代其锋 马海平,更多章节内容可以访问云栖社区“华章社区”公众号查看

3.3 独立应用程序编程
不同于使用Spark Shell自动初始化SparkContext的例子,独立应用程序需要初始化一个SparkContext作为程序的一部分,然后将一个包含应用程序信息的SparkConf对象传递给SparkContext构造函数。
接下来编写简单应用程序SimpleApp,并描述一些简单的编码流程。
3.3.1 创建SparkContext对象
编写一个Spark程序,首先创建SparkConf对象,该对象包含应用的信息。SparkConf对象构建完毕,需要创建SparkContext对象,该对象可以访问Spark集群。

// 创建SparkConf对象
val conf = new SparkConf().setAppName("Simple Application")
// 创建SparkContext对象
val sc = new SparkContext(conf)

3.3.2 编写简单应用程序
一个常见的Hadoop数据流模式是MapReduce,Spark可以轻易地实现MapReduce数据流,我们通过Spark API创建一个简单的Spark应用程序SimpleApp.scala。

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf

object SimpleApp {
def main(args: Array[String]) {
val logFile = "$YOUR_SPARK_HOME/README.md" // 测试文件
val conf = new SparkConf().setAppName("Simple Application")
val sc = new SparkContext(conf)
val logData = sc.textFile(logFile, 2).cache()
val numAs = logData.f?ilter(line =>line.contains("a")).count()
val numBs = logData.f?ilter(line =>line.contains("b")).count()
println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
  }
}

这个程序统计了Spark的README.md中含有“a”的行数和含有“b”的行数。实际需要用Spark的安装路径替换YOUR_SPARK_HOME。
3.3.3 编译并提交应用程序
可以采用IDEA生成Jar包的方式,也可以采取sbt或者mvn的方式打成Jar包。以sbt package为例,创建一个包含应用程序代码的Jar包。
一旦用户的应用程序被打包,就可以使用$SPARK_HOME./bin/spark-submit脚本启动应用程序。spark-submit脚本负责建立Spark的类路径和相关依赖,并支持不同的集群管理(Local、Standalone、YARN)和部署模式(Client、Cluster),通过提交参数进行区别。
1.?使用sbt打成Jar包
使用sbt打成Jar包过程如下:

sbt package
...
[info] Packaging {..}/{..}/target/scala-2.10/simple-project_2.10-1.0.jar
2.?应用程序提交模板
应用程序提交模板如下:
./bin/spark-submit \
  --class <main-class>\
  --master <master-url>\
  --deploy-mode <deploy-mode>\
  ... # other options
<application-jar>\
[application-arguments]

选项解释说明:
--class:应用程序入口位置,如org.apache.spark.examples.SparkPi。
--master:集群的master的URL,如spark://xxx.xxx.xxx.xxx:7077;或使用local在本地单线程地运行,或使用local[N]在本地以N个线程运行。通常应该由运行local进行测试开始。
--deploy-mode:集群部署模式,Cluster模式和Client模式(默认模式)。
application-jar:包含应用程序和所有依赖的Jar包的路径。该URL必须是在集群中全局可见的,如一个hdfs://路径或者一个在所有Worker节点都出现的f?ile://路径。
application-arguments:传递给主类的main函数的参数。
对于Python应用,在的位置传入一个.py文件代替一个Jar包,并且以-py-f?iles的方式在搜索路径下加入Python.zip、.egg或.py文件。
常见的部署策略是从同一物理位置,即同一个网关的服务器上提交应用程序。在这种设置中,采用Client模式比较合适。在Client模式中,Driver直接在用户的spark-submit进程中启动,应用程序的输入和输出连接到控制台(console)。因此,这个模式对于涉及REPL(Read-Eval-Print Loop,“读取-求值-输出”循环)的应用程序尤其合适。
另外,如果你的应用程序是从远离Worker机器的某台机器上提交的(如你的笔记本电脑上),一般要用Cluster模式,使Drivers和Executors之间的网络延迟最小化。(目前Standalone部署模式、Mesos集群模式和Python编写的应用不支持Cluster
模式。)
传递给Spark的Master URL可以是如表3-1所示的某个格式。


d7c711ea1b974b515046c839912012df3f190b76

3.以Local模式提交应用程序
以Local模式在4个CPU核上运行应用程序,命令如下:

$ YOUR_SPARK_HOME/bin/spark-submit \
  --class "SimpleApp" \
  --master local[4] \
  target/scala-2.10/simple-project_2.10-1.0.jar
...
4.以Standalone模式提交应用程序
以Standalone模式运行应用程序,命令如下:
./bin/spark-submit \
  --class "SimpleApp" \
  --master spark:// *.*.*.*:7077 \
  --executor-memory 2G \
  --total-executor-cores 10 \
target/scala-2.10/simple-project_2.10-1.0.jar
5.以YARN模式提交应用程序
以YARN模式运行应用程序,命令如下:
./bin/spark-submit \
  --class "SimpleApp" \
  --master yarn-cluster \ # 也可以是 'yarn-client' 模式
  --executor-memory 2G \
  --num-executors 10 \
target/scala-2.10/simple-project_2.10-1.0.jar
相关文章
|
26天前
|
分布式计算 数据处理 Apache
Spark和Flink的区别是什么?如何选择?都应用在哪些行业?
【10月更文挑战第10天】Spark和Flink的区别是什么?如何选择?都应用在哪些行业?
128 1
|
1月前
|
存储 缓存 分布式计算
大数据-83 Spark 集群 RDD编程简介 RDD特点 Spark编程模型介绍
大数据-83 Spark 集群 RDD编程简介 RDD特点 Spark编程模型介绍
35 4
|
1月前
|
存储 缓存 分布式计算
大数据-89 Spark 集群 RDD 编程-高阶 编写代码、RDD依赖关系、RDD持久化/缓存
大数据-89 Spark 集群 RDD 编程-高阶 编写代码、RDD依赖关系、RDD持久化/缓存
41 4
|
1月前
|
分布式计算 Java 大数据
大数据-92 Spark 集群 SparkRDD 原理 Standalone详解 ShuffleV1V2详解 RDD编程优化
大数据-92 Spark 集群 SparkRDD 原理 Standalone详解 ShuffleV1V2详解 RDD编程优化
35 0
大数据-92 Spark 集群 SparkRDD 原理 Standalone详解 ShuffleV1V2详解 RDD编程优化
|
2月前
|
消息中间件 分布式计算 Java
Linux环境下 java程序提交spark任务到Yarn报错
Linux环境下 java程序提交spark任务到Yarn报错
39 5
|
1月前
|
SQL 分布式计算 大数据
大数据-91 Spark 集群 RDD 编程-高阶 RDD广播变量 RDD累加器 Spark程序优化
大数据-91 Spark 集群 RDD 编程-高阶 RDD广播变量 RDD累加器 Spark程序优化
30 0
|
1月前
|
缓存 分布式计算 大数据
大数据-90 Spark 集群 RDD 编程-高阶 RDD容错机制、RDD的分区、自定义分区器(Scala编写)、RDD创建方式(一)
大数据-90 Spark 集群 RDD 编程-高阶 RDD容错机制、RDD的分区、自定义分区器(Scala编写)、RDD创建方式(一)
40 0
|
1月前
|
分布式计算 算法 大数据
大数据-90 Spark 集群 RDD 编程-高阶 RDD容错机制、RDD的分区、自定义分区器(Scala编写)、RDD创建方式(二)
大数据-90 Spark 集群 RDD 编程-高阶 RDD容错机制、RDD的分区、自定义分区器(Scala编写)、RDD创建方式(二)
45 0
|
3月前
|
分布式计算 大数据 数据处理
Apache Spark的应用与优势:解锁大数据处理的无限潜能
【8月更文挑战第23天】Apache Spark以其卓越的性能、易用性、通用性、弹性与可扩展性以及丰富的生态系统,在大数据处理领域展现出了强大的竞争力和广泛的应用前景。随着大数据技术的不断发展和普及,Spark必将成为企业实现数字化转型和业务创新的重要工具。未来,我们有理由相信,Spark将继续引领大数据处理技术的发展潮流,为企业创造更大的价值。
|
3月前
|
分布式计算 资源调度 测试技术
“Spark Streaming异常处理秘籍:揭秘如何驯服实时数据流的猛兽,守护你的应用稳如泰山,不容错过!”
【8月更文挑战第7天】Spark Streaming 是 Apache Spark 中的关键组件,用于实时数据流处理。部署时可能遭遇数据问题、资源限制或逻辑错误等异常。合理处理这些异常对于保持应用稳定性至关重要。基础在于理解其异常处理机制,通过 DSC 将数据流切分为 RDD。对于数据异常,可采用 try-catch 结构捕获并处理;资源层面异常需优化 Spark 配置,如调整内存分配;逻辑异常则需加强单元测试及集成测试。结合监控工具,可全面提升应用的健壮性和可靠性。
76 3
下一篇
无影云桌面