《Spark核心技术与高级应用》——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所示的某个格式。

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
时间: 2024-10-25 22:58:38

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

《Spark核心技术与高级应用》——导读

目 录 前 言 基 础 篇第1章 Spark简介 1.1 什么是Spark1.2 Spark的重要扩展1.3 本章小结第2章 Spark部署和运行2.1 部署准备2.2 Spark部署2.3 运行Spark应用程序2.4 本章小结第3章 Spark程序开发3.1 使用Spark Shell编写程序3.2 构建Spark的开发环境3.3 独立应用程序编程 3.4 本章小结第4章 编程模型4.1 RDD介绍4.2 创建RDD4.3 RDD操作4.4 共享变量4.5 本章小结第5章 作业执行解析5.1

《Spark核心技术与高级应用》——1.1节什么是Spark

1.1 什么是Spark说起大数据,很多人会想起Doug Cutting以自己儿子玩具小象命名的开源项目Hadoop.Hadoop解决了大多数批处理工作负载问题,成为了大数据时代企业的首选技术.但随着大数据时代不可逆的演进,人们发现,由于一些限制,Hadoop对一些工作负载并不是最优选择,比如:缺少对迭代的支持:中间数据需输出到硬盘存储,产生了较高的延迟.探其究竟,MapReduce设计上的约束比较适合处理离线数据,在实时查询和迭代计算上存在较大的不足,而随着具体业务的发展,业界对实时查询和迭代

《Spark核心技术与高级应用》——2.3节运行Spark应用程序

2.3 运行Spark应用程序 运行Spark应用程序主要包括Local模式运行.Standalone模式运行.YARN模式运行.Mesos模式运行(参考官方文档).2.3.1 Local模式运行Spark应用程序 Local模式运行Spark应用程序是最简单的方式,以计算圆周率的程序为例,进入安装主目录,如spark-1.5.0,执行命令: # 提交Spark任务的入口 ./bin/spark-submit \ #主程序设置本地,local[],其中是指设置线程数 --master local

《Spark核心技术与高级应用》——3.1节使用Spark Shell编写程序

3.1 使用Spark Shell编写程序 要学习Spark程序开发,建议首先通过spark-shell交互式学习,加深对Spark程序开发的理解.spark-shell提供了一种学习API的简单方式,以及一个能够交互式分析数据的强大工具,在Scala语言环境下(Scala运行于Java虚拟机,因此能有效使用现有的Java库)或Python语言环境下均可使用.3.1.1 启动Spark Shell 在spark-shell中,已经创建了一个名为sc的SparkContext对象,如在4个CPU核

《Spark核心技术与高级应用》——1.2节Spark的重要扩展

1.2 Spark的重要扩展 大家知道,在Hadoop中完成即席查询(ad-hoc queries).批处理(batch processing),流式处理(stream processing),需要构建不同的团队,每个团队需要不同的技术和经验,很难做到共享.而Spark实现了平台融合,一个基础平台解决所有的问题,一个团队拥有相同的技术和经验完成所有的任务. 基于Spark的基础平台扩展了5个主要的Spark库,包括支持结构化数据的Spark SQL.处理实时数据的Spark Streaming.

《Spark核心技术与高级应用》——2.2节Spark部署

2.2 Spark部署Spark部署主要包括Local模式部署.Standalone模式部署.YARN模式部署.Mesos模式部署(参考官方文档).其中,集群部署模式如下:独立部署模式:Spark自带的一种简单集群管理器,使用该集群管理器可以轻松地建立一个集群:Apache Mesos:一个通用的集群管理器,该集群管理器也可以运行MapReduce和服务应用(实际业务没有采取该种架构,本书没有对该模式进行专门讲解,如需要了解,请参考官方文档):Hadoop YARN:Hadoop 2中的资源管理

《Spark核心技术与高级应用》——3.2节构建Spark的开发环境

3.2 构建Spark的开发环境无论Windows或Linux操作系统,构建Spark开发环境的思路一致,基于Eclipse或Idea,通过Java.Scala或Python语言进行开发.安装之前需要提前准备好JDK.Scala或Python环境,然后在Eclipse中下载安装Scala或Python插件.3.2.1 准备环境准备环境包括JDK.Scala和Python的安装.1.安装JDK(1)下载JDK(1.7以上版本)下载地址:http://www.oracle.com/technetwo

《Spark核心技术与高级应用》——1.3节本章小结

1.3 本章小结大数据以及相关的概念.技术是业界和学界最近关注的热点,Spark在其中扮演了非常重要的角色.本书首先对Spark大数据框架进行了简单的介绍,展示了蓬勃发展的Spark大数据相关的特点和用途,揭开了Spark整个生态环境的神秘面纱.并在此基础上,向读者介绍了基于Spark的重要扩展,包括Spark SQL和DataFrame.Spark Streaming.MLlib和ML.GraphX.SparkR,使读者对Spark能做什么有个初步的了解.

《Spark核心技术与高级应用》——第2章Spark部署和运行

第2章Spark部署和运行合抱之木,生于毫末:九层之台,起于累土:千里之行,始于足下.--<道德经>第六十四章合抱的粗木,是从细如针毫时长起来的:九层的高台,是一筐土一筐土筑起来的:千里的行程,是一步又一步迈出来的.那么,Spark高手之路,是从Spark部署和运行开始的,只要坚持,就一定会有收获!对于大部分想学习Spark的人而言,如何构建稳定的Spark集群是学习的重点之一,为了解决构建Spark集群的困难,本章内容从简入手,循序渐进,主要包括:部署准备工作.本地模式部署.独立模式部署.Y