本文介绍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

shell 查看spark集群进程 查看spark是否启动成功_yarn

2、选择应用程序文件

shell 查看spark集群进程 查看spark是否启动成功_spark_02


shell 查看spark集群进程 查看spark是否启动成功_大数据_03

3、添加类和参数

shell 查看spark集群进程 查看spark是否启动成功_应用程序_04

4、启动和停止

shell 查看spark集群进程 查看spark是否启动成功_shell 查看spark集群进程_05