目录
IDEA编译:官网文档
编译打包:官网文档
安装IDEA和Scala插件
2. 安装Scala插件
3. 安装Git并设置环境变量
IDEA中编译打包
IDEA中导入和编译
1. Spark源码下载:官网下载
2. 解压
3. 导入Spark源码
4. 选择Maven
5. 优选自动导包,选择自己安装的Java版本。环境设置里,选择Maven版本
6. 选择支持的组件,主要是Hadoop和Scala版本。这里的设置在后面编译时也可以修改。
7. 后面继续即可完成导入。
8. 导入后会自动下载依赖包。
9. 提示Python文件选择,确定就可以。
10. 下载完成后,Settings -> Build,Execution,Deployment -> Build Tools -> Maven -> Ranner -> VM option
填入Maven参数,可根据配置调高加快运行。
-Xmx2g -XX:ReservedCodeCacheSize=512m
注意:Spark2.4以上支持Scala2.12,所以如果编译Spark2.4以上版本,如果以前导入过Scala2.11,需要设置成2.12
11. 开始编译
选择Build -> Build Project即可开始编译,会报一堆过时信息,暂时忽略。
12. 编译完成,编译是为了方便阅读源码,要本地运行还需要打包。
编译中报错
1. 如果编译出错,基本都是jar没有更新完整。如:
Error:(34, 45) object SqlBaseParser is not a member of package org.apache.spark.sql.catalyst.parser
解决办法:
在Maven项目中,点击Generate Sources and Update Folders For All Projects 继续更新。
但是编译Spark2.4.3时,出现这个问题只是更新jar问题还是存在,解决是首先Maven里compile编译Spark Project Catalyst,再编译Spark。
2. 如果支持组件里加入了Hive-thriftserver,会报错:
Error:(52, 75) not found: value TCLIService
解决办法:
Project Structure - Modeules,将 hive-thriftserver 下的Java目录修改为Sources源文件夹。
3. 官网提示,如果选择支持Hive、Flume的这几个文件夹需要修改为Sources:
spark-hive: v0.13.1/src/main/scala
spark-streaming-flume-sink: target\scala-2.11\src_managed\main\compiled_avro
spark-catalyst: target\scala-2.11\src_managed\main
IDEA中编译打包
按自己的需求更改源码后,或者要在本地运行Spark,需要编译打包。
Maven项目中,Spark Project Parent POM,Lifecycle - package,这里可以点击上面的图标跳过测试。
打包中报错
1. 刚运行就停止,出现以下错误
Process finished with exit code -1073741819 (0xC0000005)
可能是金山词霸开启了自动取词,关闭金山词霸重启IDEA。
还有另外可能,Settings - Build,Execution,Deployment - Python -Debugger - 取消PyQt compatible
2. 如果Git没有设置环境变量,会出现错误:
Cannot run program "bash" (in directory "D:\spark\spark-2.3.3\core"): CreateProcess error=2, 系统找不到指定的文件。
将Git环境变量设置好,重启IDEA。
Git中编译打包
Windows环境下,IDEA编译打包容易出错,所以很多时候会先在Git下编译打包,然后导入IDEA。
在Spark-2.3.3目录上启动Git Bash here,或者启动Git后切换到源码目录。
运行以下命令,内存可以根据配置调高,Hadoop版本按自己的版本修改。
export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m"
./build/mvn -Pyarn -Phadoop-2.7 -Dhadoop.version=2.7.6 -DskipTests clean package
编译完成
测试
以SparkPageRank为例:
Menu -> Run -> Edit Configurations -> 选择 + -> Application
Main class搜索SparkPageRank
VM options: -Dspark.master=local 设置本地模式
classpath选择spark-examples
删除Build阶段,编译很慢
或者,可以从左边Project栏中 examples/src/main/scala/org/spark/examples/SparkPageRank 直接打开SparkPageRank代码,再设置只需要填入本地模式和参数、删除Build就可以。
需要为spark-examples添加依赖包,即刚才编译的assembly下,target/scala2.11/jars,否则会报错:
Exception in thread "main" java.lang.NoClassDefFoundError: scala/collection/Seq
本地运行成功
本地调试Spark脚本问题
1. 本地运行spark启动脚本start-master。报错: Executable is not specified
1. 通过winutils.exe修改bin/sbin目录权限
2. 设置Configurations,可以通过快捷方式打开。设置解释器路径为 git 下 bash.exe。
2. windows下运行spark-shell报错问题
如果本地安装好Hadoop、java、scala、spark,配置好环境变量,windows的CMD下启动spark-sehll报错,检查D:\spark\spark-2.3.3\assembly\target\scala-2.11\jars\jline-2.12.1.jar,如果没有,到服务器Spark目录jars下或者下载放入即可。
3. 编译完pom.xml文件变量报红
<spark.test.home>${session.executionRootDirectory}</spark.test.home>
<SPARK_DIST_CLASSPATH>${test_classpath}</SPARK_DIST_CLASSPATH>
在<spark.test.home>${session.executionRootDirectory}</spark.test.home>上面加入参数即可
<session.executionRootDirectory>executionRootDirectory</session.executionRootDirectory>
<test_classpath>test_classpath</test_classpath>