spark源码学习--------day01源码环境安装(window10)
1. IDEA安装
安装破解的具体步骤见连接:https://baijiahao.baidu.com/s?id=1727424621934000354&wfr=spider&for=pc
2. 安装JDK
已安装
3. 安装maven
3.1 官网下载maven
下载地址:http://maven.apache.org/download.cgi
3.2 环境变量配置,以及maven国内镜像源配置
- 环境变量
- 阿里镜像源配置
<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
走完完上诉操作后,直接在cmd终端输入命令:mvn --version ,出现如下图所示则表示安装maven成功
3.3 IDEA中maven的配置
4、Spark 源码导入IDE
地址:https://github.com/apache/spark
5、IDE安装antlr和scala插件
5.1 antlr安装
5.2 scala插件安装与配置
- 安装
- 配置
项目右键-->Add Framework Support...
选中scala
注意:此处可能会找不到scala(原因是前面有配置过一次scala),这时我们只需要将project对应的模块中scala插件(如下图)找到,删除掉,然后重复上面的操作即可添加成功scala插件
检查scala使用的版本可以去
6. 编译源码
6.1 编译
- 方式一:
打开git Bash交互界面,然后进入本地拉取到的spark的源码地址,执行如下命令:
mvn clean package -Phive -Phive-thriftserver -Pyarn -DskipTests
这样执行完即可编译好spark源码
- 直接在idea的terminal执行上诉编译命令
编译结果:
6.2 编译过程遇到的问题
(1) maven版本过高,自己下载的maven是3.8.5(此处maven的版本保持与最初拉取spark源码pom文件上的一致就行,我是将pom文件上的3.8.4认为修改到3.8.5),重新下载3.8.4就不报错了
java.lang.RuntimeException: java.lang.RuntimeException: org.codehaus.plexus.component.repository.exception.ComponentLookupException: com.google.inject.ProvisionException: Unable to provision, see the following errors: 1) Error injecting constructor, java.lang.NoSuchMethodError: org.apache.maven.model.validation.DefaultModelValidator: method 'void <init>()' not found at org.jetbrains.idea.maven.server.embedder.CustomModelValidator.<init>(Unknown Source) while locating org.jetbrains.idea.maven.server.embedder.CustomModelValidator at ClassRealm[maven.ext, parent: ClassRealm[plexus.core, parent: null]] (via modules: org.eclipse.sisu.wire.WireModule -> org.eclipse.sisu.plexus.PlexusBindingModule) while locating org.apache.maven.model.validation.ModelValidator annotated with @com.google.inject.name.Named(value="ide") 1 error role: org.apache.maven.model.validation.ModelValidator roleHint: ide
(2)GIT环境变量未配置,导致编译出现如下错误
Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.8:run (default) on project spark-core_2.12: An Ant BuildException has occured: Execute failed: java.io.IOException: Cannot run program "bash"
解决办法:配置git的环境变量
(3)Error:(34, 45) object SqlBaseParser is not a member of package org.apache.spark.sql.catalyst.parser
(4) spark-version-info.properties文件缺失;
Caused by: org.apache.spark.SparkException: Could not find spark-version-info.properties
解决办法:直接在相应的resource中手动创建这个文件,然后写上spark的版本,如下所示
(5)not find :value StoreTypes
D:\code\419\spark\core\src\main\scala\org\apache\spark\status\protobuf\AccumulableInfoSerializer.scala:30:42
not found: value StoreTypes
def serialize(input: AccumulableInfo): StoreTypes.AccumulableInfo = {
自己是重新下载jar包解决的 应该是网络问题造成的相应jar包没有下载完整
(6) Exception in thread “main” java.lang.NoSuchMethodError: java.nio.ByteBuffer.flip()Ljava/nio/ByteBuffer
7. 运行测试
测试(1):SparkSQLExample(package org.apache.spark.examples.sql)
注意:此处运行时一定要加上pom文件中为provied的依赖运行时也要包括进去,如上图所示
(2) 测试二:启动master(package org.apache.spark.deploy.master)
结果如下
至此,源码环境搭建完毕
8. 补充
以前自己编译成功了spark源码,但隔了几个月在看源码时,发现代码编译又出问题了,经过排查发现idea上默认是自动fetch代码的,这样git上的spark源码发生变化后,自动拉取代码就很可能需要重新编译代码了,如下图
因此当我们代码编译好后,最好将idea中的自动fetch代码关掉。否则重编译比较麻烦。具体关掉的步骤如下:
file======>setting=======>Version Control=======>GitToolBox
当环境搭建好后,需要去关掉idea中的git自动fech代码。不然时间久了(spark代码版本发生迭代)很可能需要重新编译代码