在本地运行Kusto服务器
阅读原文时间:2023年09月01日阅读:2

我喜欢Kusto (或商用版本 Azure Data Explorer,简称 ADX) 是大家可以有目共睹的,之前还专门写过这方面的书籍,请参考 大数据分析新玩法之Kusto宝典, 很可能在今年还会推出第二季,正在酝酿题材和场景中。

为了使用Kusto,你既可以购买正式的服务(Azure Data Explorer)用于生产环境,也可以注册免费版https://aka.ms/kustofree来做研究和试验。而今天我要给大家介绍的是,你还可以在本地运行自己的Kusto服务器(官方叫法是模拟器)呢。

请注意,模拟器是没有技术支持的,建议不要用于生产环境啊。

你可以通过 https://learn.microsoft.com/en-us/azure/data-explorer/kusto-emulator-overview 这个文档了解详细信息,但我这里给大家一个实操的步骤,避免大家走弯路。

我推荐使用linux 的容器来做,而不是Windows,而且我当然推荐大家在启动容器的时候,把本地的磁盘mount上去,这样你自己创建的数据库,就可以在下次启动容器时还原回来。下面着重讲解几个关键步骤。

1. 启动容器

docker run -v /mnt/c/kustodata:/kustodata -e ACCEPT_EULA=Y -m 4G -d -p 8080:8080 -t mcr.microsoft.com/azuredataexplorer/kustainer-linux:latest

我用的是ubuntu服务器,通过WSL来启动的,所以你可以看到/mnt/c/kustodata 这个目录,其实是我的宿主机Windows上面C 盘下面的一个目录,然后我们映射到容器里的 /kustodata这个目录。

2. 使用Kusto Explorer 来连接

这里的关键是,本地服务器只支持 http 协议,而且不需要身份验证(请用自己的方式来保证安全性),所以你在连接时的连接字符串应该是下面这样的。

3. 创建数据库

这个没有特别的,你可以用下面的语法来创建数据库。

.create database test persist (
  @"/kustodata/test/md",
  @"/kustodata/test/data"
  )

这个查询是在容器里面执行的,所以这里的路径也应该是容器里面的路径,这也就是为什么我们此前要映射目录的原因了。

一旦创建数据库,你就可以正常地进行数据方面的操作了,例如创建表格,导入数据等。

# 创建表格
.create table test(id:int,name:string)

# 导入数据,按行导入
.ingest inline into table test <|
1,'ares'

# 导入数据,从文件导入
.ingest into table test(@'/kustodata/data.csv') with(format ='csv', ignoreFirstRecord =true)

4. 关闭服务器

既然是本地服务器,你就可以完全控制它,按照你的需求可以随时关闭它。因为它是容器启动的,所以要关闭它也很简单,通常用一句命令即可。

# xxxx 是容器编号,一般取前4位即可。通过 docker ps 可以看到当前正在运行的容器,以及他们的编号
docker stop xxxx

5. 重启后还原数据库

最后一个关键步骤是,如何重启后还原数据库。因为容器如果关闭的话,数据会全部丢失,为了确保你的数据在下次启动时还在,你必须把它映射到外部宿主环境的一个目录来。

此处你可以用到一个未公开的命令。

.attach database test from @'/kustodata/test/md'

希望对大家有所帮助,欢迎反馈和交流。