文档首页 > > 开发指南> Spark应用开发> 调测程序> 编包并运行程序

编包并运行程序

分享
更新时间: 2020/03/31 GMT+08:00

操作场景

在程序代码完成开发后,您可以将打包好的jar包上传至Linux客户端环境中运行应用。使用Scala或Java语言开发的应用程序在Spark客户端的运行步骤是一样的。

  • Spark应用程序只支持在Linux环境下运行,不支持在Windows环境下运行。
  • 使用Python开发的Spark应用程序无需打包成jar,只需将样例工程拷贝到编译机器上即可。

操作步骤

  1. 在工程目录下执行mvn package命令打出jar包,在工程目录target目录下获取,比如:FemaleInfoCollection.jar
  2. 1中生成的Jar包(如CollectFemaleInfo.jar)拷贝到Spark运行环境下(即Spark客户端),如“/opt/female”。运行Spark应用程序。

    在Spark任务运行过程中禁止重启HDFS服务或者重启所有DataNode实例,否则可能会导致任务失败,并可能导致JobHistory部分数据丢失。

    • 运行Spark Core(Scala和Java)样例程序。

      进入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样例程序(Scala和Java语言)。

      进入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样例程序(Scala和Java语言)。

      进入Spark客户端目录,调用bin/spark-submit脚本运行代码。

      由于Spark Streaming Kafka的依赖包在客户端的存放路径与其他依赖包不同,如其他依赖包路径为“$SPARK_HOME/lib”,而Spark Streaming Kafka依赖包路径为“$SPARK_HOME/lib/streamingClient”。所以在运行应用程序时,需要在spark-submit命令中添加配置项,指定Spark Streaming Kafka的依赖包路径,如--jars $SPARK_HOME/lib/streamingClient/kafka-clients-0.8.2.1.jar,$SPARK_HOME/lib/streamingClient/kafka_2.11-0.8.2.1.jar,$SPARK_HOME/lib/streamingClient/spark-streaming-kafka-0-8_2.11-2.1.0.jar

      Spark Streaming Write To Print代码样例

      bin/spark-submit --master yarn --deploy-mode client --jars $SPARK_HOME/jars/streamingClient/kafka-clients-0.8.2.1.jar,$SPARK_HOME/jars/streamingClient/kafka_2.11-0.8.2.1.jar,$SPARK_HOME/jars/streamingClient/spark-streaming-kafka-0-8_2.11-2.1.0.jar --class com.huawei.bigdata.spark.examples.FemaleInfoCollectionPrint /opt/female/FemaleInfoCollectionPrint.jar <checkPointDir> <batchTime> <topics> <brokers>

      • --jars中的jar版本名称根据集群实际情况而定。
      • brokers格式为brokerIp:9092。

      Spark Streaming Write To Kafka代码样例

      bin/spark-submit --master yarn --deploy-mode client --jars $SPARK_HOME/jars/streamingClient/kafka-clients-0.8.2.1.jar,$SPARK_HOME/jars/streamingClient/kafka_2.11-0.8.2.1.jar,$SPARK_HOME/jars/streamingClient/spark-streaming-kafka-0-8_2.11-2.1.0.jar --

      class com.huawei.bigdata.spark.examples.DstreamKafkaWriter /opt/female/SparkStreamingExample-1.0.jar <groupId> <brokers> <topic>

    • 运行“通过JDBC访问Spark SQL”样例程序(Scala和Java语言)。

      进入Spark客户端目录,使用java -cp命令运行代码。

      java -cp ${SPARK_HOME}/jars/*:${SPARK_HOME}/conf:/opt/female/SparkThriftServerJavaExample-1.0.jar com.huawei.bigdata.spark.examples.ThriftServerQueriesTest ${SPARK_HOME}/conf/hive-site.xml ${SPARK_HOME}/conf/spark-defaults.conf

      普通集群需要注释掉安全配置部分代码,详情请参见22

      上面的命令行中,您可以根据不同样例工程,最小化选择其对应的运行依赖包。样例工程对应的运行依赖包详情,请参见1

    • 运行“Spark on HBase”样例程序(Scala和Java语言)。

      进入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>

      spark任务在连接hbase读写数据的时候,如果开启了kerberos认证,需要将客户端的配置文件“spark-defaults.conf”中的配置项spark.yarn.security.credentials.hbase.enabled置为true。所有连接hbase读写数据spark任务均需修改该配置。

    • 运行Spark HBase to HBase样例程序(Scala和Java语言)。

      进入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样例程序(Scala和Java语言)。

      进入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样例程序(Scala和Java语言)。

      进入Spark客户端目录,调用bin/spark-submit脚本运行代码。

      在运行样例程序时需要指定<checkPointDir><topic><brokerList>,其中<checkPointDir>指应用程序结果备份到HDFS的路径,<topic>指读取kafka上的topic名称,<brokerList>指Kafka服务器IP地址。

      由于Spark Streaming Kafka的依赖包在客户端的存放路径与其他依赖包不同,如其他依赖包路径为“$SPARK_HOME/lib”,而Spark Streaming Kafka依赖包路径为“$SPARK_HOME/lib/streamingClient”。所以在运行应用程序时,需要在spark-submit命令中添加配置项,指定Spark Streaming Kafka的依赖包路径,如--jars $SPARK_HOME/jars/streamingClient/kafka-clients-0.8.2.1.jar,$SPARK_HOME/jars/streamingClient/kafka_2.11-0.8.2.1.jar,$SPARK_HOME/jars/streamingClient/spark-streaming-kafka-0-8_2.11-2.1.0.jar

      Spark Streaming To HBase代码样例

      bin/spark-submit --master yarn --deploy-mode client --jars $SPARK_HOME/jars/streamingClient/kafka-clients-0.8.2.1.jar,$SPARK_HOME/jars/streamingClient/kafka_2.11-0.8.2.1.jar,$SPARK_HOME/jars/streamingClient/spark-streaming-kafka-0-8_2.11-2.1.0.jar --class com.huawei.bigdata.spark.examples.streaming.SparkOnStreamingToHbase /opt/female/FemaleInfoCollectionPrint.jar <checkPointDir> <topic> <brokerList>

      • --jars中的jar名称根据集群实际情况而定。
      • brokerlist格式为brokerIp:9092。
    • 运行Spark Streaming 对接Kafka0-10样例程序(Scala和Java语言)。

      进入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-0.10.0.0.jar,$SPARK_HOME/jars/streamingClient010/kafka_2.10-0.10.0.0.jar,$SPARK_HOME/jars/streamingClient010/spark-streaming-kafka-0-10_2.11-2.1.0.jar --class com.huawei.bigdata.spark.examples.SecurityKafkaWordCount /opt/SparkStreamingKafka010JavaExample-1.0.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-0.10.0.0.jar,$SPARK_HOME/jars/streamingClient010/kafka_2.10-0.10.0.0.jar,$SPARK_HOME/jars/streamingClient010/spark-streaming-kafka-0-10_2.11-2.1.0.jar --class com.huawei.bigdata.spark.examples.SecurityKafkaWordCount /opt/SparkStreamingKafka010JavaExample-1.0.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-0.10.0.0.jar,$SPARK_HOME/jars/streamingClient010/kafka_2.10-0.10.0.0.jar,$SPARK_HOME/jars/streamingClient010/spark-streaming-kafka-0-10_2.11-2.1.0.jar --class com.huawei.bigdata.spark.examples.JavaDstreamKafkaWriter /opt/JavaDstreamKafkaWriter.jar <checkPointDir> <brokers> <topics>

    • 运行Spark Structured Streaming样例程序(Scala和Java语言)。

      进入Spark客户端的conf目录下,调用spark-submit脚本运行代码。

      在运行样例程序时需要指定<brokers> <subscribe-type> <topic> <protocol> <service> <domain>,其中<brokers>指获取元数据的Kafka地址,<subscribe-type>指Kafka订阅类型,<topic>指读取Kafka上的topic名称,<protocol>指安全访问协议,<service>指kerberos服务名称,<domain>指kerberos域名。

      普通集群需要注释掉配置kafka安全协议部分代码,详情请参见Java样例代码Scala样例代码章节中的说明部分。

      由于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-0.10.0.0.jar,$SPARK_HOME/jars/streamingClient010/kafka_2.10-0.10.0.0.jar,$SPARK_HOME/jars/streamingClient010/spark-sql-kafka-0-10_2.11-2.1.0.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-1.1.0-mrs-1.9.0.jar,$SPARK_HOME/jars/streamingClient010/kafka_2.11-1.1.0-mrs-1.9.0.jar,$SPARK_HOME/jars/streamingClient010/spark-sql-kafka-0-10_2.11-2.2.2-mrs-1.9.0.jar --class com.huawei.bigdata.spark.examples.SecurityKafkaWordCount /root/jars/SparkStructuredStreamingJavaExample-1.0.jar <brokers> <subscribe-type> <topic> <protocol> <service> <domain>

      • 普通集群任务提交命令:

        spark-submit --master yarn --deploy-mode client --jars $SPARK_HOME/jars/streamingClient010/kafka-clients-1.1.0-mrs-1.9.0.jar,$SPARK_HOME/jars/streamingClient010/kafka_2.11-1.1.0-mrs-1.9.0.jar,$SPARK_HOME/jars/streamingClient010/spark-sql-kafka-0-10_2.11-2.2.2-mrs-1.9.0.jar --class com.huawei.bigdata.spark.examples.SecurityKafkaWordCount /root/jars/SparkStructuredStreamingJavaExample-1.0.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语言开发的应用程序。

      进入Spark客户端目录,调用bin/spark-submit脚本运行代码。

      其中,<inputPath>指HDFS文件系统中input的路径。

      由于样例代码中未给出认证信息,请在执行应用程序时通过配置项“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应用程序。

      java -cp $SPARK_HOME/jars/*:{JAR_PATH} com.huawei.bigdata.spark.examples.SparkLauncherExample yarn-client {TARGET_JAR_PATH} { TARGET_JAR_MAIN_CLASS} {args}

      • 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
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问