继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

windos下spark2.3.2源码编译

慕的地10843
关注TA
已关注
手记 1081
粉丝 200
获赞 962

当时在学习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

webp


执行命令

./build/mvn -DskipTests clean package

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

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


webp


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


webp


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

IntelliJ运行编译后的代码

  • 打开IntelliJ idea open 编译过后的源代码,等待加载indexing,不要选import sbt project

  • 找到org.apache.spark.examples中的一个example添加本地方法,测试运行。


    webp

    image.png

官网中的提示:

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


    webp

  • 有一些模块路径是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改模块。


      webp

  • 执行测试类的时候出现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}"



作者:梧上擎天
链接:https://www.jianshu.com/p/be462368503f


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP