前置条件:
CentOS6.7
JDK1.7+
Maven 3.3.9
Spark2.1.0
1.到spark官网上下载spark2.1.0的源码
2.执行mkdir source
新建目录,在此目录下通过wget
下载源代码
wget https://archive.apache.org/dist/spark/spark-2.1.0/spark-2.1.0.tgz
3.在source目录下执行tar -zxvf spark-2.1.0.tgz
解压tgz代码包。
4.设置Maven的使用内存,默认的maven内存可能不够用
export MAVEN_OPTS="-Xmx2g XX:ReservedCodeCacheSize=512m"
5.使用mvn编译
-
由于HDFS不是协议兼容的,所以,编译Spark时候,需要指定特定的HDFS版本,
服务器上hadoop版本:
$ echo $HADOOP_HOME
/home/hadoop/app/hadoop-2.6.0-cdh5.7.0
由于服务器上的hadoop版本是
hadoop-2.6.0-cdh5.7.0
,所以,对应的Profile:hadoop-2.6
,
mvn
命令如下:
/build/mvn -Pyarn -Phadoop-2.6 -Dhadoop.version=hadoop-2.6.0-cdh5.7.0 -DskipTests clean package
如果,需要编译Hive和JDBC支持的话,需要添加profile
-Phive -Phive-thriftserver
在spark解压的源码根目录下执行最终的
mvn
命令:
/build/mvn -Pyarn -Phadoop-2.6 -Dhadoop.version=hadoop-2.6.0-cdh5.7.0 -Phive -Phive-thriftserver -DskipTests clean package
初次编译Spark,需要下载很多依赖,因此编译时间随网速情况而定,1~2小时甚至更久
6.编译一个可以运行的tgz包(推荐使用),在spark代码解压的根目录下执行命令:
./dev/make-distribution.sh \
--name 2.6.0-cdh5.7.0 \
--tgz \
-Pyarn -Phadoop-2.6 \
-Phive -Phive-thriftserver \
-Dhadoop.version=hadoop-2.6.0-cdh5.7.0
生成spark-2.1.0-bin-2.6.0-cdh5.7.0.tgz
。
7.Spark2.1.0默认支持的scala版本是2.11.8,如果想要使用2.10的话,编译前需要
./dev/change-scala-version.sh 2.10
-
注意1:
[ERROR] Failed to execute goal on project spark-launcher_2.11: Could not resolve dependencies for project org.apache.spark:spark-launcher_2.11:jar:2.1.0: Could not find artifact org.apache.hadoop:hadoop-client:jar:hadoop-2.6.0-cdh5.7.0 in central (https://repo1.maven.org/maven2) -> [Help 1]
那么需要在pom.xml里面配置:
<repository>
<id>cloudera</id>
<name>cloudera Repository</name>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</repository>
-
注意2:
was cached in the local repository,
resolution will not be reattemped until the update interval of nexus has
......
对策:
1.去仓库目录把 xxx.lastUpdated文件全部删除,重新执行maven命令
2.编译命令后面加上 -U
7.编译成功(VPN打开耗时45~46分钟):
8.在spark解压的源代码的根路径下可以看到编译成功的spark包,名称形如:
spark-2.1.0-bin-2.6.0-cdh5.7.0.tgz
(spark-spark版本号-bin-hadoop版本号-CDH社区版本号)
以上内容参考:http://spark.apache.org/docs/2.1.0/building-spark.html