Maven编译打包spark(2.1.0)源码及出现问题的解决方案(win7+Intellij IDEA)
原文:https://blog.****.net/u011464774/article/details/76704785
1、相关安装请参照:http://blog.****.net/u011464774/article/details/76697183
不要在intellij里配置spark这一步,这里是对spark源码编译,因此不需要这一步,其他安装不变。
2、下载spark源码,并解压
官网http://spark.apache.org/downloads.html
3、打开spark源码下的pom.xml文件,修改对应的java和intellij里的maven版本
4、打开intellij,inport Project
将saprk源码添加进来
选择Maven
勾选箭头指示的选项
添加yarn和hadoop2.4选项,其他保持默认
5、工程导入以后,点击右侧Maven Project,然后点击第二个按钮,Generate Sources and Update Folders For All Projects,点击后Maven会下载编译需要的源码,需要等待一段时间,长短依赖网络的好坏
6、此过程完成之后就可点击菜单的build进行编译,中间会出现一些问题,不要害怕,慢慢解决
问题1
解决方法:
问题2、
spark\external\flume-sink\src\main\scala\org\apache\spark\streaming\flume\sink\SparkAvroCallbackHandler.scala
Error:(45, 66) not found: type SparkFlumeProtocol
解决方案:有时需要重复进行几次
问题3、
\spark\sql\catalyst\src\main\scala\org\apache\spark\sql\catalyst\parser\AstBuilder.scala
Error:(34, 45) object SqlBaseParser is not a member of package org.apache.spark.sql.catalyst.parser
import org.apache.spark.sql.catalyst.parser.SqlBaseParser._
解决方案:
类似于问题2,请参照问题2的解决方案
一般解决这三个问题后就可以编译成功,不要管警告
问题4、关于用example里的例子测试的问题
解决方案:
这个问题是需要在example model里将编译打包的jar包添加进来。后面讲Maven编译打包
7、Maven编译打包
(1)检查Maven版本(在settings),并在pom.xml文件里修改
(2)检查scala包
版本保持一致,如果不一致,请删除后重新添加
编译打包
maven设置
-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m
添加到VM option:
按照下面操作步骤开始打包编译
如果前面的配置全部正确,这里就可以打包成功。
jar包在源码目录D:\Documents\spark-2.1.0\spark-2.1.0\assembly\target\scala-2.11\jars
如果修改了某一个包里的源代码,可以单独编译这个包,方法和打包全部类似,只是选中你想要的包,然后进行打包操作。产生的jar包在各自源代码目录下D:\Documents\spark-2.1.0\spark-2.1.0\mllib\target下,可单独替换,然后就可以二次开发了。
8、编译打包过程中可能出现的问题
(1)、Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.8:run (default) on project spark-core_2.11: An Ant BuildException has occured: Execute failed: java.io.IOException: Cannot run program "bash" (in directory "C:\soft\spark\spark-2.0.0\core"): CreateProcess error=2,
[ERROR] around Ant part ...<exec executable="bash">... @ 4:27 in C:\soft\spark\spark-2.0.0\core\target\antrun\build-main.xml
[ERROR] -> [Help 1]
解决方案
安装git,
将Git下面的bin路径加入系统Path中:D:\Program Files \git\bin
(2)测试example中例子出现的问题(spark分布式计算依赖于hadoop,因此要设置成本地模式运行)
例如:在val conf = new SparkConf().setAppName("DecisionTreeRegressionExample")句后加setMaster("local[2]")
val conf = new SparkConf().setAppName("DecisionTreeRegressionExample").setMaster("local[2]") 根据自己的内核
和可以在IDEA里设置
解决方法
将编译产生的jar包添加到example Module
(3) [ERROR] Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:1.4.1:enforce (enforce-versions) on project spark-parent_2.11: Some Enforcer rules
have failed. Look above for specific messages explaining why the rule failed. -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
解决方案:
Maven版本不对,查看intellij的maven版本,修改对应的pox.hml文件的maven版本(检查方法如上)
(4)ERROR Shell: Failed to locate the winutils binary in the hadoop binary path
配置环境变量E:\\ProgramFiles\\hadoop-2.6.0重启电脑。或者代码中设置System.setProperty("hadoop.home.dir","E:\\Program Files\\hadoop-2.6.0");
还有一种可能HADOOP_HOME的bin目录下根本没有winutils.exe,
下载地址https://github.com/srccodes/hadoop-common- 2.2.0-bin
参考文献:https://siliconhalli.org/2017/02/09/spark-build-spark-from-source-on-windo/
https://msd.misuland.com/pd/300142128795750400
http://blog.****.net/ggz631047367/article/details/53811213
http://www.orz520.com/a/game/2017/0704/822643.html?from=haosou
http://blog.****.net/book_mmicky/article/details/25714445