容器化部署操作指南
Byzer 提供了多种部署方式,方便您在不同的场景下灵活构建和使用(点击可查看几种部署方式详情): Sandbox 独立部署:Sandbox 镜像统一将 Byzer 引擎、Byzer-notebook 和 MLSQL 打包到一个镜像中,用于快速的在本地体验 Byzer,如果您需要将多个组件分开部署&#
Byzer 提供了多种部署方式,方便您在不同的场景下灵活构建和使用(点击可查看几种部署方式详情):
-
Sandbox 独立部署:Sandbox 镜像统一将 Byzer 引擎、Byzer-notebook 和 MLSQL 打包到一个镜像中,用于快速的在本地体验 Byzer,如果您需要将多个组件分开部署,可以使用
Sandbox 多容器部署
方式。 -
多容器部署:多容器部署方式会将 Byzer 引擎、Byzer-notebook 和 mysql 三个镜像通过 docker-compose 统一编排、部署,支持了健康检查、生命周期管理等特性。
Sandbox 独立部署
Sandbox 镜像统一将 Byzer 引擎、Byzer Notebook 和 MySQL 打包到一个镜像中,用于快速的在本地体验 Byzer。
如果您需要将多个组件分开部署,可以使用 Sandbox 多容器部署 方式。
前置条件
安装 Docker Desktop
Docker 桌面版是一个适用于 MacOS 和 Windows 机器的应用程序,用于构建和共享容器化应用程序和微服务。它为用户提供了非常丰富便捷的管理平台,方便用户快速部署、管理 Sandbox 镜像和容器。
首先请从 Docker 官网 下载适配您操作系统的安装包,安装并使用。
适用于 Linux 的 Docker 桌面社区还在开发。若您需要在 Linux 上安装 Docker 引擎,请参考 Docker 官网安装文档。
Sandbox 独立部署 Byzer
下载 Byzer docker repo 最新的 image(基于 Spark 3):
docker pull byzer/byzer-sandbox:3.3.0-latest
该版本为非稳定版本,包含最新研发但尚未 release 的特性。
Byzer on Spark 3
使用 docker 命令启动 Spark 3.3.0 版 Sandbox 容器:
docker run -d \
-p 3306:3306 \
-p 9002:9002 \
-p 9003:9003 \
-e MYSQL_ROOT_HOST=% \
-e MYSQL_ROOT_PASSWORD=root \
--memory 4g \
--name byzer-sandbox-3.3.0-<Byzer Release 版本号> \
--restart=always \
byzer/byzer-sandbox:3.3.0-<Byzer Release 版本号>
注意:
Byzer Release 版本号
请参考 Docker Hub 中 byzer-sandbox 的 Release Tags:https://hub.docker.com/r/byzer/byzer-sandbox/tags 参考 Byzer 引擎部署指引 一节中 docker 启动命令中映射了 MySQL 的端口号,如果本地安装了 MySQL 的话,可能会存在端口冲突,需要重新定义一个端口号,如:-p 13306:3306
Byzer on Spark 2
如果需要体验 Spark2.4 版本的 Byzer, 下载 Byzer docker repo 中的稳定版本(基于 Spark 2):
docker pull byzer/byzer-sandbox:2.4.3-<Byzer Release 版本号>
使用 docker 命令启动 Spark 2.4.3 版 Sandbox 容器:
docker run -d \
-p 3306:3306 \
-p 9002:9002 \
-p 9003:9003 \
--name byzer-sandbox-2.4.3-<Byzer Release 版本号> \
--restart=always \
-e MYSQL_ROOT_HOST=% \
-e MYSQL_ROOT_PASSWORD=root \
byzer/byzer-sandbox:2.4.3-<Byzer Release 版本号>
体验 Byzer 功能
Sandbox 启动需要一段时间,服务启动后会暴露两个端口:
9002
: Byzer Notebook 服务端口9003
: Byzer Engine 的服务端口
当 Sandbox 启动成功后,我们可以通过 localhost:9002
地址来访问 Byzer Notebook. 在用户登陆界面,输入用户名和密码: admin/admin
进入Byzer Notebook 首页。
点击 创建新笔记本 - 创建 并在弹窗中为笔记本起名,点击 创建 进入 Notebook 使用界面开始体验 Byzer 功能。
使用 Python 和 Ray 处理 JSON 数据
在单元格中输入以下代码,并点击上方工具栏中的单箭头标志(运行)执行代码:
-- 构造测试数据
set mockData='''
{"title":"第一","body":"内容 1"}
{"title":"第二","body":"内容 2"}
{"title":"第三","body":"内容 3"}
''';
load jsonStr.`mockData` as data;
-- 设置 Python 环境
!python env "PYTHON_ENV=:";
!python conf "runIn=driver";
!python conf "schema=st(field(title,string),field(body,string))";
!python conf "dataMode=data";
-- Python 代码在 Sandbox 内置的 Ray 上执行
!ray on data '''
import ray
from pyjava.api.mlsql import RayContext
import numpy as np;
ray_context = RayContext.connect(globals(),"localhost:10001")
def echo(row):
row1 = {}
row1["title"]="jackm"
row1["body"]= row["body"]
return row1
ray_context.foreach(echo)
''' named newdata;
select * from newdata as output;
结果如下:
处理 MySQL 数据
点击上方工具栏中的 + 新增单元格,并在单元格中输入以下代码,点击工具栏中的单箭头标志(运行)执行代码:
-- 加载 mlsql_console.mlsql_job 表数据
load jdbc.`usage_template` where url="jdbc:mysql://localhost:3306/notebook?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false"
and driver="com.mysql.jdbc.Driver"
and user="root"
and password="root"
as table1;
-- 查询100条
select * from table1 limit 10 as table2;
-- 保存到DeltaLake
save append table2 as delta.`dt1`;
-- 查询 DeltaLake
load delta.`dt1` as table3;
select * from table3 as table4;
结果如下:
多容器部
署前置条件
安装 Docker Desktop
更多信息请参考 Sandbox 独立部署。
下载构建项目
多容器部署需要一个 docker-compose.yaml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。 为了方便使用,请下载 byzer-build 这个开源项目,在项目中提供了完整的 docker compose 配置,下面将演示具体的操作流程。
下载并获取 main 的代码:
git clone https://github.com/byzer-org/byzer-build.git byzer-build
cd byzer-build && git checkout main && git pull -r origin main
设置环境变量
## 指定 mysql root 用户密码
export MYSQL_ROOT_PASSWORD=root
## mysql 端口号
export MYSQL_PORT=3306
## byzer 引擎后台管理服务的端口
export BYZER_LANG_PORT=9003
## byzer notebook 客户端端口
export BYZER_NOTEBOOK_PORT=9002
## 当前 byzer 使用的 spark 版本(用于生成 container name)
export SPARK_VERSION=3.1.1
## byzer lang 使用的版本(用于生成 container name),如果想直接体验最新版本,请使用 latest
export BYZER_LANG_VERSION=<Byzer-lang Relase版本号>
## byzer notebook 使用的版本(用于生成 container name),如果想直接体验最新版本,请使用 latest
export BYZER_NOTEBOOK_VERSION=<Byzer-notebook Relase版本号>
注意:上述所有的环境变量我们都提供了默认值,如果您不需要单独定制配置,可以不用设置。
其中Byzer-lang Relase版本号
请参考Byzer lang的Release Tags:https://github.com/byzer-org/byzer-lang/tags
Byzer Notebook Relase版本号
请参考Byzer notebook的Release Tags:https://github.com/byzer-org/byzer-notebook/tags
获取方式:例如最新的tag为 v2.2.1
,则使用版本号 2.2.1
,那么参数应该设置为 export BYZER_LANG_VERSION=2.1.1
。
使用脚本构建 Byzer Images
运行下面脚本将会构建 images 到本地仓库,方便后面启动容器使用。
sh -x dev/bin/build-images.sh
使用多个容器部署 Byzer
多容器部署区别于我们前面介绍的 sandbox 独立部署方式,本质上是将多个服务每一个构建为一个镜像,然后使用统一的方式一起启动。这几个服务分别是:
-
mysql:8.0-20.04_beta:mysql 数据库,用于存储 byzer-notebook 中的元数据和数据
-
byzer-lang:Byzer 的运行时引擎
-
byzer-notebook:Byzer 的可视化管理平台
执行脚本进行多容器部署
sh -x dev/bin/docker-compose-up.sh
上面的脚本内部是通过 docker-compose up
命令启动服务(如果不关心执行方式可以执行上面的脚本即可):
cd dev/docker
docker-compose up -d
注意:docker-compose中提供了mlsql端口号的默认值,如果本地安装了mysql的话,可能会存在端口冲突,需要重新定义一个端口号,如:
export MYSQL_PORT=13306
体验 Byzer 功能
浏览器登录,在用户注册界面,输入用户名和密码,点击 Create a New Notebook - Create,进入 Notebook 使用界面, 我们提供了一些快速入门的 demo,方便您一览 Byzer 的基础功能。
更多推荐
所有评论(0)