Skip to content

BIP 1: Support Integration testing using docker

hellozepp edited this page Feb 24, 2022 · 25 revisions

Status: DISCUSSION

Author: hellozepp

Contributor: hellozepp

Date: 2022.02.24

Issue: #1234

Pull Requests: #1234

背景

Byzer缺少一个可以进行集群测试的流程,存在以下的一些问题:

1)经常会有人反馈Byzer local模式正常,提交到yarn上就会有问题的case

2)PR 提交后常规的scalatest本地测试很难发现集群环境潜在的问题

3)发布前人工测试缺少yarn测试的环境,缺少yarn环境自动化发版测试

预期收益

  • 完善CI流程,支持可以自动跑在yarn环境的PR触发的集成测试

变更点

1)变更模块:byzer-build、streamingpro-it

2)变更内容:

  • byzer-build支持构建Byzer on yarn的镜像

  • 集成测试支持本地和github上通过docker进行yarn集群测试

Dev 分支使用介绍

为方便演示,提交发布一个实验使用的分支,下面介绍详细使用方式。

1)打包Byzer引擎 前提条件:

  • 我们的打包脚本仅支持Python3环境,如果需要多版本请先安装conda并使用

  • 下载byzer-lang,获取打包使用的脚本

  • 启动 Byzer 时,请使用--jars带上 ansj_seg-5.1.6.jar,nlp-lang-1.7.8.jar. 因为在很多示例中,我们需要用到分词相关的功能。

  • 执行打包脚本 dev/make-distribution.sh ,本次只支持hadoop3环境,所以我们先使用打包脚本生成基于spark3的tar包。

export MLSQL_SPARK_VERSION=3.0
sh -x dev/make-distribution.sh && tar -xvf mlsql-engine_3.0-2.3.0-SNAPSHOT.tar.gz

2)安装docker Desktop:从 Docker 官网 下载适配您操作系统的安装包,安装并使用。

3)测试

  • IDE中启动测试类 streamingpro-it/src/test/scala/tech/mlsql/it/ComposeSpec.scala

  • 或者通过maven命令启动

sh -x dev/run-test.sh 3.0
  1. 效果演示 it模块会依次启动hadoop3和byzer-lang容器,可以在控制台看到hadoop的启动日志:

lL9DVnmI1n

byzer-lang启动日志:

middle_img_v2_482b6ac1-1aae-4149-a139-863a1c2e41fg

启动完成后,将会看到3个docker实例:

middle_img_v2_7eb03599-af71-4c2a-a8fb-5f4e636131eg

实际是多套容器模拟的集群,然后日志收集到测试任务里面,这样就可以像local测试一样测试yarn环境。

在测试任务ComposeSpec中,实际上是模拟的http任务提交到container。同样我们可以在容器运行成功后手动访问该web入口:

middle_img_v2_0319edb5-0fbb-44dc-803d-bdc01c114f9g

注意,端口号为随机生成,需要从testcontainer的API获取。

最后,测试运行成功,容器会自动销毁。整个流程从启动容器到测试和销毁用时8-10分钟(image已经安装好的情况)。

技术设计

【整理中】

兼容性

仅支持spark3版本的byzer on yarn测试

测试计划

  • 测试spark2环境是否可以正常跳过

  • 测试PR测试是否有足够资源

  • 测试主链路,hadoop3和byzer-lang容器是否正常启动,是否可以正常接收http请求

  • 测试结果后是否在target中可以找到启动日志

  • byzer的tar包不存在时,是否会提示用户先打包在测试