手记

Spark源码编译

前言:因为线上生产环境和实际业务需求的复杂性,不可避免地需要修改spark源码,重新编译并测试完成后应用于线上生产环境。本文主要介绍作者在Linux(centos 6.5)上重新编译spark-2.2.1源码的过程,以及部署编译环境所遇到的坑。

一. 下载源码

git clone git://github.com/apache/spark.git -b branch-2.2.1  (可能下载不到旧版本)

执行完成后,spark源码会下载在/home/${user_name}/spark目录。

也可通过以下方式获取指定版本源码包:
wget https://archive.apache.org/dist/spark/spark-2.2.1/spark-2.2.1.tgz

二. 编译源码

./build/mvn -Phadoop-2.7 -Pyarn -Dhadoop.version=2.7.3 -Phive -Phive-thriftserver clean package -Dmaven.test.skip=true

参数介绍:
-Phadoop:Hadoop版本号,默认版本2.6.5;
-Dhadoop.version: 同-Phadoop;
-Pyarn :是否支持Hadoop YARN;
-Phive:是否在Spark SQL 中支持hive,hive默认版本1.2.1;
-Phive-thriftserver:同-Phive;
-Dmaven.test.skip=true:不执行测试用例,也不编译测试用例类;

【填坑一】 SSL connect error
报错信息如下:

[root@cbas-virt-20 spark]# ./build/mvn -Phadoop-2.7 -Pyarn -Dhadoop.version=2.7.3 -Phive -Phive-thriftserver clean package -Dmaven.test.skip=trueexec: curl --progress-bar -L https://downloads.typesafe.com/zinc/0.3.15/zinc-0.3.15.tgzcurl: (35) SSL connect errorgzip: stdin: unexpected end of filetar: Child returned status 1tar: Error is not recoverable: exiting nowexec: curl --progress-bar -L https://downloads.typesafe.com/scala/2.11.8/scala-2.11.8.tgzcurl: (35) SSL connect errorgzip: stdin: unexpected end of filetar: Child returned status 1tar: Error is not recoverable: exiting now
./build/mvn: line 119: cd: /root/spark/build/scala-2.11.8/bin/../lib: 没有那个文件或目录
./build/mvn: line 120: cd: /root/spark/build/scala-2.11.8/bin/../lib: 没有那个文件或目录
./build/mvn: line 143: /root/spark/build/zinc-0.3.15/bin/zinc: 没有那个文件或目录
./build/mvn: line 145: /root/spark/build/zinc-0.3.15/bin/zinc: 没有那个文件或目录
Using `mvn` from path: /root/spark/build/apache-maven-3.3.9/bin/mvn

报错分析:
通过./build/mvn编译源码时,下载zinc-0.3.15和scala-2.11.8报错,编译服务器无法与https://downloads.typesafe.com建立SSL连接。
验证(通过wget下载):

[root@cbas-virt-20 ~]# wget https://downloads.typesafe.com/zinc/0.3.15/zinc-0.3.15.tgz--2018-04-24 13:46:02--  https://downloads.typesafe.com/zinc/0.3.15/zinc-0.3.15.tgz
正在解析主机 downloads.typesafe.com... 54.230.129.25, 54.230.129.53, 54.230.129.138, ...
正在连接 downloads.typesafe.com|54.230.129.25|:443... 已连接。
无法建立 SSL 连接。

解决方案:
进入./build/mvn修改对应url:

方案一:
curl --progress-bar -L http://downloads.typesafe.com/scala/2.11.8/scala-2.11.8.tgz
curl --progress-bar -L http://downloads.typesafe.com/zinc/0.3.15/zinc-0.3.15.tgz

方案二:
curl --progress-bar -L http://downloads.lightbend.com/scala/2.11.8/scala-2.11.8.tgz
curl --progress-bar -L http://downloads.lightbend.com/zinc/0.3.15/zinc-0.3.15.tgz

【填坑二】无效的源发行版
报错信息如下:

[INFO] Using zinc server for incremental compilation
[info] 'compiler-interface' not yet compiled for Scala 2.11.8. Compiling...
[info]   Compilation completed in 12.407 s
[warn] Pruning sources from previous analysis, due to incompatible CompileSetup.
[info] Compiling 2 Scala sources and 6 Java sources to /root/spark/common/tags/target/scala-2.11/classes...
[error] javac: 无效的源发行版: 1.8[error] 用法: javac <options> <source files>
[error] -help 用于列出可能的选项
[error] Compile failed at 2018-4-24 14:48:20 [14.062s]
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] Spark Project Parent POM ........................... SUCCESS [03:33 min]
[INFO] Spark Project Tags ................................. FAILURE [ 36.154 s]

报错分析:
JDK版本不对,spark-2.2.1编译不再支持JDK1.7,所有的编译和运行都只能在JDK1.8上进行。

解决方案:
从官网下载JDK1.8:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

mv jdk-8u171-linux-x64.tar.gz /usr/java/
tar -zxvf jdk-8u171-linux-x64.tar.gz
vim /etc/profile => export JAVA_HOME=/usr/java/jdk1.8.0_171
source /etc/profile
java -version
javac -version

如果发现Linux上的JDK并未更新为JDK1.8,需要再进行如下操作:

查看新下载的JDK是否在Linux JDK菜单中:
update-alternatives --config java
update-alternatives --config javac
如果不在,则按如下方式添加:
update-alternatives --install /usr/bin/java java /usr/java/jdk1.8.0_171/bin/java 300
update-alternatives --install /usr/bin/javac javac /usr/java/jdk1.8.0_171/bin/javac 300
再选择相应序号进行系统JDK版本切换(回车确认):
update-alternatives --config java
update-alternatives --config javac
验证:
java -version
javac -version

三. 编译成功确认

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] Spark Project Parent POM ........................... SUCCESS [  4.242 s]
[INFO] Spark Project Tags ................................. SUCCESS [  3.027 s]
[INFO] Spark Project Sketch ............................... SUCCESS [  9.362 s]
[INFO] Spark Project Local DB ............................. SUCCESS [  3.107 s]
[INFO] Spark Project Networking ........................... SUCCESS [  6.164 s]
[INFO] Spark Project Shuffle Streaming Service ............ SUCCESS [ 10.022 s]
[INFO] Spark Project Unsafe ............................... SUCCESS [  3.123 s]
[INFO] Spark Project Launcher ............................. SUCCESS [  5.299 s]
[INFO] Spark Project Core ................................. SUCCESS [01:31 min]
[INFO] Spark Project ML Local Library ..................... SUCCESS [02:34 min]
[INFO] Spark Project GraphX ............................... SUCCESS [ 23.556 s]
[INFO] Spark Project Streaming ............................ SUCCESS [ 31.368 s]
[INFO] Spark Project Catalyst ............................. SUCCESS [03:23 min]
[INFO] Spark Project SQL .................................. SUCCESS [05:03 min]
[INFO] Spark Project ML Library ........................... SUCCESS [01:35 min]
[INFO] Spark Project Tools ................................ SUCCESS [  9.692 s]
[INFO] Spark Project Hive ................................. SUCCESS [01:02 min]
[INFO] Spark Project REPL ................................. SUCCESS [  5.806 s]
[INFO] Spark Project YARN Shuffle Service ................. SUCCESS [ 12.565 s]
[INFO] Spark Project YARN ................................. SUCCESS [ 32.809 s]
[INFO] Spark Project Hive Thrift Server ................... SUCCESS [ 24.966 s]
[INFO] Spark Project Assembly ............................. SUCCESS [  4.969 s]
[INFO] Spark Integration for Kafka 0.10 ................... SUCCESS [01:00 min]
[INFO] Kafka 0.10 Source for Structured Streaming ......... SUCCESS [ 15.672 s]
[INFO] Spark Project Examples ............................. SUCCESS [ 25.670 s]
[INFO] Spark Integration for Kafka 0.10 Assembly .......... SUCCESS [  5.885 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 20:10 min
[INFO] Finished at: 2018-04-24T19:37:26+08:00[INFO] Final Memory: 85M/1177M
[INFO] ------------------------------------------------------------------------



作者:伍柒大人_HQQ
链接:https://www.jianshu.com/p/4dc2c532f530


0人推荐
随时随地看视频
慕课网APP