CDH 构建Spark 应用程序

翻译: https://www.cloudera.com/documentation/enterprise/latest/topics/spark_building.html
版本: 5.14.2

您可以使用Apache Maven构建使用Java和Scala开发的Spark应用程序。

有关CDH 5组件的Maven属性,请参阅使用CDH 5 Maven存储库。对于Kafka的Maven属性,请参阅Kafka的Maven Artifacts。

构建应用

构建Spark Scala和Java应用程序时遵循以下最佳实践:

  • 编译与您正在运行的同一版本的Spark。
  • 构建包含所有依赖关系的单个程序集JAR(“Uber”JAR)。在Maven中,添加Maven组件插件来构建一个包含所有依赖关系的JAR:

  maven-assembly-plugin
  
    
      jar-with-dependencies
    
  
  
    
      make-assembly
      package
      
        single
      
    
  


该插件在构建期间管理所有可用JAR文件的合并过程。从程序集JAR中排除Spark,Hadoop和Kafka(CDH 5.5及更高版本)类,因为它们已在集群中可用,并且包含在运行时类路径中。在Maven中,使用作用域指定Spark,Hadoop和Kafka依赖项provided。例如:


  org.apache.spark
  spark-core_2.10
  1.5.0-cdh5.5.0
  provided

构建可重用模块

在Spark shell中使用现有的Scala和Java类需要有效的部署过程和依赖管理。为了简单和可靠地重用Scala和Java类以及完整的第三方库,您可以使用module ,这是一个由Maven创建的独立工件。这个模块可以被多个用户共享。本主题演示如何使用Maven创建一个包含所有依赖关系的模块。

创建一个Maven项目

  1. 使用Maven生成项目目录:
$ mvn archetype:generate -DgroupId=com.mycompany -DartifactId=mylibrary \
-DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

下载并部署第三方库

  1. 为所有未通过Maven Central提供的第三方库准​​备一个位置,但该项目需要该位置:
$ mkdir libs
$ cd libs
  1. 下载所需的工件。
  2. 使用Maven部署库JAR。
  3. 将该库添加到POM文件的依赖项部分。
  4. 对每个库重复步骤2-4。例如,要添加JIDT库:
    1. 下载并解压缩zip文件:
$ curl http://lizier.me/joseph/software/jidt/download.php?file=infodynamics-dist-1.3.zip > infodynamics-dist.1.3.zip
$ unzip infodynamics-dist-1.3.zip
  1. 部署库JAR:
$ mvn deploy:deploy-file \
-Durl=file:///HOME/.m2/repository -Dfile=libs/infodynamics.jar \
-DgroupId=org.jlizier.infodynamics -DartifactId=infodynamics -Dpackaging=jar -Dversion=1.3
  1. 将该库添加到POM文件的依赖项部分:

  org.jlizier.infodynamics
  infodynamics
  1.3


  1. 将Maven组件插件添加到pom.xml 文件plugins 标签中 。
  2. 将库JAR包装在模块中:
$ mvn clean package

运行并测试Spark模块

  1. 运行Spark shell,在中提供模块JAR --jars 选项:
$ spark-shell --jars target/mylibrary-1.0-SNAPSHOT-jar-with-dependencies.jar
  1. 在Spark Web UI应用程序的环境选项卡((http://driver_host:4040/environment/)中,验证 spark.jars 属性包含库。例如:

    CDH 构建Spark 应用程序_第1张图片
    图片.png

  2. 在Spark shell中,测试您可以从第三方库中导入一些必需的Java类。例如,如果您使用JIDT库,请导入MatrixUtils:

$ spark-shell
...
scala> import infodynamics.utils.MatrixUtils;

用应用程序打包不同版本的库

要在应用程序中使用与Spark附带的库版本不同的库版本,请使用Apache Maven Shade插件。这个过程在技术上被称为“重定位”,并且通常称为"shading".

有关示例,请参阅重新分配类。

你可能感兴趣的:(CDH 构建Spark 应用程序)