本文介绍CDH6.3.2平台的spark-submit提交任务的方法。
构建应用依赖
当提交的应用程序有依赖时,可以使用spark-submit支持的方法分发依赖到整个集群。下面介绍Scala/Java和Python两类应用程序的依赖添加方法。
构建Scala/Java应用依赖
如果一个Scala/Java应用程序有依赖,可以将应用程序及其依赖构建成一个assembly jar,提交任务时,指定assembly jar即可。
构建Python应用依赖
如果一个Python应用程序有依赖,可以使用spark-submit提供的 --py-files 参数,指定应用程序的依赖文件。
–py-files 参数支持的文件类型:.py,.zip,.egg。
推荐做法:当只有一个依赖文件时,指定 .py 文件;当有多个依赖文件时,将依赖文件打包成 .zip 文件,然后指定 .zip 文件。
启动应用程序
通用模板
./bin/spark-submit \
--class <main-class> \
--master <master-url> \
--deploy-mode <deploy-mode> \
--conf <key>=<value> \
... # other options
<application-jar> \
[application-arguments]
参数介绍:
参数 | 说明 |
–class | 应用程序入口。(Scala和Java需要指定这个参数)。 |
–master | 应用程序运行模式。本地模式,Spark Standalone,YARN,或者其他。 |
–deploy-mode | 部署模式。cluster/client,默认是client。 |
–conf | 可以指定spark配置属性。 |
application-jar | 应用程序文件。jar或者py文件。要求绝对路径。 |
application-arguments | 应用程序参数。 |
本地模式
本地模式一般用于简单测试。
示例:
spark-submit \
--master local[2] \
--class org.apache.spark.examples.SparkPi \
/opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/jars/spark-examples_2.11-2.4.0-cdh6.3.2.jar \
1000
YARN模式
在CDH平台中,spark运行在yarn上,所以生产环境的spark应用都会使用yarn模式。
yarn模式(和部分其他模式)支持两种部署模式,client和cluster,默认是client。
通过 --deploy-mode 参数指定。
client部署模式
如果在spark集群中的一个gateway机器上启动应用程序,使用client部署模式是合适的。
驱动程序会直接在spark-submit进程中启动,作为客户端和集群交互,可将应用程序的输入输出打印到控制台,方便调试。
示例:
spark-submit \
--master yarn \
--class org.apache.spark.examples.SparkPi \
/opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/jars/spark-examples_2.11-2.4.0-cdh6.3.2.jar \
1000
这里没有指定 --deploy-mode ,默认使用client部署模式。
cluster部署模式
如果在spark集群之外的机器上启动应用程序,推荐使用cluster模式,这样驱动程序和执行器都在集群内部启动,降低网络延迟。
示例:
spark-submit \
--master yarn \
--deploy-mode cluster \
--class org.apache.spark.examples.SparkPi \
/opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/jars/spark-examples_2.11-2.4.0-cdh6.3.2.jar \
1000
执行用户
执行spark-submit的用户会成为启动应用的用户,当spark应用运行在yarn模式的时候,yarn集群的每个节点的本地操作系统中都必须存在这个用户。
例如,这里使用 bigdata 这个用户执行spark-submit启动应用程序,需要保证yarn集群的每个节点上都存在 bigdata 这个用户。如果CDH平台集成了LDAP,那应该就不需要如此操作了(个人推测)。
在CDH平台生产环境中,只需要一个或少数几个执行用户即可,用于执行生产任务。
指定HDFS的应用程序文件
上面提到 application-jar 时应用程序文件,需要指定绝对路径。url协议默认是file://,其实还可以指定其他的协议,比如 hdfs:// 。
在CDH平台中,应用程序文件放到hdfs上是一种更优雅的做法,这样就不必在每个节点上保存一份应用程序文件了。
示例:
spark-submit \
--master yarn \
--deploy-mode cluster \
--class org.apache.spark.examples.SparkPi \
hdfs:///user/bigdata/spark-examples_2.11-2.4.0-cdh6.3.2.jar \
1000
在Hue上启动spark应用程序
spark应用程序文件需要放到hdfs上。
1、进入Hue Spark
2、选择应用程序文件
3、添加类和参数
4、启动和停止