翻譯: 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項目
- 使用Maven生成項目目錄:
$ mvn archetype:generate -DgroupId=com.mycompany -DartifactId=mylibrary \
-DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
下載并部署第三方庫
- 為所有未通過Maven Central提供的第三方庫準??備一個位置,但該項目需要該位置:
$ mkdir libs
$ cd libs
- 下載所需的工件。
- 使用Maven部署庫JAR。
- 將該庫添加到POM文件的依賴項部分。
- 對每個庫重復步驟2-4。例如,要添加JIDT庫:
- 下載并解壓縮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
- 部署庫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
- 將該庫添加到POM文件的依賴項部分:
<dependency>
<groupId>org.jlizier.infodynamics</groupId>
<artifactId>infodynamics</artifactId>
<version>1.3</version>
</dependency>
- 將Maven組件插件添加到pom.xml 文件plugins 標簽中 。
- 將庫JAR包裝在模塊中:
$ mvn clean package
運行并測試Spark模塊
- 運行Spark shell,在中提供模塊JAR --jars 選項:
$ spark-shell --jars target/mylibrary-1.0-SNAPSHOT-jar-with-dependencies.jar
-
在Spark Web UI應用程序的環(huán)境選項卡((http://driver_host:4040/environment/)中,驗證 spark.jars 屬性包含庫。例如:
圖片.png 在Spark shell中,測試您可以從第三方庫中導入一些必需的Java類。例如,如果您使用JIDT庫,請導入MatrixUtils:
$ spark-shell
...
scala> import infodynamics.utils.MatrixUtils;
用應用程序打包不同版本的庫
要在應用程序中使用與Spark附帶的庫版本不同的庫版本,請使用Apache Maven Shade插件。這個過程在技術上被稱為“重定位”,并且通常稱為"shading".
有關示例,請參閱重新分配類。
