1、SBT编译
vi project/SparkBuild.scala
修改仓库:
"Maven Repository" at "http://172.16.219.120:8080/nexus/content/groups/public/"
SPARK_HADOOP_VERSION=2.4.0.2.1.2.0-402 SPARK_YARN=true sbt/sbt clean assembly
2、MAVEN编译
export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"
mvn -Pyarn -Dhadoop.version=2.4.0.2.1.2.0-402 -Dyarn.version=2.4.0.2.1.2.0-402 -DskipTests clean package
3、编译打包
pox.xml
修改仓库:maven-repo --> <url>http://172.16.219.120:8080/nexus/content/groups/public/</url>
不带Hadoop依赖:hadoop-provided --> <activeByDefault>true</activeByDefault>
以上不用改,配置本地代理就行了……
编译完源代码后,虽然直接用编译后的目录再加以配置就可以运行spark,但是这时目录很庞大,又3G多吧,部署起来很不方便,所以需要生成部署包。
spark源码根目录下带有一个脚本文件make-distribution.sh可以生成部署包,其参数有:
--hadoop VERSION:打包时所用的Hadoop版本号,不加此参数时hadoop版本为1.0.4。
--with-yarn:是否支持Hadoop YARN,不加参数时为不支持yarn。
--with-hive:是否在Spark SQL 中支持hive,不加此参数时为不支持hive。
--skip-java-test:是否在编译的过程中略过java测试,不加此参数时为略过。
--with-tachyon:是否支持内存文件系统Tachyon,不加此参数时不支持tachyon。
--tgz:在根目录下生成 spark-$VERSION-bin.tgz,不加此参数时不生成tgz文件,只生成/dist目录。
--name NAME:和--tgz结合可以生成spark-$VERSION-bin-$NAME.tgz的部署包,不加此参数时NAME为hadoop的版本号。
如果要生成spark支持yarn、hadoop2.4.0.2.1.2.0-402的部署包,只需要将源代码复制到指定目录,进入该目录后运行:
./make-distribution.sh --hadoop 2.4.0.2.1.2.0-402--with-yarn --tgz --skip-java-test
如果要生成spark支持yarn、hive的部署包,只需要将源代码复制到指定目录,进入该目录后运行:
./make-distribution.sh --hadoop 2.4.0.2.1.2.0-402 --with-yarn --with-hive --tgz
如果要生成spark支持yarn、hadoop2.4.0.2.1.2.0-402、techyon的部署包,只需要将源代码复制到指定目录,进入该目录后运行:
./make-distribution.sh --hadoop 2.4.0.2.1.2.0-402 --with-yarn --with-tachyon --tgz
生成在部署包位于根目录下,文件名类似于spark-1.0.0-bin-2.4.0.2.1.2.0-402.tgz。
值得注意的是:make-distribution.sh已经带有Maven编译过程,所以不需要先编译再打包。
最新的1.1.0版本发生了变化
-Dyarn.version:类似于原来的--hadoop
-Pyarn:类似于原来的--with-yarn
-Phive:类似于原来的--with-hive
示例:
./make-distribution.sh --tgz --skip-java-test -Dyarn.version=2.4.0.2.1.4.0-632 -Dhadoop.version=2.4.0.2.1.4.0-632 -Pyarn
参考: