Spark源码编译

637 阅读2分钟

需求

  • 由于CDH中内置的Spark的版本较低,无法满足实际生产中的需要,故需要用Spark源码来自行编译出对应的CDH版本
  • 以CDH5官方文档为例:

一、源码准备

二、编译准备

  • 进入Spark最新文档:spark.apache.org/docs/latest…
  • 找到Building Spark,点击进入:
  • 编译要求(最低):
    • Apache Maven 3.6.3
    • Java 8
  • Apache Maven 3.6.3部署
    • 配置环境变量:
      • export M2_HOME=/XXXXX/apache-maven-3.6.3
        export MAVEN_HOME=/XXXXX/apache-maven-3.6.3
        export PATH=${M2_HOME}/bin:$PATH
        export PATH=${MAVEN_HOME}/bin:$PATH
        
    • 配置阿里云源:
      • vi /XXXXX/apache-maven-3.6.3/conf/settings.xml
      • <mirror>
          <id>alimaven</id>
          <name>aliyun maven</name>
          <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
          <mirrorOf>central</mirrorOf>
        </mirror>
        

三、编译解读

  • 采用build/mvn方式编译不会产生Spark安装包,我们这里采用Building a Runnable
  • 命令格式:(解压后源码主目录)./dev/make-distribution.sh --name custom-spark --pip --r --tgz -Psparkr -Phive -Phive-thriftserver -Pmesos -Pyarn -Pkubernetes
    • ./dev/make-distribution.sh:编译使用的命令脚本
    • --name:编译生成Spark包的名字
    • custom-spark:填CDH中Hadoop对应的版本 e.g. 2.6.4-cdh6.3.0
    • --pip:编Python语言(这里删掉)
    • --r:编R语言(这里删掉)
    • --tgz:生成tar.gz包
    • -Psparkr:这里删掉
    • -Pmesos:mesos平台(这里删掉)
    • -Pkubernetes:kubernetes平台(这里删掉)
  • 编译脚本(make-distribution.sh)解读:
    • 以下内容注释掉,自行定义,有效缩短编译时间
    • 增加内容:
      • # Spark版本号
        VERSION=2.4.7
        # Scala版本号  
        SCALA_VERSION=2.12.12
        # CDH-Hadoop版本号
        SPARK_HADOOP_VERSION=2.6.4-cdh6.3.0
        # 支持Hive
        SPARK_HIVE=1
        
  • Spark源码的pom文件默认没有CDH仓库
    • 修改主目录下的pom.xml文件:
      •   <repository>
            <id>cloudera</id>
            <url>https://repository.cloudera.com/artifactory/cloudera-repos</url>
          </repository>
        

四、 修改Scala版本(以Scala2.12.0为例)

  • 在Spark目录下运行:
    • ./dev/change-scala-version.sh 2.12
  • 在命令中添加字段:
    • -Dscala.version=2.12.0

五、编译命令

  • 命令(Spark目录下):
    • ./dev/change-scala-version.sh 2.12
    • ./dev/make-distribution.sh --name 2.6.4-cdh6.3.0 --tgz -Phive -Phive-thriftserver -Pyarn -Dscala.version=2.12.0
  • 成功结果:

六、排错指南

1. 资源下载镜像问题

  • maven配置了阿里云镜像源,但是Spark编辑中还是从默认源下载。
  • 修改pom.xml文件中<repository><pluginRepository>标签:
    •   <id>nexus-aliyun</id>
        <name>nexus-aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
      

2. 编译到Spark Project Core报错

  • 尝试降低Scala版本,然后重新编译