美文网首页大数据Spark在简书
windos下spark2.3.2源码编译

windos下spark2.3.2源码编译

作者: 梧上擎天 | 来源:发表于2018-11-09 09:56 被阅读9次

    当时在学习spark的时候,编译过spark2.11源码,当时也遇到过不少坑,导致编译过程坎坷。时过境迁,目前spark的最新版本是spark2.3.2。这次跟着官网指导编译一下最新代码。


    前期注意事项

    • 本人系统环境是windows10,IDE 为idea2017
    • 本次编译是通过Maven编译,Maven版本为3.3.9,不用SBT编译
    • 自Spark 2.2.0起,对Java 7的支持已被删除!
    • 给Maven多配置一点内存,防止编译期间OOM异常,官网推荐

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

    ReservedCodeCacheSize设置是可选的,但建议都加上否则可能出现警告或者异常。

    [INFO] Compiling 203 Scala sources and 9 Java sources to /Users/me/Development/spark/core/target/scala-2.11/classes...
    [ERROR] Java heap space -> [Help 1]

    建议修改maven的安装目录下的conf/settings.xml文件中添加如下配置,以达到jar下载加速的效果

     <!-- 阿里云中央仓库 -->
     <mirrors>
         <mirror>
          <id>alimaven</id>
          <name>aliyun maven</name>
          <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
          <mirrorOf>central</mirrorOf>
        </mirror>
      </mirrors>
    

    构建

    去官网下载源码包

    http://spark.apache.org/downloads.html

    执行命令

    ./build/mvn -DskipTests clean package

    spark编译要在 bash环境下进行 如git的bash环境,否则可能报错

    开始编译 ,运行效果如下图:



    此期间别急。机器不好的,网不好的,稍安勿躁,阿弥陀佛,等就对了。



    37分钟后编译全部模块完成。

    IntelliJ运行编译后的代码

    • 打开IntelliJ idea open 编译过后的源代码,等待加载indexing,不要选import sbt project
    • 找到org.apache.spark.examples中的一个example添加本地方法,测试运行。


      image.png

    官网中的提示:

    • “Rebuild Project” 第一次编译项目的时候可能失败,点击这个按钮“Generate Sources and Update Folders For All Projects”


    • 有一些模块路径是idea识别不了的,需要手工选一下,在“Project Settings” 然后选中 “Modules” 模块。
      • spark-hive: add v0.13.1/src/main/scala
      • spark-streaming-flume-sink: add target\scala2.11\src_managed\main\compiled_avro
      • spark-catalyst: add target\scala-2.11\src_managed\main
        比如idea执行报错,无法找到SparkFlumeProtocol类,进入view=>tool window=>maven project中找到Spark Project External Flume Sink模块,右键选择Generate Sources and update Folders,并在lifecycle中compile改模块。


    • 执行测试类的时候出现Exception in thread "main" java.lang.NoClassDefFoundError: 错误
      解决方法:
      Menu -> File -> Project Structure -> Modules -> spark-examples_2.11 -> Dependencies 添加依赖 jars -> {spark dir}/spark/assembly/target/scala-2.11/jars/
    • 如果还碰到哪个模块导致找不到类在idea中选中单个maven模块重新mvn clean compile一下

    其他编译命令

    mvn 还可以加-P参数指定hadoop版本,指定构建Hive 、JDBC 、Mesos 、Kubernetes 、Kafka、Flume 的支持版本

    ./build/mvn -Pyarn -Phadoop-2.7 -Dhadoop.version=2.7.3 -DskipTests clean package
    ./build/mvn -Pyarn -Phive -Phive-thriftserver -DskipTests clean package
    ./build/mvn -Pmesos -DskipTests clean package
    ./build/mvn -Pkubernetes -DskipTests clean package
    ./build/mvn -Pkafka-0-8 -DskipTests clean package
    ./build/mvn -Pflume -DskipTests clean package

    指定单一模块进行构建

    如果修改了一个模块的源代码,想构建后跑起来的话,可以用-pl命令构建单个模块,节省大量时间。

    ./build/mvn -pl :spark-streaming_2.11 clean install

    官网还推荐用make-distribution.sh脚本继续打包编译

    ./dev/make-distribution.sh --name custom-spark --pip --r --tgz -Psparkr -Phadoop-2.7 -Phive -Phive-thriftserver -Pmesos -Pyarn -Pkubernetes

    ***bash环境下运行上面命令,这个脚本和mvn本质一样,但会帮助我们自动设置maven参数和jvm参数,如脚本中就有这段代码export MAVEN_OPTS="${MAVEN_OPTS:--Xmx2g -XX:ReservedCodeCacheSize=512m}"


    相关文章

      网友评论

        本文标题:windos下spark2.3.2源码编译

        本文链接:https://www.haomeiwen.com/subject/ppuwxqtx.html