
# 编包并运行Spark应用
#### 操作场景
在程序代码完成开发后，您可以将打包好的jar包上传至Linux客户端环境中运行应用。使用Scala或Java语言开发的应用程序在Spark客户端的运行步骤是一样的。
![](https://support.huaweicloud.com/devg-mrs/public_sys-resources/note_3.0-zh-cn.png)
- Spark应用程序只支持在Linux环境下运行，不支持在Windows环境下运行。
- 使用Python开发的Spark应用程序无需打包成jar，只需将样例工程拷贝到编译机器上即可。
 
#### 运行Spark Core样例程序
1. 在工程目录下执行**mvn package**命令生成jar包，在工程目录target目录下获取，比如:FemaleInfoCollection.jar
2. 将生成的Jar包（如CollectFemaleInfo.jar）拷贝到Spark运行环境下（即Spark客户端），如"/opt/female"。开启Kerberos认证的安全集群下把从[准备Spark应用开发用户](https://support.huaweicloud.com/devg-mrs/mrs_06_0154.html)中获取的user.keytab和krb5.conf文件拷贝到Spark客户端conf目录下，如：/opt/client/Spark/spark/conf；未开启Kerberos认证集群可不必拷贝user.keytab和krb5.conf文件。
3. 运行Spark Core（Scala和Java）样例程序。 
   ![](https://support.huaweicloud.com/devg-mrs/public_sys-resources/notice_3.0-zh-cn.png)
   - 在Spark任务运行过程中禁止重启HDFS服务或者重启所有DataNode实例，否则可能会导致任务失败，并可能导致JobHistory部分数据丢失。
   
   - 运行程序时可根据需要选择运行模式：
     - ***--deploy-mode client***：driver进程在客户端运行，运行结果在程序运行后直接输出。
     
     - ***--deploy-mode cluster***：driver进程在Yarn的ApplicationMaster（AM）中运行，运行结果和日志在Yarn的WebUI界面输出。
      
    
   进入Spark客户端目录，调用bin/spark-submit脚本运行代码。
   其中，\<inputPath\>指HDFS文件系统中input的路径。
   ***bin/spark-submit --class*** com.huawei.bigdata.spark.examples*.FemaleInfoCollection* ***-*** ***-master yarn*** ***--deploy-mode client*** */opt/female/FemaleInfoCollection.jar \<inputPath\>*
   
   
 
#### 运行Spark SQL样例程序
1. 在工程目录下执行**mvn package**命令生成jar包，在工程目录target目录下获取，比如:FemaleInfoCollection.jar
2. 将生成的Jar包（如CollectFemaleInfo.jar）拷贝到Spark运行环境下（即Spark客户端），如"/opt/female"。开启Kerberos认证的安全集群下把从[准备Spark应用开发用户](https://support.huaweicloud.com/devg-mrs/mrs_06_0154.html)中获取的user.keytab和krb5.conf文件拷贝到Spark客户端conf目录下，如：/opt/client/Spark/spark/conf；未开启Kerberos认证集群可不必拷贝user.keytab和krb5.conf文件。
3. 运行Spark SQL样例程序（Scala和Java语言）。 
   ![](https://support.huaweicloud.com/devg-mrs/public_sys-resources/notice_3.0-zh-cn.png)
   - 在Spark任务运行过程中禁止重启HDFS服务或者重启所有DataNode实例，否则可能会导致任务失败，并可能导致JobHistory部分数据丢失。
   
   - 运行程序时可根据需要选择运行模式：
     - ***--deploy-mode client***：driver进程在客户端运行，运行结果在程序运行后直接输出。
     
     - ***--deploy-mode cluster***：driver进程在Yarn的ApplicationMaster（AM）中运行，运行结果和日志在Yarn的WebUI界面输出。
      
    
   进入Spark客户端目录，调用bin/spark-submit脚本运行代码。
   其中，\<inputPath\>指HDFS文件系统中input的路径。
   ***bin/spark-submit --class*** com.huawei.bigdata.spark.examples*.FemaleInfoCollection* ***--master yarn*** ***--deploy-mode client*** */opt/female/FemaleInfoCollection.jar \<inputPath\>*
   
   
 
#### 运行Spark Streaming样例程序
1. 在工程目录下执行**mvn package**命令生成jar包，在工程目录target目录下获取，比如:FemaleInfoCollection.jar
2. 将生成的Jar包（如CollectFemaleInfo.jar）拷贝到Spark运行环境下（即Spark客户端），如"/opt/female"。开启Kerberos认证的安全集群下把从[准备Spark应用开发用户](https://support.huaweicloud.com/devg-mrs/mrs_06_0154.html)中获取的user.keytab和krb5.conf文件拷贝到Spark客户端conf目录下，如：/opt/client/Spark/spark/conf；未开启Kerberos认证集群可不必拷贝user.keytab和krb5.conf文件。
3. 运行Spark Streaming样例程序（Scala和Java语言）。 
   ![](https://support.huaweicloud.com/devg-mrs/public_sys-resources/notice_3.0-zh-cn.png)
   - 在Spark任务运行过程中禁止重启HDFS服务或者重启所有DataNode实例，否则可能会导致任务失败，并可能导致JobHistory部分数据丢失。
   
   - 运行程序时可根据需要选择运行模式：
     - ***--deploy-mode client***：driver进程在客户端运行，运行结果在程序运行后直接输出。
     
     - ***--deploy-mode cluster***：driver进程在Yarn的ApplicationMaster（AM）中运行，运行结果和日志在Yarn的WebUI界面输出。
      
    
   进入Spark客户端目录，调用bin/spark-submit脚本运行代码。
   ![](https://support.huaweicloud.com/devg-mrs/public_sys-resources/note_3.0-zh-cn.png)
   由于Spark Streaming Kafka的依赖包在客户端的存放路径与其他依赖包不同，如其他依赖包路径为"$SPARK_HOME/jars"，而Spark Streaming Kafka依赖包路径为"$SPARK_HOME/jars/streamingClient"。所以在运行应用程序时，需要在spark-submit命令中添加配置项，指定Spark Streaming Kafka的依赖包路径，如*--jars $SPARK_HOME/jars/streamingClient/kafka-clients-\*.jar,$SPARK_HOME/jars/streamingClient/kafka_\*.jar,$SPARK_HOME/jars/streamingClient/spark-streaming-kafka-0-8_\*.jar*。
   - Spark Streaming Write To Print代码样例 ***bin/spark-submit --master yarn*** ***--deploy-mode client*** *--jars $SPARK_HOME/jars/streamingClient/kafka-clients-\*.jar,$SPARK_HOME/jars/streamingClient/kafka_\*.jar,$SPARK_HOME/jars/streamingClient/spark-streaming-kafka-\*.jar* ***--class*** com.huawei.bigdata.spark.examples*.FemaleInfoCollectionPrint /opt/female/FemaleInfoCollectionPrint.jar \<checkPointDir\> \<batchTime\> \<topics\> \<brokers\>*
     ![](https://support.huaweicloud.com/devg-mrs/public_sys-resources/note_3.0-zh-cn.png)
     - --jars中的jar版本名称根据集群实际情况而定。
     
     - brokers格式为brokerIp:9092。
     
     - \<checkPointDir\>指应用程序结果备份到HDFS的路径，\<batchTime\>指Streaming分批的处理间隔。
       
   
   - Spark Streaming Write To Kafka代码样例 ***bin/spark-submit --master yarn*** ***--*** ***deploy-mode client*** *--jars $SPARK_HOME/jars/streamingClient/kafka-clients-\*.jar,$SPARK_HOME/jars/streamingClient/kafka_\*.jar,$SPARK_HOME/jars/streamingClient/spark-streaming-kafka-\*.jar* ***--***
     ***class*** *com.huawei.bigdata.spark.examples.DstreamKafkaWriter* */opt/female/SparkStreamingExample-1.0.jar \<groupId\> \<brokers\> \<topic\>*
     
   
   
   
   
 
#### 运行"通过JDBC访问Spark SQL"样例程序
1. 在工程目录下执行**mvn package**命令生成jar包，在工程目录target目录下获取，比如:FemaleInfoCollection.jar
2. 将生成的Jar包（如CollectFemaleInfo.jar）拷贝到Spark运行环境下（即Spark客户端），如"/opt/female"。开启Kerberos认证的安全集群下把从[准备Spark应用开发用户](https://support.huaweicloud.com/devg-mrs/mrs_06_0154.html)中获取的user.keytab和krb5.conf文件拷贝到Spark客户端conf目录下，如：/opt/client/Spark/spark/conf；未开启Kerberos认证集群可不必拷贝user.keytab和krb5.conf文件。
3. 运行"通过JDBC访问Spark SQL"样例程序（Scala和Java语言）。 
   ![](https://support.huaweicloud.com/devg-mrs/public_sys-resources/notice_3.0-zh-cn.png)
   - 在Spark任务运行过程中禁止重启HDFS服务或者重启所有DataNode实例，否则可能会导致任务失败，并可能导致JobHistory部分数据丢失。
   
   - 运行程序时可根据需要选择运行模式：
     - ***--deploy-mode client***：driver进程在客户端运行，运行结果在程序运行后直接输出。
     
     - ***--deploy-mode cluster***：driver进程在Yarn的ApplicationMaster（AM）中运行，运行结果和日志在Yarn的WebUI界面输出。
      
    
   进入Spark客户端目录，使用java -cp命令运行代码。
   java -cp ${SPARK_HOME}/jars/\*:${SPARK_HOME}/conf:/opt/female/SparkThriftServerJavaExample-\*.jar com.huawei.bigdata.spark.examples.ThriftServerQueriesTest ${SPARK_HOME}/conf/hive-site.xml ${SPARK_HOME}/conf/spark-defaults.conf
   ![](https://support.huaweicloud.com/devg-mrs/public_sys-resources/note_3.0-zh-cn.png)
   普通集群需要注释掉安全配置部分代码，详情请参见[2](https://support.huaweicloud.com/devg-mrs/mrs_06_0183.html#mrs_06_0183__zh-cn_topic_0036027283_li34135272143810)和[2](https://support.huaweicloud.com/devg-mrs/mrs_06_0184.html#mrs_06_0184__zh-cn_topic_0036027284_li34058091205732)。
   上面的命令行中，您可以根据不同样例工程，最小化选择其对应的运行依赖包。样例工程对应的运行依赖包详情，请参见[1]。
   
   
 
#### 运行"Spark on HBase"样例程序
1. 在工程目录下执行**mvn package**命令生成jar包，在工程目录target目录下获取，比如:FemaleInfoCollection.jar
2. 将生成的Jar包（如CollectFemaleInfo.jar）拷贝到Spark运行环境下（即Spark客户端），如"/opt/female"。开启Kerberos认证的安全集群下把从[准备Spark应用开发用户](https://support.huaweicloud.com/devg-mrs/mrs_06_0154.html)中获取的user.keytab和krb5.conf文件拷贝到Spark客户端conf目录下，如：/opt/client/Spark/spark/conf；未开启Kerberos认证集群可不必拷贝user.keytab和krb5.conf文件。
3. 运行"Spark on HBase"样例程序（Scala和Java语言）。 
   ![](https://support.huaweicloud.com/devg-mrs/public_sys-resources/notice_3.0-zh-cn.png)
   - 在Spark任务运行过程中禁止重启HDFS服务或者重启所有DataNode实例，否则可能会导致任务失败，并可能导致JobHistory部分数据丢失。
   
   - 运行程序时可根据需要选择运行模式：
     - ***--deploy-mode client***：driver进程在客户端运行，运行结果在程序运行后直接输出。
     
     - ***--deploy-mode cluster***：driver进程在Yarn的ApplicationMaster（AM）中运行，运行结果和日志在Yarn的WebUI界面输出。
      
    
   进入Spark客户端目录，调用bin/spark-submit脚本运行代码。运行样例程序时，程序运行顺序为：TableCreation、TableInputData、TableOutputData。
   其中，在运行TableInputData样例程序时需要指定\<inputPath\>，\<inputPath\>指HDFS文件系统中input的路径。
   ***bin/spark-submit --class*** com.huawei.bigdata.spark.examples*.TableInputData* ***--master yarn --deploy-mode client*** */opt/female/TableInputData.jar \<inputPath\>*
   ![](https://support.huaweicloud.com/devg-mrs/public_sys-resources/note_3.0-zh-cn.png)
   spark任务在连接hbase读写数据的时候，如果开启了kerberos认证，需要将客户端的配置文件"spark-defaults.conf"中的配置项spark.yarn.security.credentials.hbase.enabled置为true。所有连接hbase读写数据spark任务均需修改该配置。
   
   
 
#### 运行Spark HBase to HBase样例程序
1. 在工程目录下执行**mvn package**命令生成jar包，在工程目录target目录下获取，比如:FemaleInfoCollection.jar
2. 将生成的Jar包（如CollectFemaleInfo.jar）拷贝到Spark运行环境下（即Spark客户端），如"/opt/female"。开启Kerberos认证的安全集群下把从[准备Spark应用开发用户](https://support.huaweicloud.com/devg-mrs/mrs_06_0154.html)中获取的user.keytab和krb5.conf文件拷贝到Spark客户端conf目录下，如：/opt/client/Spark/spark/conf；未开启Kerberos认证集群可不必拷贝user.keytab和krb5.conf文件。
3. 运行Spark HBase to HBase样例程序（Scala和Java语言）。 
   ![](https://support.huaweicloud.com/devg-mrs/public_sys-resources/notice_3.0-zh-cn.png)
   - 在Spark任务运行过程中禁止重启HDFS服务或者重启所有DataNode实例，否则可能会导致任务失败，并可能导致JobHistory部分数据丢失。
   
   - 运行程序时可根据需要选择运行模式：
     - ***--deploy-mode client***：driver进程在客户端运行，运行结果在程序运行后直接输出。
     
     - ***--deploy-mode cluster***：driver进程在Yarn的ApplicationMaster（AM）中运行，运行结果和日志在Yarn的WebUI界面输出。
      
    
   进入Spark客户端目录，调用bin/spark-submit脚本运行代码。
   其中，在运行样例程序时需要指定\<zkQuorum\>，\<zkQuorum\>指ZooKeeper的IP地址。
   ***bin/spark-submit --class*** com.huawei.bigdata.spark.examples*.SparkHbasetoHbase* ***--master yarn --deploy-mode client*** */opt/female/FemaleInfoCollection.jar \<zkQuorum\>*
   
   
 
#### 运行Spark Hive to HBase样例程序
1. 在工程目录下执行**mvn package**命令生成jar包，在工程目录target目录下获取，比如:FemaleInfoCollection.jar
2. 将生成的Jar包（如CollectFemaleInfo.jar）拷贝到Spark运行环境下（即Spark客户端），如"/opt/female"。开启Kerberos认证的安全集群下把从[准备Spark应用开发用户](https://support.huaweicloud.com/devg-mrs/mrs_06_0154.html)中获取的user.keytab和krb5.conf文件拷贝到Spark客户端conf目录下，如：/opt/client/Spark/spark/conf；未开启Kerberos认证集群可不必拷贝user.keytab和krb5.conf文件。
3. 运行Spark Hive to HBase样例程序（Scala和Java语言）。 
   ![](https://support.huaweicloud.com/devg-mrs/public_sys-resources/notice_3.0-zh-cn.png)
   - 在Spark任务运行过程中禁止重启HDFS服务或者重启所有DataNode实例，否则可能会导致任务失败，并可能导致JobHistory部分数据丢失。
   
   - 运行程序时可根据需要选择运行模式：
     - ***--deploy-mode client***：driver进程在客户端运行，运行结果在程序运行后直接输出。
     
     - ***--deploy-mode cluster***：driver进程在Yarn的ApplicationMaster（AM）中运行，运行结果和日志在Yarn的WebUI界面输出。
      
    
   进入Spark客户端目录，调用bin/spark-submit脚本运行代码。
   在运行样例程序时需要指定\<zkQuorum\>，\<zkQuorum\>指ZooKeeper服务器ip地址。
   ***bin/spark-submit --class*** com.huawei.bigdata.spark.examples*.SparkHivetoHbase* ***--master yarn --deploy-mode client*** */opt/female/FemaleInfoCollection.jar \<zkQuorum\>*
   
   
 
#### 运行Spark Streaming Kafka to HBase样例程序
1. 在工程目录下执行**mvn package**命令生成jar包，在工程目录target目录下获取，比如:FemaleInfoCollection.jar
2. 将生成的Jar包（如CollectFemaleInfo.jar）拷贝到Spark运行环境下（即Spark客户端），如"/opt/female"。开启Kerberos认证的安全集群下把从[准备Spark应用开发用户](https://support.huaweicloud.com/devg-mrs/mrs_06_0154.html)中获取的user.keytab和krb5.conf文件拷贝到Spark客户端conf目录下，如：/opt/client/Spark/spark/conf；未开启Kerberos认证集群可不必拷贝user.keytab和krb5.conf文件。
3. 运行Spark Streaming Kafka to HBase样例程序（Scala和Java语言）。 
   ![](https://support.huaweicloud.com/devg-mrs/public_sys-resources/notice_3.0-zh-cn.png)
   - 在Spark任务运行过程中禁止重启HDFS服务或者重启所有DataNode实例，否则可能会导致任务失败，并可能导致JobHistory部分数据丢失。
   
   - 运行程序时可根据需要选择运行模式：
     - ***--deploy-mode client***：driver进程在客户端运行，运行结果在程序运行后直接输出。
     
     - ***--deploy-mode cluster***：driver进程在Yarn的ApplicationMaster（AM）中运行，运行结果和日志在Yarn的WebUI界面输出。
      
    
   进入Spark客户端目录，调用bin/spark-submit脚本运行代码。
   在运行样例程序时需要指定\<checkPointDir\>\<topic\>\<brokerList\>，其中\<checkPointDir\>指应用程序结果备份到HDFS的路径，\<topic\>指读取kafka上的topic名称，\<brokerList\>指Kafka服务器IP地址。
   ![](https://support.huaweicloud.com/devg-mrs/public_sys-resources/note_3.0-zh-cn.png)
   由于Spark Streaming Kafka的依赖包在客户端的存放路径与其他依赖包不同，如其他依赖包路径为"$SPARK_HOME/lib"，而Spark Streaming Kafka依赖包路径为"$SPARK_HOME/lib/streamingClient010"。所以在运行应用程序时，需要在spark-submit命令中添加配置项，指定Spark Streaming Kafka的依赖包路径，如*--jars $SPARK_HOME/jars/streamingClient010/kafka-clients-\*.jar,$SPARK_HOME/jars/streamingClient010/kafka_\*.jar,$SPARK_HOME/jars/streamingClient010/spark-streaming-kafka-\*.jar*。
   Spark Streaming To HBase代码样例
   ***bin/spark-submit --master yarn --deploy-mode client --jars*** *$SPARK_HOME/jars/streamingClient010/kafka-clients-\*.jar,$SPARK_HOME/jars/streamingClient010/kafka_\*.jar,$SPARK_HOME/jars/streamingClient010/spark-streaming-kafka-0\*.jar* ***-*** ***-class*** com.huawei.bigdata.spark.examples*.streaming.SparkOnStreamingToHbase /opt/female/FemaleInfoCollectionPrint.jar \<checkPointDir\> \<topic\> \<brokerList\>*
   ![](https://support.huaweicloud.com/devg-mrs/public_sys-resources/note_3.0-zh-cn.png)
   - --jars中的jar名称根据集群实际情况而定。
   
   - brokerlist格式为brokerIp:9092。
    
   
   
 
#### 运行Spark Streaming 对接Kafka0-10样例程序
1. 在工程目录下执行**mvn package**命令生成jar包，在工程目录target目录下获取，比如:FemaleInfoCollection.jar
2. 将生成的Jar包（如CollectFemaleInfo.jar）拷贝到Spark运行环境下（即Spark客户端），如"/opt/female"。开启Kerberos认证的安全集群下把从[准备Spark应用开发用户](https://support.huaweicloud.com/devg-mrs/mrs_06_0154.html)中获取的user.keytab和krb5.conf文件拷贝到Spark客户端conf目录下，如：/opt/client/Spark/spark/conf；未开启Kerberos认证集群可不必拷贝user.keytab和krb5.conf文件。
3. 运行Spark Streaming 对接Kafka0-10样例程序（Scala和Java语言）。 
   ![](https://support.huaweicloud.com/devg-mrs/public_sys-resources/notice_3.0-zh-cn.png)
   - 在Spark任务运行过程中禁止重启HDFS服务或者重启所有DataNode实例，否则可能会导致任务失败，并可能导致JobHistory部分数据丢失。
   
   - 运行程序时可根据需要选择运行模式：
     - ***--deploy-mode client***：driver进程在客户端运行，运行结果在程序运行后直接输出。
     
     - ***--deploy-mode cluster***：driver进程在Yarn的ApplicationMaster（AM）中运行，运行结果和日志在Yarn的WebUI界面输出。
      
    
   进入Spark客户端目录，调用bin/spark-submit脚本运行代码。
   在运行样例程序时需要指定\<checkpointDir\> \<brokers\> \<topic\> \<batchTime\>，其中\<checkPointDir\>指应用程序结果备份到HDFS的路径，\<brokers\>指获取元数据的Kafka地址，安全集群格式为brokerIp:21007，普通群格式为brokerIp:9092，\<topic\>指读取Kafka上的topic名称，\<batchTime\>指Streaming分批的处理间隔。
   Spark Streaming读取Kafka 0-10代码样例：
   - 安全集群任务提交命令： bin/spark-submit --master yarn --deploy-mode client --files ./conf/jaas.conf,./conf/user.keytab --driver-java-options "-Djava.security.auth.login.config=./jaas.conf" --conf "spark.executor.extraJavaOptions=-Djava.security.auth.login.config=./jaas.conf" --jars $SPARK_HOME/jars/streamingClient010/kafka-clients-\*.jar,$SPARK_HOME/jars/streamingClient010/kafka_\*.jar,$SPARK_HOME/jars/streamingClient010/spark-streaming-kafka-\*.jar --class com.huawei.bigdata.spark.examples.SecurityKafkaWordCount /opt/SparkStreamingKafka010JavaExample-\*.jar \<checkpointDir\> \<brokers\> \<topic\> \<batchTime\>
     其中配置示例如下：
     ```
     --files ./jaas.conf,./user.keytab //使用--files指定jaas.conf和keytab文件。
     --driver-java-options "-Djava.security.auth.login.config=./jaas.conf" //指定driver侧jaas.conf文件路径，yarn-client模式下使用--driver-java-options "-Djava.security.auth.login.config"指定；yarn-cluster模式下使用--conf "spark.yarn.cluster.driver.extraJavaOptions"指定。
     --conf "spark.executor.extraJavaOptions=-Djava.security.auth.login.config=./jaas.conf"//指定executor侧jaas.conf文件路径。
     ```
     
   
   - 普通集群任务提交命令： bin/spark-submit --master yarn --deploy-mode client --jars $SPARK_HOME/jars/streamingClient010/kafka-clients-\*.jar,$SPARK_HOME/jars/streamingClient010/kafka_\*.jar,$SPARK_HOME/jars/streamingClient010/spark-streaming-kafka-\*.jar --class com.huawei.bigdata.spark.examples.SecurityKafkaWordCount /opt/SparkStreamingKafka010JavaExample-\*.jar \<checkpointDir\> \<brokers\> \<topic\> \<batchTime\>
     Spark Streaming Write To Kafka 0-10代码样例(该样例只存在于mrs-sample-project-1.6.0.zip中)：
     ***bin/spark-submit --master yarn*** ***--deploy-mode client*** --jars $SPARK_HOME/jars/streamingClient010/kafka-clients-\*.jar,$SPARK_HOME/jars/streamingClient010/kafka_\*.jar,$SPARK_HOME/jars/streamingClient010/spark-streaming-kafka-\*.jar --class com.huawei.bigdata.spark.examples.JavaDstreamKafkaWriter /opt/JavaDstreamKafkaWriter.jar \<checkPointDir\> \<brokers\> \<topics\>
     
   
   
   
   
 
#### 运行Spark Structured Streaming样例程序
1. 在工程目录下执行**mvn package**命令生成jar包，在工程目录target目录下获取，比如:FemaleInfoCollection.jar
2. 将生成的Jar包（如CollectFemaleInfo.jar）拷贝到Spark运行环境下（即Spark客户端），如"/opt/female"。开启Kerberos认证的安全集群下把从[准备Spark应用开发用户](https://support.huaweicloud.com/devg-mrs/mrs_06_0154.html)中获取的user.keytab和krb5.conf文件拷贝到Spark客户端conf目录下，如：/opt/client/Spark/spark/conf；未开启Kerberos认证集群可不必拷贝user.keytab和krb5.conf文件。
3. 运行Spark Structured Streaming样例程序（Scala和Java语言）。 
   ![](https://support.huaweicloud.com/devg-mrs/public_sys-resources/notice_3.0-zh-cn.png)
   - 在Spark任务运行过程中禁止重启HDFS服务或者重启所有DataNode实例，否则可能会导致任务失败，并可能导致JobHistory部分数据丢失。
   
   - 运行程序时可根据需要选择运行模式：
     - ***--deploy-mode client***：driver进程在客户端运行，运行结果在程序运行后直接输出。
     
     - ***--deploy-mode cluster***：driver进程在Yarn的ApplicationMaster（AM）中运行，运行结果和日志在Yarn的WebUI界面输出。
      
    
   进入Spark客户端的conf目录下，调用spark-submit脚本运行代码。
   在运行样例程序时需要指定\<brokers\> \<subscribe-type\> \<topic\> \<protocol\> \<service\> \<domain\>，其中\<brokers\>指获取元数据的Kafka地址，\<subscribe-type\>指Kafka订阅类型（一般为subscribe，代表订阅指定的topic），\<topic\>指读取Kafka上的topic名称，\<protocol\>指安全访问协议，\<service\>指kerberos服务名称，\<domain\>指kerberos域名。
   ![](https://support.huaweicloud.com/devg-mrs/public_sys-resources/note_3.0-zh-cn.png)
   普通集群需要注释掉配置kafka安全协议部分代码，详情请参见[Java样例代码](https://support.huaweicloud.com/devg-mrs/mrs_06_0207.html)和[Scala样例代码](https://support.huaweicloud.com/devg-mrs/mrs_06_0208.html)章节中的说明部分。
   由于Spark Structured Streaming Kafka的依赖包在客户端的存放路径与其他依赖包不同，如其他依赖包路径为"$SPARK_HOME/jars"，而Spark Structured Streaming Kafka依赖包路径为"$SPARK_HOME/jars/streamingClient010"。所以在运行应用程序时，需要在spark-submit命令中添加配置项，指定Spark Streaming Kafka的依赖包路径，如--jars $SPARK_HOME/jars/streamingClient010/kafka-clients-\*.jar,$SPARK_HOME/jars/streamingClient010/kafka_\*.jar,$SPARK_HOME/jars/streamingClient010/spark-sql-kafka-\*.jar。
   Spark Structured Streaming 对接Kafka代码样例
   - 安全集群任务提交命令： cd /opt/client/Spark/spark/conf
     spark-submit --master yarn --deploy-mode client --files ./jaas.conf,./user.keytab --driver-java-options "-Djava.security.auth.login.config=./jaas.conf" --conf "spark.executor.extraJavaOptions=-Djava.security.auth.login.config=./jaas.conf" --jars $SPARK_HOME/jars/streamingClient010/kafka-clients-\*.jar,$SPARK_HOME/jars/streamingClient010/kafka_\*.jar,$SPARK_HOME/jars/streamingClient010/spark-sql-kafka-\*.jar --class com.huawei.bigdata.spark.examples.SecurityKafkaWordCount /root/jars/SparkStructuredStreamingJavaExample-\*.jar \<brokers\> \<subscribe-type\> \<topic\> \<protocol\> \<service\> \<domain\>
     
   
   - 普通集群任务提交命令： spark-submit --master yarn --deploy-mode client --jars $SPARK_HOME/jars/streamingClient010/kafka-clients-\*.jar,$SPARK_HOME/jars/streamingClient010/kafka_\*.jar,$SPARK_HOME/jars/streamingClient010/spark-sql-kafka-\*.jar --class com.huawei.bigdata.spark.examples.SecurityKafkaWordCount /root/jars/SparkStructuredStreamingJavaExample-\*.jar \<brokers\> \<subscribe-type\> \<topic\> \<protocol\> \<service\> \<domain\>
     其中配置示例如下：
     ```
     --files <local Path>/jaas.conf,<local Path>/user.keytab //使用--files指定jaas.conf和keytab文件。
     --driver-java-options "-Djava.security.auth.login.config=<local Path>/jaas.conf" //指定driver侧jaas.conf文件路径，yarn-client模式下使用--driver-java-options "-Djava.security.auth.login.config"指定；yarn-cluster模式下使用--conf "spark.yarn.cluster.driver.extraJavaOptions"指定。如果报没有权限读写本地目录的错误，需要指定"spark.sql.streaming.checkpointLocation"参数，且用户必须具有该参数指定的目录的读、写权限。
     --conf "spark.executor.extraJavaOptions=-Djava.security.auth.login.config=./jaas.conf"  //指定executor侧jaas.conf文件路径。
     --jars中的jar名称根据集群实际情况而定。
     安全集群<brokers>格式为brokerIp:21007,<protocol> <service> <domain>可以参考$KAFKA_HOME/config/consumer.properties文件。
     普通集群<brokers>格式为brokerIp:9092, <domain>可以参考$KAFKA_HOME/config/consumer.properties文件，<protocol>用null代替，<service>为kafka。
     ```
     
   
   
   
   
 
#### 提交Python语言开发的应用程序
1. 在工程目录下执行**mvn package**命令生成jar包，在工程目录target目录下获取，比如:FemaleInfoCollection.jar
2. 将生成的Jar包（如CollectFemaleInfo.jar）拷贝到Spark运行环境下（即Spark客户端），如"/opt/female"。开启Kerberos认证的安全集群下把从[准备Spark应用开发用户](https://support.huaweicloud.com/devg-mrs/mrs_06_0154.html)中获取的user.keytab和krb5.conf文件拷贝到Spark客户端conf目录下，如：/opt/client/Spark/spark/conf；未开启Kerberos认证集群可不必拷贝user.keytab和krb5.conf文件。
3. 提交Python语言开发的应用程序。 
   ![](https://support.huaweicloud.com/devg-mrs/public_sys-resources/notice_3.0-zh-cn.png)
   - 在Spark任务运行过程中禁止重启HDFS服务或者重启所有DataNode实例，否则可能会导致任务失败，并可能导致JobHistory部分数据丢失。
   
   - 运行程序时可根据需要选择运行模式：
     - ***--deploy-mode client***：driver进程在客户端运行，运行结果在程序运行后直接输出。
     
     - ***--deploy-mode cluster***：driver进程在Yarn的ApplicationMaster（AM）中运行，运行结果和日志在Yarn的WebUI界面输出。
      
    
   进入Spark客户端目录，调用bin/spark-submit脚本运行代码。
   其中，\<inputPath\>指HDFS文件系统中input的路径。
   ![](https://support.huaweicloud.com/devg-mrs/public_sys-resources/note_3.0-zh-cn.png)
   由于样例代码中未给出认证信息，请在执行应用程序时通过配置项"spark.yarn.keytab"和"spark.yarn.principal"指定认证信息。
   ***bin/spark-submit --master yarn --deploy-mode client --conf spark.yarn.keytab=/opt/FIclient/user.keytab --conf spark.yarn.principal=sparkuser*** */opt/female/SparkPythonExample/collectFemaleInfo.py \<inputPath\>*
   
   
 
#### 提交SparkLauncher应用程序
1. 在工程目录下执行**mvn package**命令生成jar包，在工程目录target目录下获取，比如:FemaleInfoCollection.jar
2. 将生成的Jar包（如CollectFemaleInfo.jar）拷贝到Spark运行环境下（即Spark客户端），如"/opt/female"。开启Kerberos认证的安全集群下把从[准备Spark应用开发用户](https://support.huaweicloud.com/devg-mrs/mrs_06_0154.html)中获取的user.keytab和krb5.conf文件拷贝到Spark客户端conf目录下，如：/opt/client/Spark/spark/conf；未开启Kerberos认证集群可不必拷贝user.keytab和krb5.conf文件。
3. 提交SparkLauncher应用程序。 
   ![](https://support.huaweicloud.com/devg-mrs/public_sys-resources/notice_3.0-zh-cn.png)
   - 在Spark任务运行过程中禁止重启HDFS服务或者重启所有DataNode实例，否则可能会导致任务失败，并可能导致JobHistory部分数据丢失。
   
   - 运行程序时可根据需要选择运行模式：
     - ***--deploy-mode client***：driver进程在客户端运行，运行结果在程序运行后直接输出。
     
     - ***--deploy-mode cluster***：driver进程在Yarn的ApplicationMaster（AM）中运行，运行结果和日志在Yarn的WebUI界面输出。
      
    
   java -cp $SPARK_HOME/jars/\*:{JAR_PATH} com.huawei.bigdata.spark.examples.SparkLauncherExample yarn-client {TARGET_JAR_PATH} { TARGET_JAR_MAIN_CLASS} {args}
   ![](https://support.huaweicloud.com/devg-mrs/public_sys-resources/note_3.0-zh-cn.png)
   - JAR_PATH为SparkLauncher应用程序jar包所在路径。
   
   - TARGET_JAR_PATH为待提交的spark application应用程序jar包所在路径。
   
   - args为待提交的spark application应用程序的参数。
    
   
   
 
#### 参考信息
"通过JDBC访问Spark SQL"样例程序（Scala和Java语言），其对应的运行依赖包如下：
- 通过JDBC访问Spark SQL样例工程（Scala）
  - commons-collections-\<version\>.jar
  
  - commons-configuration-\<version\>.jar
  
  - commons-io-\<version\>.jar
  
  - commons-lang-\<version\>.jar
  
  - commons-logging-\<version\>.jar
  
  - guava-\<version\>.jar
  
  - hadoop-auth-\<version\>.jar
  
  - hadoop-common-\<version\>.jar
  
  - hadoop-mapreduce-client-core-\<version\>.jar
  
  - hive-exec-\<version\>.spark2.jar
  
  - hive-jdbc-\<version\>.spark2.jar
  
  - hive-metastore-\<version\>.spark2.jar
  
  - hive-service-\<version\>.spark2.jar
  
  - httpclient-\<version\>.jar
  
  - httpcore-\<version\>.jar
  
  - libthrift-\<version\>.jar
  
  - log4j-\<version\>.jar
  
  - slf4j-api-\<version\>.jar
  
  - zookeeper-\<version\>.jar
  
  - scala-library-\<version\>.jar
   

- 通过JDBC访问Spark SQL样例工程（Java）
  - commons-collections-\<version\>.jar
  
  - commons-configuration-\<version\>.jar
  
  - commons-io-\<version\>.jar
  
  - commons-lang-\<version\>.jar
  
  - commons-logging-\<version\>.jar
  
  - guava-\<version\>.jar
  
  - hadoop-auth-\<version\>.jar
  
  - hadoop-common-\<version\>.jar
  
  - hadoop-mapreduce-client-core-\<version\>.jar
  
  - hive-exec-\<version\>.spark2.jar
  
  - hive-jdbc-\<version\>.spark2.jar
  
  - hive-metastore-\<version\>.spark2.jar
  
  - hive-service-\<version\>.spark2.jar
  
  - httpclient-\<version\>.jar
  
  - httpcore-\<version\>.jar
  
  - libthrift-\<version\>.jar
  
  - log4j-\<version\>.jar
  
  - slf4j-api-\<version\>.jar
  
  - zookeeper-\<version\>.jar
   
 
