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:
<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <configuration>
    <descriptorRefs>
      <descriptorRef>jar-with-dependencies</descriptorRef>
    </descriptorRefs>
  </configuration>
  <executions>
    <execution>
      <id>make-assembly</id>
      <phase>package</phase>
      <goals>
        <goal>single</goal>
      </goals>
    </execution>
  </executions>
</plugin>

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

<dependency>
  <groupId>org.apache.spark</groupId>
  <artifactId>spark-core_2.10</artifactId>
  <version>1.5.0-cdh5.5.0</version>
  <scope>provided</scope>
</dependency>

构建可重用模块

在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文件的依赖项部分:
<dependency>
  <groupId>org.jlizier.infodynamics</groupId>
  <artifactId>infodynamics</artifactId>
  <version>1.3</version>
</dependency>

  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 属性包含库。例如:

    图片.png

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

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

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

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

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容