1. 编译打包
Spark 支持 SBT 和 Maven 两种方式,一般构建使用 maven,开发中调试使用交互式的 SBT
SBT
执行 build/sbt 时,会先下载 sbt, scala 相关的包,修改 sbt-launch-0.13.18.jar sbt/sbt.boot.properties 中的 repositories 为国内云镜像可以加快进程,之后会进入一个较长时间的整个项目的 build。
[repositories]
local
huaweicloud-maven: https://repo.huaweicloud.com/repository/maven/
local-preloaded-ivy: file:///${sbt.preloaded-${sbt.global.base-${user.home}/.sbt}/preloaded/}, [organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext]
local-preloaded: file:///${sbt.preloaded-${sbt.global.base-${user.home}/.sbt}/preloaded/}
#maven-central
typesafe-ivy-releases: https://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
sbt-ivy-snapshots: https://repo.scala-sbt.org/scalasbt/ivy-snapshots/, [organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
对于习惯 Java 的程序员来说,初次接触 Scala 会遭遇不知道代码如何调试的问题,结合 Idea 和 SBT 命令行可以调试代码,详情可以参照 https://spark.apache.org/developer-tools.html
image
> build/sbt -Phive -Phive-thriftserver
> projects # 可以展示项目中所有的 sbt project
> project hive-thriftserver # 选择需要 debug 的 sub module
> set javaOptions in Test += "-agentlib:jdwp=transport=dt_socket,server=n,suspend=n,address=localhost:5005"
> testOnly *SparkContextSuite -- -t "Only one SparkContext may be active at a time"
Maven
使用 maven 构建项目更快,构建 distribution 包
./dev/make-distribution.sh --name custom-spark --tgz -Phadoop-3.2 -Phive-thriftserver -Pkubernetes
构建所需要的模块
build/mvn clean package -DskipTests -Phadoop-3.2 -Phive-thriftserver -Pkubernetes
只构建某个模块
build/mvn -pl :spark-hive-thriftserver_2.12 package -DskipTests
2. Docker 镜像
每次重新 build 后,需要替换 assembly/target/scala-2.12/jars 中有过更新的 jar,因为在生成镜像的过程中会执行 cp -r assembly/target/scala-2.12/jars /opt/apps/trunk/qtt-spark-3.0/target/tmp/docker/base/jars
bin/docker-image-tool.sh -r registry.myrepo.com/my-namespace -t 3.0.1-1.0 build