使用 Docker 快速上手

前提条件

启动 HStream 需要一个内核版本不小于 Linux 4.14 的操作系统。

安装

安装 docker

提示

如果您已经有一安装好的 Docker,可以跳过这一步

浏览查阅 Install Docker Engine使用 Docker 快速上手 - 图1 (opens new window),然后安装到您的操作系统上。安装时,请注意检查您的设备是否满足所有的前置条件。

确认 Docker daemon 正在运行:

  1. docker version

提示

在 Linux,Docker 需要 root 权限。 当然,你也可以以非 root 用户的方式运行 Docker,详情可以参考 Post-installation steps for Linux使用 Docker 快速上手 - 图2 (opens new window)

安装 docker-compose

提示

如果您已经有一安装好的 Docker,可以跳过这一步

浏览查阅 Install Docker Compose使用 Docker 快速上手 - 图3 (opens new window),然后安装到您的操作系统上。安装时,请注意检查您的设备是否满足所有的前置条件。

  1. docker compose

在 Docker 容器里,启动一个本地独立的 HStreamDB

注意

请不要在生产环境中使用以下配置

创建一个存储 db 数据的文件目录

  1. mkdir /data/store

如果您是非 root 用户,您将无法在根(root)路径下创建文件夹, 那么您可以在任意位置创建该文件夹

  1. mkdir $HOME/data/store
  2. # 确保设置了环境变量 DATA_DIR
  3. export DATA_DIR=$HOME/data/store

启动 HStreamDB 服务和存储模块

创建一个 quick-start.yaml, 可以直接下载使用 Docker 快速上手 - 图4 (opens new window)或者复制以下内容:

  1. ## quick-start.yaml

在同一个文件夹中运行:

  1. docker-compose -f quick-start.yaml up

如果出现如下信息,表明现在已经有了一个运行中的 HServer:

  1. hserver_1 | [INFO][2021-11-22T09:15:18+0000][app/server.hs:137:3][thread#67]************************
  2. hserver_1 | [INFO][2021-11-22T09:15:18+0000][app/server.hs:145:3][thread#67]Server started on port 6570
  3. hserver_1 | [INFO][2021-11-22T09:15:18+0000][app/server.hs:146:3][thread#67]*************************

提示

当然,你也可以选择在后台启动

  1. docker-compose -f quick-start.yaml up -d

并且可以通过以下命令展示 logs :

  1. docker-compose -f quick-start.yaml logs -f hserver

启动 HStreamDB 的 SQL 命令行界面

  1. docker run -it --rm --name some-hstream-cli --network host hstreamdb/hstream hstream-client --port 6570 --client-id 1

如果所有的步骤都正确运行,您将会进入到命令行界面,并且能看见一下帮助信息:

  1. __ _________________ _________ __ ___
  2. / / / / ___/_ __/ __ \/ ____/ | / |/ /
  3. / /_/ /\__ \ / / / /_/ / __/ / /| | / /|_/ /
  4. / __ /___/ // / / _, _/ /___/ ___ |/ / / /
  5. /_/ /_//____//_/ /_/ |_/_____/_/ |_/_/ /_/
  6. Command
  7. :h To show these help info
  8. :q To exit command line interface
  9. :help [sql_operation] To show full usage of sql statement
  10. SQL STATEMENTS:
  11. To create a simplest stream:
  12. CREATE STREAM stream_name;
  13. To create a query select all fields from a stream:
  14. SELECT * FROM stream_name EMIT CHANGES;
  15. To insert values to a stream:
  16. INSERT INTO stream_name (field1, field2) VALUES (1, 2);
  17. >

创建一个 stream

首先,我们可以用 CREATE STREAM 语句创建一个名为 demo 的 stream.

  1. CREATE STREAM demo;

对这个 stream 执行一个持久的查询操作

现在,我们可以通过 SELECT 在这个 stream 上执行一个持久的查询。

这个查询的结果将被直接展现在 CLI 中。

以下查询任务会输出所有 demo stream 中具有 humidity 大于 70 的数据。

  1. SELECT * FROM demo WHERE humidity > 70 EMIT CHANGES;

现在看起来好像无事发生。这是因为从这个任务执行开始,还没有数据被写入到 demo 中。 接下来,我们会写入一些数据,然后符合条件的数据就会被以上任务输出。

启动另一个 CLI 窗口

我们可以利用这个新的 CLI 来插入数据:

  1. docker exec -it some-hstream-cli hstream-client --port 6570 --client-id 2

向 stream 中写入数据

输入并运行以下所有 INSERT 语句,然后关注我们之创建的 CLI 窗口。

  1. INSERT INTO demo (temperature, humidity) VALUES (22, 80);
  2. INSERT INTO demo (temperature, humidity) VALUES (15, 20);
  3. INSERT INTO demo (temperature, humidity) VALUES (31, 76);
  4. INSERT INTO demo (temperature, humidity) VALUES ( 5, 45);
  5. INSERT INTO demo (temperature, humidity) VALUES (27, 82);
  6. INSERT INTO demo (temperature, humidity) VALUES (28, 86);

不出意外的话,你将看到以下的结果。

  1. {"temperature":22,"humidity":80}
  2. {"temperature":31,"humidity":76}
  3. {"temperature":27,"humidity":82}
  4. {"temperature":28,"humidity":86}

用 docker 启动一个本地的 HStream-Server 3节点集群

注意

请勿在您的生产环境中使用该配置!

如果你跳过了上面启动单机的教程,可以直接跳到这一部分,用 docker-compose 拉起一个本地集群 instead.

假设已经有了一个根据以上步骤启动的单机节点

你可以手动启动剩余的两个节点,只要连上同一个 Zookeeper 服务,就能组成一个集群。 注意以下几个配置需要保证不要撞:

  • server-id : the id has to be an integer. This is the identifier of every server.
  • port : the port number that client connects to.
  • internal-port : the internal channel for server communication.

然后你可以运行如下的指令,用 docker 来启动剩余的两个节点。 如果你更改了这个文件使用 Docker 快速上手 - 图5 (opens new window),请确保在以下指令中, 也作出相应的修改。

  1. docker run -it --rm --name some-hstream-server-1 -v $DATA_DIR:/data/store --network hstream-quickstart hstreamdb/hstream hstream-server --store-config /data/store/logdevice.conf --zkuri 127.0.0.1:2181 --port 6580 --internal-port 6581 --server-id 101
  1. docker run -it --rm --name some-hstream-server-2 -v $DATA_DIR:/data/store --network hstream-quickstart hstreamdb/hstream hstream-server --store-config /data/store/logdevice.conf --zkuri 127.0.0.1:2181 --port 6590 --internal-port 6591 --server-id 102

用 docker-compose 拉起一个本地集群

下载 quick-start.yaml使用 Docker 快速上手 - 图6 (opens new window),然后 原模原样的将以下配置粘贴在 service 一栏:

  1. hserver0:
  2. image: hstreamdb/hstream
  3. depends_on:
  4. - zookeeper
  5. - hstore
  6. ports:
  7. - "127.0.0.1:6580:6580"
  8. expose:
  9. - 6580
  10. networks:
  11. - hstream-quickstart
  12. volumes:
  13. - ${DATA_DIR:-/data/store}:/data/store
  14. command:
  15. - bash
  16. - "-c"
  17. - |
  18. set -e
  19. /usr/local/script/wait-for-storage.sh hstore 6440 zookeeper 2181 600 \
  20. /usr/local/bin/hstream-server \
  21. --host 0.0.0.0 --port 6590 \
  22. --internal-port 6591 \
  23. --address $$(hostname -I | awk '{print $$1}') \
  24. --server-id 101 \
  25. --zkuri zookeeper:2181 \
  26. --store-config /data/store/logdevice.conf \
  27. --store-admin-host hstore --store-admin-port 6440 \
  28. --replicate-factor 3 \
  29. hserver1:
  30. image: hstreamdb/hstream
  31. depends_on:
  32. - zookeeper
  33. - hstore
  34. ports:
  35. - "127.0.0.1:6590:6590"
  36. expose:
  37. - 6590
  38. networks:
  39. - hstream-quickstart
  40. volumes:
  41. - ${DATA_DIR:-/data/store}:/data/store
  42. command:
  43. - bash
  44. - "-c"
  45. - |
  46. set -e
  47. /usr/local/script/wait-for-storage.sh hstore 6440 zookeeper 2181 600 \
  48. /usr/local/bin/hstream-server \
  49. --host 0.0.0.0 --port 6590 \
  50. --internal-port 6591 \
  51. --address $$(hostname -I | awk '{print $$1}') \
  52. --server-id 102 \
  53. --zkuri zookeeper:2181 \
  54. --store-config /data/store/logdevice.conf \
  55. --store-admin-host hstore --store-admin-port 6440 \
  56. --replicate-factor 3 \

这样,就能很轻松地用 docker-compose 拉起来了:

  1. docker-compose -f quick-start.yaml up -d
  2. docker-compose -f quick-start.yaml logs -f hserver hserver0 hserver1

运用 HStreamDB’s interactive SQL CLI

启动命令行界面的方式和原来相同。 HStreamDB 服务是集群还是单机并不会影响 CLI 的使用方式

  1. docker run -it --rm --name some-hstream-cli --network host hstreamdb/hstream hstream-client --port 6570 --client-id 1