编译打包spark-1.6.0-cdh5.11.0-src详细过程及问题记录

简介
        要深入学习spark,阅读源码,修改源码,学会自己编译打包spark是必须迈过的一道坎。折腾了两天,先后编译打包了spark-1.6.0-cdh5.11.0-src,spark-1.6.0-cdh5.13.0-src版本,现在记录过程,及遇到的问题如下。

环境准备
          1.我编译的平台是CentOS7,并且能正常联网(如果你能越过那道高高的山岗,那么编译速度就大大的快了)。
            2.系统安装的Java环境是JDK7和Scala2.10.4。官网有说明,Java环境应该是7或者更高(推荐使用8,7也快过时了)。尽量不要使用Scala2.11,如果要使用则要做另外一个步骤,详见文末的官方编译参考文档。
            3.采用的是maven方式编译,因此准备maven软件:apache-maven-3.5.0。官网有说明,maven版本应该是3.3.3或者更高
        

软件下载
           2.源码下载: http://archive.cloudera.com/cdh5/cdh/5/   ,下载 spark-1.6.0-cdh5.11.0-src.tar.gz
           3.Scala下载: http://www.scala-lang.org/download/2.10.4.html

编译步骤
        1.安装maven,Scala。安装方式都类型,上传解压,修改环境变量。
                  
            2.jdk,Scala,maven等环境准备好后,上传源码解压。然后查看解压后的目录,发现有一个make-distribution.sh脚本,接下来要修改一下脚本:
vim make-distribution.sh
找到下面的片段,将其全部注释如下:
#VERSION=$("$MVN" help:evaluate -Dexpression=project.version $@ 2>/dev/null | grep -v "INFO" | tail -n 1)
#SCALA_VERSION=$("$MVN" help:evaluate -Dexpression=scala.binary.version $@ 2>/dev/null\
#    | grep -v "INFO"\
#    | tail -n 1)
#SPARK_HADOOP_VERSION=$("$MVN" help:evaluate -Dexpression=hadoop.version $@ 2>/dev/null\
#    | grep -v "INFO"\
#    | tail -n 1)
#SPARK_HIVE=$("$MVN" help:evaluate -Dexpression=project.activeProfiles -pl sql/hive $@ 2>/dev/null\
#    | grep -v "INFO"\
#    | 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=1.6.0
SPARK_HADOOP_VERSION=2.6.0-cdh5.11.0
SPARK_HIVE=1
SCALA_VERSION=2.10.4
 其中,VERSION代表spark版本,SPARK_HADOOP_VERSION代表Hadoop版本,SPARK_HIVE如果为1则代表需要支持hive,为0则不需要。SCALA_VERSION为Scala版本。这里的各种版本根据自己的需要自行对应。
这里修改脚本的目的,是为了避免进行版本检查,由自己指定版本,可以加快编译时间。
        
              3.修改完成后保存脚本。然后执行下面命令,避免内存溢出。
export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"
               
               4.然后执行如下编译命令
./make-distribution.sh --tgz -Pyarn -Phadoop-2.6.0-cdh5.11.0 -Dhadoop.version=2.6.0-cdh5.11.0 -Phive-1.1.0 -Phive-thriftserver
               然后就会自动下载许多的东东,如果一切顺利,最后在当前目录下,会生成一个spark-1.6.0-bin-2.6.0-cdh5.11.0.tgz文件。当然这是一切顺利,可是第一次编译基本不可能顺利,下面是其中一些问题的摘录。

遇到的问题及解决
           1 .下载文件或者依赖包时卡住。这是由于网络问题,可以ctrl+c停止编译,然后再执行以下编译命令,出现卡住不动就这样,多试几次,我重试了大概4,5次。轻功好的同学,翻山越岭,编译就顺畅多了。
               
              2。Hive-thriftserver编译失败。报错大致如下:
[error] /opt/spark-1.6.0-cdh5.11.0/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] /opt/spark-1.6.0-cdh5.11.0/sql/hive-thriftserver/src/main/scala/org/apache/spark/sql/hive/thriftserver/SparkExecuteStatementOperation.scala:252: method cancel overrides nothing.
[error] Note: the super classes of class SparkExecuteStatementOperation contain the following, non final members named cancel:
[error] def cancel(x$1: org.apache.hive.service.cli.OperationState): Unit
[error]   override def cancel(): Unit = {
[error]                ^
[error] /opt/spark-1.6.0-cdh5.11.0/sql/hive-thriftserver/src/main/scala/org/apache/spark/sql/hive/thriftserver/server/SparkSQLOperationManager.scala:42: method newExecuteStatementOperation overrides nothing.
[error] Note: the super classes of class SparkSQLOperationManager contain the following, non final members named newExecuteStatementOperation:
[error] 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
[error] Compile failed at Nov 1, 2017 3:45:20 PM [3.198s]
                    这个问题,cloudera官方社区给出的解释是不支持,下面是回复截图

                        解决办法是不编译他,修改一下编译命令,把-Phive-thriftserver参数删掉,如下:
./make-distribution.sh --tgz -Pyarn -Phadoop-2.6.0-cdh5.11.0 -Dhadoop.version=2.6.0-cdh5.11.0 -Phive-1.1.0
                
                3 . 在编译Spark Project External Kafka时可能会遇到 找不到包com.google.common,如下:
[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>
               
                4. Unable to find configuration file at location scalastyle-config.xml,解决办法: 将根目录下的scalastyle-config.xml拷贝到examples目录下去,这是因为pom.xml中定义的是scalastyle-maven-plugin插件从maven运行的当前目录查找该文件

参考链接:
                 http://www.imooc.com/article/18419
                 http://hainiubl.com/topics/18
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值