大数据源码编译系列——Spark编译

  |   0 评论   |   4,217 浏览


准备环境

JDK8

Maven

Ant

Git

GCC

Cmake

安装protobuf

编译Spark

CDH发行版下载地址

准备文件

[root@nn1 native]# cd /usr/local/src/
[root@nn1  src]# wget http://archive.cloudera.com/cdh5/cdh/5/spark-1.6.0-cdh5.11.1-src.tar.gz
[root@nn1 src]# tar zxvf spark-1.6.0-cdh5.11.1-src.tar.gz -C /usr/local/src/
[root@nn1 src]# cd spark-1.6.0-cdh5.11.1

修改Spark依赖的JDK版本

[root@nn1 spark-1.6.0-cdh5.11.1]# sed -i "s/1.7/1.8/g" `grep java.version -rl /usr/local/src/spark-1.6.0-cdh5.11.1/pom.xml

否则会报以下错误

[WARNING] Rule 1: org.apache.maven.plugins.enforcer.RequireJavaVersion failed with message:
Detected JDK Version: 1.8.0-131 is not in the allowed range [1.7.0,1.7.1000}].

修改Spark依赖的大数据组件版本

包括Hadoop、Hive、HBase、Flume-NG

我这里由于同属一个CDH发行版本,版本号就是我用的,所以不用修改了

image.png

安装Scala

选择版本

使用的Scala版本可根据自身选择,我这里选择scala-2.10

scala-2.10对应的版本是2.10.5

scala-2.11对应的版本是2.11.8

image.png

image.png

详细步骤参考《安装Scala

编译Spark

[root@nn1 spark-1.6.0-cdh5.11.1]# ./make-distribution.sh --with-tachyon --tgz -Pyarn -Pdoclint-java8-disable -Pscala-2.10 -Phadoop-provided -DskipTests

编译结果


[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] Spark Project Parent POM ........................... SUCCESS [  6.872 s]
[INFO] Spark Project Test Tags ............................ SUCCESS [ 33.193 s]
[INFO] Spark Project Launcher ............................. SUCCESS [ 24.732 s]
[INFO] Spark Project Networking ........................... SUCCESS [ 22.672 s]
[INFO] Spark Project Shuffle Streaming Service ............ SUCCESS [ 13.220 s]
[INFO] Spark Project Unsafe ............................... SUCCESS [ 21.834 s]
[INFO] Spark Project Core ................................. SUCCESS [06:39 min]
[INFO] Spark Project Bagel ................................ SUCCESS [ 10.670 s]
[INFO] Spark Project GraphX ............................... SUCCESS [ 34.205 s]
[INFO] Spark Project Streaming ............................ SUCCESS [01:22 min]
[INFO] Spark Project Catalyst ............................. SUCCESS [01:57 min]
[INFO] Spark Project SQL .................................. SUCCESS [02:34 min]
[INFO] Spark Project ML Library ........................... SUCCESS [03:46 min]
[INFO] Spark Project Tools ................................ SUCCESS [ 10.319 s]
[INFO] Spark Project Hive ................................. SUCCESS [02:39 min]
[INFO] Spark Project Docker Integration Tests ............. SUCCESS [ 10.977 s]
[INFO] Spark Project External Flume Sink .................. SUCCESS [ 15.888 s]
[INFO] Spark Project External Flume ....................... SUCCESS [ 30.668 s]
[INFO] Spark Project External Kafka ....................... SUCCESS [ 23.667 s]
[INFO] Spark Project REPL ................................. SUCCESS [ 26.292 s]
[INFO] Cloudera Spark Project Lineage ..................... SUCCESS [ 23.827 s]
[INFO] Spark Project YARN Shuffle Service ................. SUCCESS [ 11.501 s]
[INFO] Spark Project YARN ................................. SUCCESS [ 35.307 s]
[INFO] Spark Project Assembly ............................. SUCCESS [02:56 min]
[INFO] Spark Project External Twitter ..................... SUCCESS [ 19.340 s]
[INFO] Spark Project External MQTT ........................ SUCCESS [01:14 min]
[INFO] Spark Project External MQTT Assembly ............... SUCCESS [ 19.941 s]
[INFO] Spark Project External ZeroMQ ...................... SUCCESS [ 22.173 s]
[INFO] Spark Project Examples ............................. SUCCESS [03:09 min]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 33:20 min
[INFO] Finished at: 2017-06-24T22:44:02-07:00
[INFO] Final Memory: 438M/1642M
[INFO] ------------------------------------------------------------------------

查看编译生成的文件

[root@nn1 spark-1.6.0-cdh5.11.1]# ll spark-1.6.0-cdh5.11.1-bin-2.6.0-cdh5.11.1.tgz
-rw-r--r--. 1 root root 288341033 Jun 24 22:45 spark-1.6.0-cdh5.11.1-bin-2.6.0-cdh5.11.1.tgz
[root@nn1 spark-1.6.0-cdh5.11.1]# ll dist/
total 1408
drwxr-xr-x. 2 root root    4096 Jun 24 22:44 bin
-rw-r--r--. 1 root root 1343562 Jun 24 22:44 CHANGES.txt
drwxr-xr-x. 2 root root    4096 Jun 24 22:44 conf
drwxr-xr-x. 3 root root    4096 Jun 24 22:44 data
drwxr-xr-x. 3 root root    4096 Jun 24 22:44 ec2
drwxr-xr-x. 3 root root    4096 Jun 24 22:44 examples
drwxr-xr-x. 2 root root    4096 Jun 24 22:45 lib
-rw-r--r--. 1 root root   17352 Jun 24 22:44 LICENSE
drwxr-xr-x. 2 root root    4096 Jun 24 22:44 licenses
-rw-r--r--. 1 root root   23529 Jun 24 22:44 NOTICE
drwxr-xr-x. 6 root root    4096 Jun 24 22:44 python
-rw-r--r--. 1 root root    3359 Jun 24 22:44 README.md
-rw-r--r--. 1 root root     142 Jun 24 22:44 RELEASE
drwxr-xr-x. 2 root root    4096 Jun 24 22:44 sbin
drwxr-xr-x. 6 root root    4096 Jun 24 22:45 tachyon
[root@nn1 spark-1.6.0-cdh5.11.1]# ll dist/lib/
total 311012
-rw-r--r--. 1 root root   4468046 Jun 24 22:44 spark-1.6.0-cdh5.11.1-yarn-shuffle.jar
-rw-r--r--. 1 root root 149635995 Jun 24 22:44 spark-assembly-1.6.0-cdh5.11.1-hadoop2.6.0-cdh5.11.1.jar
-rw-r--r--. 1 root root 122815497 Jun 24 22:44 spark-examples-1.6.0-cdh5.11.1-hadoop2.6.0-cdh5.11.1.jar
-rw-r--r--. 1 root root  41549223 Jun 24 22:45 tachyon-assemblies-0.8.2-jar-with-dependencies.jar

可能遇到的错误

class XX needs to be abstract, since method cancel in class Operation of type (x$1: XX) is not defined

[WARNING] Zinc server is not available at port 3030 - reverting to normal incremental compile
[INFO] Using incremental compilation
[INFO] Compiling 13 Scala sources to /usr/local/src/spark-1.6.0-cdh5.11.1/sql/hive-thriftserver/target/scala-2.10/classes...
[ERROR] /usr/local/src/spark-1.6.0-cdh5.11.1/sql/hive-thriftserver/src/main/scala/org/apache/spark/sql/hive/thriftserver/SparkExecuteStatementOperation.scala:42: class SparkExecuteStatementOperation needs to be abstract, since method cancel in class Operation of type (x$1: org.apache.hive.service.cli.OperationState)Unit is not defined
[ERROR] private[hive] class SparkExecuteStatementOperation(
[ERROR]                     ^
[ERROR] /usr/local/src/spark-1.6.0-cdh5.11.1/sql/hive-thriftserver/src/main/scala/org/apache/spark/sql/hive/thriftserver/SparkExecuteStatementOperation.scala:252: method cancel overrides nothing.
Note: the super classes of class SparkExecuteStatementOperation contain the following, non final members named cancel:
def cancel(x$1: org.apache.hive.service.cli.OperationState): Unit
[ERROR]   override def cancel(): Unit = {
[ERROR]                ^
[ERROR] /usr/local/src/spark-1.6.0-cdh5.11.1/sql/hive-thriftserver/src/main/scala/org/apache/spark/sql/hive/thriftserver/server/SparkSQLOperationManager.scala:42: method newExecuteStatementOperation overrides nothing.
Note: the super classes of class SparkSQLOperationManager contain the following, non final members named newExecuteStatementOperation:
def newExecuteStatementOperation(x$1: org.apache.hive.service.cli.session.HiveSession,x$2: String,x$3: java.util.Map[String,String],x$4: Boolean,x$5: Long): org.apache.hive.service.cli.operation.ExecuteStatementOperation
[ERROR]   override def newExecuteStatementOperation(
[ERROR]                ^
[ERROR] three errors found

似乎是说hive-thriftserver不被支持,参见《Build failed for spark thriftserver - CDH5.10.0

解决办法

去掉-Phive-thriftserver


找不到包com.google.common

描述:在编译Spark Project External Kafka时可能会遇到

[ERROR] bad symbolic reference. A signature in Utils.class refers to term util
in package com.google.common which is not available.
It may be completely missing from the current classpath, or the version on
the classpath might be incompatible with the version used when compiling Utils.class.

解决办法

在spark-parent的pom.xml中加入依赖

<dependency>
 <groupId>com.google.guava</groupId>
 <artifactId>guava</artifactId>
 <version>18.0</version>
</dependency>

Unable to find configuration file at location scalastyle-config.xml

解决办法

将根目录下的scalastyle-config.xml拷贝到examples目录下去,这是因为pom.xml中定义的是scalastyle-maven-plugin插件从maven运行的当前目录查找该文件

OutOfMemoryError

export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"

 

./make-distribution.sh: line 173: cho: command not found

此时mvn命令已经执行成功,可以把这条命令注掉

 

Required file not found: scala-compiler-2.10.4.jar

Failed to execute goal net.alchim31.maven:scala-maven-plugin:3.2.2:compile (scala-compile-first) on project spark-launcher_2.10: Execution scala-compile-first of goal net.alchim31.maven:scala-maven-plugin:3.2.2:compile failed. CompileFailed.

 

解决方法:Shutdown zinc first

./build/zinc-<version>/bin/zinc -shutdown

参考链接:Building Spark with mvn fails


读后有收获可以支付宝请作者喝咖啡