spark源码编译

2018-02-03  本文已影响0人  Sx_Ren

如果官方给的安装包不能满足我们生产环境的要求又或者我们基于自己的需求修改了spark源码,那么我们就需要对spark源码重新编译打包,相关方法和命令官网也写的特别清楚,我们只需要安装官网一步步操作即可,本文基于spark 2.1.0对源码进行编译和打包。

前置要求
build

关于构建官网给了两种方式,分别是./build/mvn和./dev/make-distribution.sh,其实是maven源码包里给内置了安装了一个maven,直接使用mvn命令操作即可:

--name指定最后生成的压缩包的名称,--tgz指定压缩格式,-P是激活一些profile,其实本质上还是调用mvn相关命令,只不过spark给我们封装了一下,注意如果你想打包成一个可发布版的安装包,那么你需要使用./dev/make-distribution.sh这个命令,具体怎么封装其实看下代码就知道了,打开./dev/make-distribution.sh文件,可以找到如下几处,一看就明白了:

压缩格式: 
case $1 in
    --tgz)
    MAKE   _TGZ=true

前置要求里配置的:
export MAVEN_OPTS="${MAVEN_OPTS:--Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m}"

去掉测试代码打包:
BUILD_COMMAND=("$MVN" -T 1C clean package -DskipTests $@)

打包名字全称,从如下代码可看出最后全名是这么来的spark-$VERSION-bin-$NAME.tgz,比如我打包完名字是:spark-2.1.0-bin-2.6.0-cdh5.7.0.tgz
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

To create a Spark distribution like those distributed by the Spark Downloads page, and that is laid out so as to be runnable, use ./dev/make-distribution.sh in the project root directory.

如果不知道怎么使用可以通过./dev/make-distribution.sh --help可以查看关于此命令的帮助

默认spark是基于Hadoop 2.2.0构建的,所以如果你要使用其他版本或者说从其他版本的hdfs读取数据,那么你需要使用hadoop.version声明版本号,hadoop版本和对应要激活的profile对应关系是这样的:


hadoop version->profile

Note that support for versions of Hadoop before 2.6 are deprecated as of Spark 2.1.0 and may be removed in Spark 2.2.0.
如果你需要使用yarn,那么要激活yarn的profile,默认yarn的版本跟hadoop版本是一样,不需要单独声明,这一点从上边pom.xml摘的几处代码那里也可以看出,但是有时候你可能需要yarn的版本不同于hdfs版本,那么就需要使用yarn.version显示声明yarn版本,spark仅支持2.2.0及以上的yarn版本。
除了激活hadoop相关组件,还可以激活比如Hive、JDBC、Mesos 等等

Spark源码编译中的坑:

首先,如果在编译过程中,看到的异常信息不是太明显或者说看不太懂,可以在编译命令后 -X,就能看到更详细的编译信息
坑一:jar包down不下来
pom.xml添加cdh版的maven仓库
<repository>
<id>cloudera</id>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</repository>
坑二:内存报错
export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m -XX:MaxPermSize=512M"
其实make-distribution.sh里面默认已经加上了这一句
注意点:阿里云的机器,机器内存可能是有限的,建议VM至少2-4G
坑三:
如果编译的scala版本是2.10
./dev/change-scala-version.sh 2.10
./dev/change-scala-version.sh 2.11
坑四:
was cached in the local repository,resolution will not be reattempted until the update interval of nexus has ........这种特别常见,以前使用nexus的maven私服的时候如果网不好或者镜像源不好就会出现xxx.lastUpdated文件
解决方式:

上一篇 下一篇

猜你喜欢

热点阅读