1.前置要求
- java 8 +
- maven 3.5.4 +
- scala 2.11
2.下载 spark2.4 源码包
在spark官网 下载页面中选择对应的spark版本和源码包
[hadoop@hadoop000 softwore]$ wget https://archive.apache.org/dist/spark/spark-2.4.0/spark-2.4.0.tgz
[hadoop@hadoop000 softwore]$ tar -zxvf spark-2.4.0.tgz -C ~/app/
3.编译
3.1 修改配置文件
为了让编译速度得到提升 修改如下的配置文件;
3.1.1 vim ./dev/make-distribution.sh
#VERSION=$("$MVN" help:evaluate -Dexpression=project.version $@ 2>/dev/null\
# | grep -v "INFO"\
# | grep -v "WARNING"\
# | tail -n 1)
#SCALA_VERSION=$("$MVN" help:evaluate -Dexpression=scala.binary.version $@ 2>/dev/null\
# | grep -v "INFO"\
# | grep -v "WARNING"\
# | tail -n 1)
#SPARK_HADOOP_VERSION=$("$MVN" help:evaluate -Dexpression=hadoop.version $@ 2>/dev/null\
# | grep -v "INFO"\
# | grep -v "WARNING"\
# | tail -n 1)
#SPARK_HIVE=$("$MVN" help:evaluate -Dexpression=project.activeProfiles -pl sql/hive $@ 2>/dev/null\
# | grep -v "INFO"\
# | grep -v "WARNING"\
# | fgrep --count "<id>hive</id>";\
# # Reset exit status to 0, otherwise the script stops here if the last grep finds nothing\
# # because we use "set -o pipefail"
# echo -n)
# 为了让编译的时候跳过检测
VERSION=2.4.0 # spark 版本
SCALA_VERSION=2.11 # scala版本
SPARK_HADOOP_VERSION=2.6.0-cdh5.7.0 #对应的hadoop版本
SPARK_HIVE=1 # 支持的hive
3.1.1 vim ./pom.xml
修改远程仓库地址,(修改成阿里镜像地址,增加cdh镜像地址)
<repositories>
<repository>
<id>maven-ali</id>
<url>http://maven.aliyun.com/nexus/content/groups/public//</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</snapshots>
</repository>
<repository>
<id>cloudera</id>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</repository>
</repositories>
3.2 执行编译命令
./dev/make-distribution.sh --name 2.6.0-cdh5.7.0 --tgz -Phadoop-2.6 -Phive -Phive-thriftserver -Pyarn -Dhadoop.version=2.6.0-cdh5.7.0
3.2.1 编译命令分析
./dev/make-distribution.sh \
--name 2.6.0-cdh5.7.0\ # 指定的名字,对最后产生的tgz包名 有联系
--tgz \ # 编译之后打成 tgz 包
-Phadoop-2.6 \ # 支持 hadoop2.6
-Phive\ # 支持 hive
-Phive-thriftserver\ # 支持 hive-thriftserver
-Pyarn\ # 支持 yarn
-Dhadoop.version=2.6.0-cdh5.7.0 # 对应的 hadoop2.6 具体的版本号
可以看到,在编译命令的时候有一些 -P
-D
的参数指定,这些在 spark的pom.xml 都是有体现的;
首先,在 pom.xml 文件中 可以看到,spark2.4 版本是支持 hadoop2.6 ,2.7 ,3.1 的版本,然后看出来在对hadoop2.6支持并没有对应的版本;
然后在此处 找到了 对应的hadoop版本是2.6.5 但是我的是hadoop2.6.0-cdh5.7.0 所以,我在执行编译命令的时候
指定了 -Phadoop-2.6 和 -Dhadoop.version=2.6.0-cdh5.7.0
3.2.2 关于make-distribution.sh脚本
对于最后生成编译好的 spark-2.4.0-bin-2.6.0-cdh5.7.0.tgz 文件, 但是这个文件名是怎么来的呢;
在分析 ./dev/make-distribution.sh 这个脚本的时候
if [ "$MAKE_TGZ" == "true" ]; then
TARDIR_NAME=spark-$VERSION-bin-$NAME
TARDIR="$SPARK_HOME/$TARDIR_NAME"
rm -rf "$TARDIR"
cp -r "$DISTDIR" "$TARDIR"
tar czf "spark-$VERSION-bin-$NAME.tgz" -C "$SPARK_HOME" "$TARDIR_NAME"
rm -rf "$TARDIR"
fi
TARDIR_NAME=spark-$VERSION-bin-$NAME
-$NAME 就是我们传入的-name 参数
tar czf "spark-$VERSION-bin-$NAME.tgz" -C "$SPARK_HOME" "$TARDIR_NAME"
最后会把将编译的spark相关内容 打成 tgz包
参考文档: https://spark.apache.org/docs/latest/building-spark.html