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

  网上说该问题是在高版本jdk编译,低版本jre中运行导致的,但是目前自己能确定的是编译和运行都是在jdk8下进行的,所以暂时没有找到真正的问题。目前自己将源码的jdk版本换成jdk11运行,能成功运行

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代码版本发生迭代)很可能需要重新编译代码

 

posted @ 2022-06-04 22:25  一y样  阅读(451)  评论(0编辑  收藏  举报