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 首页。

name

点击 创建新笔记本 - 创建 并在弹窗中为笔记本起名,点击 创建 进入 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;

结果如下:

Python-Ray 结果

处理 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;

结果如下:

MySQL-deltalake

 

多容器部

署前置条件

安装 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 的基础功能。

Logo

更多推荐