CDH 構(gòu)建Spark 應用程序

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

您可以使用Apache Maven構(gòu)建使用Java和Scala開發(fā)的Spark應用程序。

有關CDH 5組件的Maven屬性,請參閱使用CDH 5 Maven存儲庫。對于Kafka的Maven屬性,請參閱Kafka的Maven Artifacts

構(gòu)建應用

構(gòu)建Spark Scala和Java應用程序時遵循以下最佳實踐:

  • 編譯與您正在運行的同一版本的Spark。
  • 構(gòu)建包含所有依賴關系的單個程序集JAR(“Uber”JAR)。在Maven中,添加Maven組件插件來構(gòu)建一個包含所有依賴關系的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>

該插件在構(gòu)建期間管理所有可用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>

構(gòu)建可重用模塊

在Spark shell中使用現(xiàn)有的Scala和Java類需要有效的部署過程和依賴管理。為了簡單和可靠地重用Scala和Java類以及完整的第三方庫,您可以使用module ,這是一個由Maven創(chuàng)建的獨立工件。這個模塊可以被多個用戶共享。本主題演示如何使用Maven創(chuàng)建一個包含所有依賴關系的模塊。

創(chuàng)建一個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應用程序的環(huán)境選項卡((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".

有關示例,請參閱重新分配類

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容