Spark构建

使用Maven构建Spark需要Maven 3.0.4+Java 6 +

注意: 使用Java 7+构建Spark生成的JAR,前期使用Java 6构建的程序无法识别。如果有这种问题,还是使用Java 6来构建吧。

使用build/mvn构建

为了方便从源代码构建和部署, Sparkbuild/目录下封装有Maven的独立安装脚本。这个脚本将自动下载和安装所有必要的构建需求(Maven Scala Zinc ),下载后就存放在build/目录下。 为了确保构建所需要的合适的版本,不管之前是否已经安装有其他版本,maven都会存放一份构建所对应版本的ScalaZinc副本。执行build/mvn执行maven的命令差不多,目的是方便从maven的构建转换过来。下面是一个构建Spark的例子:

build/mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -DskipTests clean package

其他构建示例后面会看到。

设置Maven的内存使用情况

如果需要设置 MAVEN_OPTS 使Maven使用更多的内存  推荐以下设置:

export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"

如果不进行设置,可能会看到下面的错误:              

[INFO] Compiling 203 Scala sources and 9 Java sources to /Users/me/Development/spark/core/target/scala-2.10/classes...
[ERROR] PermGen space -> [Help 1]
 
[INFO] Compiling 203 Scala sources and 9 Java sources to /Users/me/Development/spark/core/target/scala-2.10/classes...
[ERROR] Java heap space -> [Help 1]

通过设置上面所说 MAVEN_OPTS 项可以解决这个问题

注意: 对于Java 8+这一步不是必需的。 

如果使用 build/mvn 而且MAVEN_OPTS 没有设置,脚本将自动为你进行设置。

指定Hadoop版本

因为HDFS的版本之间的协议并不兼容,如果想从HDFS读取数据,需要根据特定的HDFS版本进行构建。 可以通过“hadoop.version属性来进行设置。如果没有设置这个属性,Spark默认根据Hadoop 1.0.4版本进行构建。但请注意,特定的Hadoop版本构建需要一些对应的配置文件:

Hadoop版本

配置文件需要

0.23.x

hadoop - 0.23

1.x to 2.1.x

(none)

2.2.x

hadoop - 2.2

2.3.x

hadoop - 2.3

2.4.x

hadoop - 2.4

对于Apache Hadoop1.x版本,Cloudera CDH “mr1”分布版,以及其他不带yarnHadoop版本,使用如下配置:

# Apache Hadoop 1.2.1
mvn -Dhadoop.version=1.2.1 -DskipTests clean package
 
# Cloudera CDH 4.2.0 with MapReduce v1
mvn -Dhadoop.version=2.0.0-mr1-cdh4.2.0 -DskipTests clean package
 
# Apache Hadoop 0.23.x
mvn -Phadoop-0.23 -Dhadoop.version=0.23.7 -DskipTests clean package

如果需要“yarn.version”“hadoop.version”不相同,也通过设置”yarn.version属性来设置。 Spark只支持yarn 2.2.0以及之后的版本。

例子:

# Apache Hadoop 2.2.X
mvn -Pyarn -Phadoop-2.2 -Dhadoop.version=2.2.0 -DskipTests clean package
 
# Apache Hadoop 2.3.X
mvn -Pyarn -Phadoop-2.3 -Dhadoop.version=2.3.0 -DskipTests clean package
 
# Apache Hadoop 2.4.X or 2.5.X
mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=VERSION -DskipTests clean package
 
Versions of Hadoop after 2.5.X may or may not work with the -Phadoop-2.4 profile (they were
released after this version of Spark).
 
# Different versions of HDFS and YARN.
mvn -Pyarn -Phadoop-2.3 -Dhadoop.version=2.3.0 -Dyarn.version=2.2.0 -DskipTests clean package

构建HIVEJDBC支持

Spark也提供对Hive(包括JDBC ServerCLI)的支持,添加构建参数项: -Phive  Phive-thriftserver 即可。 默认情况下Spark将与Hive 0.13.1绑定构建。 当然也可以指定版本构建,Hive 0.12.0绑定构建使用构建参数项-Phive-0.12.0

# Apache Hadoop 2.4.X with Hive 13 support
mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -Phive -Phive-thriftserver -DskipTests clean package
 
# Apache Hadoop 2.4.X with Hive 12 support
mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -Phive -Phive-0.12.0 -Phive-thriftserver -DskipTests clean package

构建Scala 2.11

如果想使用Scala 2.11编译构建Spark,使用 -dscala-2.11 属性:

dev/change-version-to-2.11.sh
mvn -Pyarn -Phadoop-2.4 -Dscala-2.11 -DskipTests clean package

使用Scala 2.11构建Spark不支持一些特性,原因在于这些特性依赖于Scala 2.11的依赖关系,而不是只依赖于Scala 2.11自身。 具体来说,Spark的外部Kafka库和JDBC组件不支持使用Scala 2.11构建。

使用Maven测试Spark

默认情况下通过 ScalaTest Maven插件 进行测试。

有些测试需要在Spark先打好包才能进行,所以大多数情况下第一次构建的时候都是加上-DskipTests参数项  下面是一个例子,一个正确的序列(构建、测试):

mvn -Pyarn -Phadoop-2.3 -DskipTests -Phive -Phive-thriftserver clean package
mvn -Pyarn -Phadoop-2.3 -Phive -Phive-thriftserver test

ScalaTest插件还支持只运行一个特定的测试套件,如下所示:

mvn -Dhadoop.version=... -DwildcardSuites=org.apache.spark.repl.ReplSuite test

持续编译

我们使用scala-maven-plugin来支持增量和持续编译。

mvn scala:cc

将会运行连续编译(例如:等待变化) 然而,这些还未经过广泛的测试。一些陷阱要注意:

·         它只扫描 src/main  src/test路径(详见文档 ),所以它只适合这种内部结构的某些子模块。

·         通常情况下, 某些子模块要想正常运行工作,需要在项目根目录下运行 mvn install进行编译.这是因为这些子模块需要通过spark-parent模块依赖于其他子模块)

因此,核心子模块的持续编译的完整流程如下:

mvninstall cd core $mvn scala:cc

使用IntelliJ IDEAEclipse构建Spark

使用IntelliJ IDEAEclipse构建Spark和故障排除的帮助文档,请参阅 IDE安装Wiki页面 

建筑Spark Debian软件包

注意:Debian软件包已被弃用,已经计划在Spark 1.4删除

Maven构建支持构建包含fat-jar,PySpark,必要的脚本和配置文件的Debian软件包。如下:

mvn -Pdeb -DskipTests clean package

执行命令之后debian软件包存放在assembly/target目录下. 软件包被添加了短提交散列文件名称,以便可以区分独立快照(SNAPSHOT)版本。

运行Java 8测试套件

只运行Java 8测试如下:

mvn install -DskipTests -Pjava8-tests

-Pjava8-tests被设置时,无论-DskipTests是否设置,都将运行Java8测试。当然运行这些测试之前,系统必须安装有JDK 8 如果安装了JDK 8但它不是系统默认,您可以设置JAVA_HOME指向JDK 8

构建YARN上的PySpark

Yarn上的PySpark仅支持用Maven构建。 此外,基于Red Hat的操作系统构建时会出现问题( spark-1753 ) 如果你想在Red Hat操作系统上运行Yarn集群上的PySpark,建议在其他地方构建jar, 然后上传到集群。具体原因正在排查中。

构建没有Hadoop依赖的Yarn

默认情况下, mvn package 打包包括Spark的所有依赖,包括Hadoop和其它的一些相关项目。 对于Yarn部署,这将导致在executor类路径上出现多个版本。在Spark构建包和每个节点上的yarn.application.classpath会出现各自的版本。 通过使用hadoop-provided配置构建不会包括Hadoop以及相关项目,例如ZooKeeper Hadoop本身。

使用SBT构建

构建Spark, 官方推荐Maven,构建参考。但SBT支持日常开发,因为它可以提供更快的迭代编译。更高级的开发人员可能希望使用SBT

SBT构建基于Maven POM文件,所以Maven配置文件和变量同样适用于SBT构建。 例如:

build/sbt -Pyarn -Phadoop-2.3 assembly

测试与SBT

有些测试需要先构建Spark,所以一般先运行build/sbt 下面是一个例子,一个正确的序列(构建、测试):

build/sbt -Pyarn -Phadoop-2.3 -Phive -Phive-thriftserver assembly
build/sbt -Pyarn -Phadoop-2.3 -Phive -Phive-thriftserver test

只运行一个特定的测试套件如下:

build/sbt -Pyarn -Phadoop-2.3 -Phive -Phive-thriftserver "test-only org.apache.spark.repl.ReplSuite"

运行测试套件的一个特定的子项目如下:

build/sbt -Pyarn -Phadoop-2.3 -Phive -Phive-thriftserver core/test

使用Zinc加快编译

Zinc 是一个长期运行的服务器版本的SBT增量 编译器。 当作为后台进程在本地运行时,它可以加快基于Scala的项目编辑速度,例如Spark。经常使用Maven重新编译Spark的开发人员应该会对Zinc感兴趣。 Zinc项目网站有Zinc构建和运行的介绍. OS X用户可以使用 brew install zinc来安装。

如果使用build/mvn 打包 zinc 自动会被下载并被用于所有的构建. 这个过程在第一次调用build/mvn时自动启动,如果 ZINC_PORT环境变量没有设置,默认绑定3030端口。可以随时通过 build/zinc-<version>/bin/zinc –shutdown来关掉Zinc,每次调用build/mvn时它又会自动重启。


你可能感兴趣的:(spark构建)