win10环境下的spark2.4源码环境搭建

本文详细介绍了在Windows 10环境下搭建Spark 2.4.8源码的步骤,包括JDK、Scala、Maven的安装,以及源码的获取和编译。在IDEA中配置Maven国内源,解决`spark-version-info.properties`缺失问题,并成功执行JavaWordCount案例。文章提供了相关报错的解决方案和环境配置文件的示例。
摘要由CSDN通过智能技术生成

1.概述

2.版本信息及环境

项目版本备注
oswin10
jdk1.8
scala2.11.12
spark2.4.8
maven5.8.1可使用与源码一致版本
sbt1.4未发现作用
idea2020.03

3.基础环境准备

请自行查阅资料安装如下组件:

  1. win10本地安装jdk .
  2. win10本地安装scala .
  3. win10本地安装maven .

4.源码准备

fork Spark源码1至个人GIT仓库,idea配置下github拉下来。太简单了就不写了。

5.IDEA设置

5.1 IDEA内maven插件设置与更新

在这里插入图片描述
国内源配置文件 settings.xml 请参见附录1.

5.2 IDEA内导入spark各个模块

在这里插入图片描述

6. 编译spark 与执行JavaWordCount 案例

6.1 指定版本编译spark

在idea terminal 下进入spark源码根目录,指定Hadoop和yarn的版本,编译:

mvn -Pyarn -Phadoop-2.6 -Dhadoop.version=2.6.0 -DskipTests clean package

ps:hadoop2.7较为稳定,但我本地是hadoop2.6的环境,所以保持现状.

若成功则显示如下图2
在这里插入图片描述

6.2 spark-version-info.properties 文件处理

3用git bash以管理员身份运行build/spark-build-info 用以生成spark-version-info.properties文件

build/spark-build-info  D:\目录路径

将生成的spark-version-info.properties文件复制到spark-core_2.11-2.4.0-SNAPSHOT.jar
这个jar包的根目录中。(复制之前先检查根目录下是否存在spark-version-info.properties,不存在再复制)
在这里插入图片描述

ps: 不添加会报 Could not find spark-version-info.properties 错4 ,报错详见附录2.

但我在尝试执行上述 build/spark-build-info 命令时候报错了,于是我打开了这个shell手动生成了spark-version-info.properties文件

关键shell语句如下:
echo_build_properties() {
  echo version=$1       --版本号
  echo user=$USER       --用户名
  echo revision=$(git rev-parse HEAD)   --很长的版本号
  echo branch=$(git rev-parse --abbrev-ref HEAD) --分支
  echo date=$(date -u +%Y-%m-%dT%H:%M:%SZ)       --日期
  echo url=$(git config --get remote.origin.url |  sed 's|https://\(.*\)@\(.*\)|https://\2|')
}

在git bash 执行生成结果如下图
在这里插入图片描述
最后生成的 spark-version-info.properties 文件内容参见附录3.

6.3 添加jar包添加至需要的classpath

本文是以测试 JavaWordCount 程序作为源码环境成功观测点,所以是将相关jar包添加至 examples 模块。5
在这里插入图片描述

6.4 JavaWordCount 执行环境设置

在这里插入图片描述

6.5 设置计算data原始文件

在这里插入图片描述
ps:data原始文件 cnt.txt 内容参见附录4.
至此,spark源码调试阅读环境搭建好了!!

附录

1). maven settings.xml国内源配置

<?xml version="1.0" encoding="UTF-8"?>
<settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd" xmlns="http://maven.apache.org/SETTINGS/1.1.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <!--本地仓库位置设置 -->
    <localRepository>D:\mvn_res</localRepository>
  <servers>
    <server>
      <id>AUTOHOME</id>
      <username>admin</username>
      <password>admin123</password>
    </server>
  
  </servers>
<mirrors>
        <mirror>
            <id>alimaven</id>
            <mirrorOf>central</mirrorOf>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
        </mirror>
        <mirror>
            <id>alimaven</id>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <mirrorOf>central</mirrorOf>
        </mirror>
        <mirror>
            <id>central</id>
            <name>Maven Repository Switchboard</name>
            <url>http://repo1.maven.org/maven2/</url>
            <mirrorOf>central</mirrorOf>
        </mirror>
        <mirror>
            <id>repo2</id>
            <mirrorOf>central</mirrorOf>
            <name>Human Readable Name for this Mirror.</name>
            <url>http://repo2.maven.org/maven2/</url>
        </mirror>
        <mirror>
            <id>ibiblio</id>
            <mirrorOf>central</mirrorOf>
            <name>Human Readable Name for this Mirror.</name>
            <url>http://mirrors.ibiblio.org/pub/mirrors/maven2/</url>
        </mirror>
        <mirror>
            <id>jboss-public-repository-group</id>
            <mirrorOf>central</mirrorOf>
            <name>JBoss Public Repository Group</name>
            <url>http://repository.jboss.org/nexus/content/groups/public</url>
        </mirror>
        <mirror>
            <id>google-maven-central</id>
            <name>Google Maven Central</name>
            <url>https://maven-central.storage.googleapis.com
            </url>
            <mirrorOf>central</mirrorOf>
        </mirror>
        <!-- 中央仓库在中国的镜像 -->
        <mirror>
            <id>maven.net.cn</id>
            <name>oneof the central mirrors in china</name>
            <url>http://maven.net.cn/content/groups/public/</url>
            <mirrorOf>central</mirrorOf>
        </mirror>
		
		<!--华为云MRS开发MAVEN库 -->
		<mirror>
			<id>repo2</id>
			<mirrorOf>central</mirrorOf>
			<url>http://repo2.maven.org/maven2/</url>
		</mirror>
		<!--华为云MRS开发MAVEN库 -->
		
    </mirrors>
  <profiles>

    <profile>
      <id>rep</id>
      <repositories>
	  
	    <!--添加cloudera的repository-->
    <repository>
      <id>cloudera</id>
      <url>https://repository.cloudera.com/artifactory/cloudera-repos</url>
    </repository>

	  
        <repository>
		
		<!--阿里云国内镜像 -->
            <id>alimaven</id>
            <name>Maven Aliyun Mirror</name>
            <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
		<!--阿里云国内镜像 -->
		
		
		<!--华为云MRS开发MAVEN库 -->
		<repository>
            <id>huaweicloudsdk</id>
            <url>https://repo.huaweicloud.com/repository/maven/huaweicloudsdk/</url>
            <releases><enabled>true</enabled></releases>
            <snapshots><enabled>true</enabled></snapshots>
        </repository>
		<!--华为云MRS开发MAVEN库 -->
		
      </repositories>
    </profile>


  </profiles>

  <activeProfiles>
		<!--华为云MRS开发MAVEN库 -->
		<activeProfile>alimavenspark</activeProfile>
		<!--华为云MRS开发MAVEN库 -->
		
  </activeProfiles>

</settings>

2). Could not find spark-version-info.properties 报错详情

Connected to the target VM, address: '127.0.0.1:60929', transport: 'socket'
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Exception in thread "main" java.lang.ExceptionInInitializerError
	at org.apache.spark.package$.<init>(package.scala:93)
	at org.apache.spark.package$.<clinit>(package.scala)
	at org.apache.spark.SparkContext$$anonfun$3.apply(SparkContext.scala:183)
	at org.apache.spark.SparkContext$$anonfun$3.apply(SparkContext.scala:183)
	at org.apache.spark.internal.Logging$class.logInfo(Logging.scala:54)
	at org.apache.spark.SparkContext.logInfo(SparkContext.scala:73)
	at org.apache.spark.SparkContext.<init>(SparkContext.scala:183)
	at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2526)
	at org.apache.spark.sql.SparkSession$Builder$$anonfun$7.apply(SparkSession.scala:930)
	at org.apache.spark.sql.SparkSession$Builder$$anonfun$7.apply(SparkSession.scala:921)
	at scala.Option.getOrElse(Option.scala:121)
	at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:921)
	at org.apache.spark.examples.JavaWordCount.main(JavaWordCount.java:44)
Caused by: org.apache.spark.SparkException: Could not find spark-version-info.properties
	at org.apache.spark.package$SparkBuildInfo$.<init>(package.scala:62)
	at org.apache.spark.package$SparkBuildInfo$.<clinit>(package.scala)
	... 13 more
Disconnected from the target VM, address: '127.0.0.1:60929', transport: 'socket'

Process finished with exit code 1

3). spark-version-info.properties 文件内容

version=2.4.8
user=root
revision=4be566062defa249435c4d72xxxxxxxxxxxxxx
branch=branch-2.4
date=2022-02-16T09:58:54Z
url=https://github.com/你的github账号/spark.git

4). data原始文件 cnt.txt 内容

a
b
c
a
c
b
a

参考


  1. https://github.com/apache/spark spark源码官方地址 ↩︎

  2. https://blog.csdn.net/qq_27667379/article/details/80251068 析Spark源码第一步——搭建源码阅读环境↩︎

  3. https://blog.csdn.net/u011055139/article/details/81611814 windows10环境下搭建spark2.4.0源码阅读环境 ↩︎

  4. https://blog.csdn.net/ggz631047367/article/details/53811213 spark2.1源码分析1:Win10下IDEA源码阅读环境的搭建 ↩︎

  5. https://www.cnblogs.com/mracale/p/10493823.html Intellij IDEA 添加jar包的三种方式 ↩︎

  • 28
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值