Spark3.0源码编译打包

简介: Spark3.0源码编译打包

前言

Spark3.0已经发布有一阵子了,官方发布了预览版,带来了一大波更新,对于我们程序员来说,首先当然是代码拉过来,打个包,跑起来!!

源码地址

Spark源码是托管在github上面的,源码地址:Spark官方源码

不过clone下了还是老费劲,不得琢磨琢磨微软收购github之后这个中国的网速问题不知道他们怎么看,我在gitee上面直接也fork一份源码,再进行clone。

gitee上Spark源码

编译和打包

作为一个过(被)来(虐)人,编译之前需要做点工作,后续就顺利很多。

直接编译会出现下面的错误:

......
exec: curl --silent --show-error -L https://downloads.lightbend.com/zinc/0.3.15/zinc-0.3.15.tgz
curl: (77) error setting certificate verify locations:
 ......
exec: curl --silent --show-error -L https://downloads.lightbend.com/scala/2.12.10/scala-2.12.10.tgz
 ......
/home/hdfs/Spark3.0/build/mvn: line 130: cd: /home/hdfs/Spark3.0/build/scala-2.12.10/bin/../lib: No such file or directory
/home/hdfs/Spark3.0/build/mvn: line 131: cd: /home/hdfs/Spark3.0/build/scala-2.12.10/bin/../lib: No such file or directory
exec: curl --silent --show-error -L https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
......
/home/hdfs/Spark3.0/build/mvn: line 148: /home/hdfs/Spark3.0/build/zinc-0.3.15/bin/zinc: No such file or directory
......

这个时候一定要淡定,这里的信息其实是编译的时候需要依赖apache-maven-3.6.3-bin.tar.gz、scala-2.12.10.tgz、zinc-0.3.15.tgz,如果不存在则会自动下载,但是下载其实是失败的,我们选择手动下载这几个包,放在build里面解压好

接下来我们执行:

/dev/make-distribution.sh --name spark-3.0  --tgz  -Phadoop-2.6 -Phive -Phive-thriftserver  -Pyarn -DskipTests

脚本是不报错了,但是一直卡着

我们找到脚本,129行开始的地方:

VERSION=$("$MVN" help:evaluate -Dexpression=project.version $@ \
    | grep -v "INFO"\
    | grep -v "WARNING"\
    | tail -n 1)
SCALA_VERSION=$("$MVN" help:evaluate -Dexpression=scala.binary.version $@ \
    | grep -v "INFO"\
    | grep -v "WARNING"\
    | tail -n 1)
SPARK_HADOOP_VERSION=$("$MVN" help:evaluate -Dexpression=hadoop.version $@ \
    | grep -v "INFO"\
    | grep -v "WARNING"\
    | tail -n 1)
SPARK_HIVE=$("$MVN" help:evaluate -Dexpression=project.activeProfiles -pl sql/hive $@ \
    | grep -v "INFO"\
    | grep -v "WARNING"\
    | fgrep --count "<id>hive</id>";\
    # Reset exit status to 0, otherwise the script stops here if the last grep finds nothing\
    # because we use "set -o pipefail"
    echo -n)

这个地方是获获取各个组件的版本,其实版本从maven的pom.xml中可以看到,我直接写成固定的就行,改成如下:

VERSION=3.1.0-SNAPSHOT
SCALA_VERSION=2.12
SPARK_HADOOP_VERSION=2.7.4
SPARK_HIVE=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>

再次编译,可以动了:

接下来就是等待了,编译完成之后会就可以看到我们的包了

一些编译过程中的小问题

FullGC的问题

编译这个工作需要多试几次,编译的时候我发现还有本身maven慢的问题

[hdfs@daas-service-01 ~]$ jps -ml
78904 org.codehaus.plexus.classworlds.launcher.Launcher -DzincPort=3030 clean package -DskipTests -Phadoop-2.6 -Phive -Phive-thriftserver -Pyarn -DskipTests
[hdfs@daas-service-01 ~]$ jstat -gcutil 78904 1000
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
 71.26   0.00  21.62   9.53  91.05  95.86     80    4.021     7    2.064    6.085
 71.26   0.00  34.02   9.53  91.05  95.86     80    4.021     7    2.064    6.085
 71.26   0.00  43.84   9.53  91.05  95.86     80    4.021     7    2.064    6.085
 71.26   0.00  55.63   9.53  91.05  95.86     80    4.021     7    2.064    6.085
 71.26   0.00  73.30   9.53  91.05  95.86     80    4.021     7    2.064    6.085
 71.26   0.00  87.28   9.53  91.05  95.86     80    4.021     7    2.064    6.085
  0.00  77.58   3.99   9.53  91.06  95.69     81    4.090     7    2.064    6.154
  0.00  77.58  11.90   9.53  91.06  95.69     81    4.090     7    2.064    6.154

针对这种现象,我们适度调整JVM的参数:

export MAVEN_OPTS="-Xms12g -Xmx12g -XX:+UseG1GC"

CodeCache 满的问题

编译过程中出现下面提示

[INFO] Compiling 10 Scala sources to /home/hdfs/Spark3.0/mllib-local/target/scala-2.12/test-classes ...
Java HotSpot(TM) 64-Bit Server VM warning: CodeCache is full. Compiler has been disabled.
Java HotSpot(TM) 64-Bit Server VM warning: Try increasing the code cache size using -XX:ReservedCodeCacheSize=
CodeCache: size=245760Kb used=243977Kb max_used=243996Kb free=1782Kb
 bounds [0x00002aae10000000, 0x00002aae1f000000, 0x00002aae1f000000]
 total_blobs=59407 nmethods=58763 adapters=539
 compilation: disabled (not enough contiguous free space left) 

这个其实就是代码缓冲区满了,按照提示我们可以适度加大这个数值,几个参数一起配合就是

export MAVEN_OPTS="-Xms12g -Xmx12g -XX:+UseG1GC -XX:ReservedCodeCacheSize=2g" 

一点小总结

  • 首先要相信代码是没问题的,这种大作肯定是可以打包的
  • 大部分情况是网络问题,我们需要做点调整或者离线去下载依赖
  • 我们是程序员,程序员是有改造计算机世界的能力,打包什么的真block了,改得他可以通过就行
  • spark是可以maven构建的,所以直接安装maven的方式去搞就行
  • maven也是java程序,可以按照java程序去调整
目录
相关文章
|
6月前
|
SQL 分布式计算 大数据
【大数据技术Spark】DStream编程操作讲解实战(图文解释 附源码)
【大数据技术Spark】DStream编程操作讲解实战(图文解释 附源码)
132 0
|
6月前
|
Java Shell 分布式数据库
【大数据技术Hadoop+Spark】HBase数据模型、Shell操作、Java API示例程序讲解(附源码 超详细)
【大数据技术Hadoop+Spark】HBase数据模型、Shell操作、Java API示例程序讲解(附源码 超详细)
149 0
|
6月前
|
分布式计算 Java 大数据
【大数据技术Hadoop+Spark】HDFS Shell常用命令及HDFS Java API详解及实战(超详细 附源码)
【大数据技术Hadoop+Spark】HDFS Shell常用命令及HDFS Java API详解及实战(超详细 附源码)
669 0
|
6月前
|
SQL 分布式计算 数据库
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
219 0
|
6月前
|
分布式计算 大数据 Scala
【大数据技术Hadoop+Spark】Spark RDD创建、操作及词频统计、倒排索引实战(超详细 附源码)
【大数据技术Hadoop+Spark】Spark RDD创建、操作及词频统计、倒排索引实战(超详细 附源码)
247 1
|
6月前
|
分布式计算 Java Hadoop
Spark3.3.0源码编译补充篇-抓狂的证书问题
Spark3.3.0源码编译补充篇-抓狂的证书问题
40 0
|
6月前
|
分布式计算 Java 测试技术
肝Spark源码的若干骚操作
肝Spark源码的若干骚操作
45 0
|
6月前
|
分布式计算 监控 Java
Spark学习---day06、Spark内核(源码提交流程、任务执行)
Spark学习---day06、Spark内核(源码提交流程、任务执行)
|
6月前
|
存储 Java 关系型数据库
【Kafka+Flume+Mysql+Spark】实现新闻话题实时统计分析系统(附源码)
【Kafka+Flume+Mysql+Spark】实现新闻话题实时统计分析系统(附源码)
104 1
【Kafka+Flume+Mysql+Spark】实现新闻话题实时统计分析系统(附源码)
|
6月前
|
机器学习/深度学习 分布式计算 搜索推荐
【大数据技术】Spark MLlib机器学习协同过滤电影推荐实战(附源码和数据集)
【大数据技术】Spark MLlib机器学习协同过滤电影推荐实战(附源码和数据集)
200 0