Kyuubi 是基于 Apache Maven 构建的,使用命令:
./build/mvn clean package -DskipTests
这会构建 Kyuubi 项目的所有子模块而无需运行任何单元测试。
如果要手动测试,可以直接在 Kyuubi 项目的根目录下运行 Kyuubi 启动:
bin/kyuubi start
例如,构建 Kyuubi Common 模块,可以使用命令:
build/mvn clean package -pl :kyuubi-common -DskipTests
例如,使用构建 Kyuubi Common、Kyuubi Ha 模块,可以使用命令:
build/mvn clean package -pl :kyuubi-common,:kyuubi-ha -DskipTests
例如,构建没有 Kyuubi Codecov 和 Assembly 模块,可以使用命令:
build/mvn clean install -pl '!:kyuubi-codecov,!:kyuubi-assembly' -DskipTests
从 v1.1.0 开始,Kyuubi 可以支持使用不同的 Spark 配置文件构建:
Profile | Default | Since |
---|---|---|
-Pspark-3.0 | No | 1.0.0 |
-Pspark-3.1 | No | 1.1.0 |
-Pspark-3.2 | Yes | 1.4.0 |
-Pspark-3.3 | No | 1.6.0 |
我们默认使用 https://archive.apache.org/dist/spark/
下载内置 Spark 发布包,
但是如果发现下载速度很慢或者无法下载,可以使用配置 spark.archive.mirror
配置到合适的镜像地址从而加速下载。 例如:
build/mvn clean package -Dspark.archive.mirror=https://mirrors.bfsu.edu.cn/apache/spark/spark-3.2.1
专门针对中国大陆的开发者,可以使用名为 mirror-cn
的预定义配置,该配置文件使用 mirrors.bfsu.edu.cn
来加速 Spark 二进制文件的下载。例如,
build/mvn clean package -Pmirror-cn
创建一个 Kyuubi 发行版,就像 Kyuubi Release Page
中展示的一样,在项目根目录中使用 ./build/dist
构建。
有关使用的更多信息,请运行 ./build/dist --help
./build/dist - Tool for making binary distributions of Kyuubi Server
Usage:
+--------------------------------------------------------------------------------------+
| ./build/dist [--name <custom_name>] [--tgz] [--spark-provided] <maven build options> |
+--------------------------------------------------------------------------------------+
name: - custom binary name, using project version if undefined
tgz: - whether to make a whole bundled package
spark-provided: - whether to make a package without Spark binary
例如:
./build/dist --name custom-name --tgz
这会为你构建一个 Kyuubi 的发行版的包名为 kyuubi-{version}-bin-custom-name.tar.gz
。
如果你想部署 Kyuubi 地方在已经有了 Spark
,换句话说,你不需要内置捆绑下载的 Spark
,则可以使用命令:
./build/dist --tgz --spark-provided
然后你会得到一个没有 Spark 二进制包 Kyuubi 发行版 kyuubi-{version}-bin-without-spark.tar.gz
。
按照以下步骤,学习如何构建 Kyuubi 文档。
virtualenv
首先,安装 virtualenv
,这是可选的,但还是建议创建一个独立的环境来解决构建文档的依赖问题。
pip install virtualenv
切换到根目录下的 docs
:
cd $KTUUBI_HOME/docs
创建一个名为kyuubi
的虚拟环境,或者你也可以使用别的名字,只是不要和当前目录的文件夹冲突:
virtualenv kyuubi
激活它,
source ./kyuubi/bin/activate
安装所有的依赖项 requirements.txt
pip install -r requirements.txt
make html
如果构建过程成功,则 HTML 页面位于 _build/html
。
使用你喜欢的浏览器打开它 _build/html/index.html
。
Kyuubi 可以基于 Apache Maven 和 ScalaTest Maven Plugin 进行测试, 请参考 ScalaTest documentation。
以下是运行所有测试的命令示例:
./build/mvn clean test
./build/mvn clean test -pl :kyuubi-common
在本地开发时,运行一个测试或几个测试而不是全部测试很方便。
使用 Maven,可以使用 -DwildcardSuites 标志来运行单个 Scala 测试:
./build/mvn test -Dtest=none -DwildcardSuites=org.apache.kyuubi.service.FrontendServiceSuite
如果你想做一个需要与 kyuubi-spark-sql-engine 模块集成的单个测试,请先构建 kyuubi-spark-sql-engine 模块的包。
可以利用现成的工具来构建二进制发行版。
./build/dist
你可以使用 Java Debug Wire Protocol 来调试 Kyuubi,可以使用你最喜欢的 IDE 工具,例如Intellij IDEA
我们可以在 KYUUBI_JAVA_OPTS
中配置 JDWP 代理进行调试。
例如,
KYUUBI_JAVA_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 \
bin/kyuubi start
在 IDE 调试配置中设置相应的参数(主机和端口),例如,
spark.driver.extraJavaOptions -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005
spark.executor.extraJavaOptions -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005
build/mvn versions:set -DgenerateBackupPoms=false
每当项目版本更新时,请同时更新 docs/conf.py
中的文档版本以针对即将发布的版本。
例如:
release = '1.2.0'
Kyuubi 使用 dev/dependencyList
文件指示哪些上游依赖项会实际上进入服务器端的类路径。
对于 PR,用于依赖检查的 linter 将在 GitHub Actions 中自动执行。
所以你可以先本地运行 build/dependency.sh
来检测潜在的依赖变化。
如果更改看起来符合预期,请运行 build/dependency.sh --replace
在你的 PR 中去更新 dev/dependencyList
。