运维系列:01、Spark编译与打包

时间:2020-12-14 21:51:30

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
 
参考: