使用 Docker-Compose 快速上手
安装
提示
如果您已经有一安装好的 Docker,可以跳过这一步
浏览查阅 ,然后 安装到您的操作系统上。安装时,请注意检查您的设备是否满足所有的前置条件。
确认 Docker daemon 正在运行:
提示
在 Linux,Docker 需要 root 权限。当然,你也可以以非 root 用户的方式运行 Docker,详情可以参考 Post-installation steps for Linux (opens new window)。
安装 docker-compose
提示
如果您已经有一安装好的 Docker Compose,可以跳过这一步
注意
请不要在生产环境中使用以下配置
创建一个 quick-start.yaml, 可以直接或者复制以下内容:
# quick-start.yaml
version: "3.5"
services:
hserver0:
image: hstreamdb/hstream:v0.11.0
depends_on:
- zookeeper
- hstore
ports:
- "127.0.0.1:6570:6570"
expose:
- 6570
networks:
- hstream-quickstart
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /tmp:/tmp
- data_store:/data/store
command:
- bash
- "-c"
- |
set -e
/usr/local/script/wait-for-storage.sh hstore 6440 zookeeper 2181 600 \
/usr/local/bin/hstream-server \
--bind-address 0.0.0.0 --port 6570 \
--internal-port 6571 \
--server-id 100 \
--seed-nodes "$$(hostname -I | awk '{print $$1}'):6571,hserver1:6573" \
--advertised-address $$(hostname -I | awk '{print $$1}') \
--metastore-uri zk://zookeeper:2181 \
--store-config /data/store/logdevice.conf \
--store-admin-host hstore --store-admin-port 6440 \
--io-tasks-path /tmp/io/tasks \
--io-tasks-network hstream-quickstart
hserver1:
depends_on:
- zookeeper
- hstore
ports:
- "127.0.0.1:6572:6572"
expose:
- 6572
networks:
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /tmp:/tmp
- data_store:/data/store
command:
- bash
- "-c"
- |
set -e
/usr/local/script/wait-for-storage.sh hstore 6440 zookeeper 2181 600 \
/usr/local/bin/hstream-server \
--bind-address 0.0.0.0 --port 6572 \
--internal-port 6573 \
--server-id 101 \
--seed-nodes "hserver0:6571,$$(hostname -I | awk '{print $$1}'):6573" \
--advertised-address $$(hostname -I | awk '{print $$1}') \
--metastore-uri zk://zookeeper:2181 \
--store-config /data/store/logdevice.conf \
--store-admin-host hstore --store-admin-port 6440 \
--io-tasks-path /tmp/io/tasks \
--io-tasks-network hstream-quickstart
hserver-init:
image: hstreamdb/hstream:v0.11.0
depends_on:
- hserver0
- hserver1
networks:
- hstream-quickstart
command:
- bash
- "-c"
- |
timeout=120
until ( \
/usr/local/bin/hadmin server --host hserver0 --port 6570 status && \
/usr/local/bin/hadmin server --host hserver1 --port 6572 status \
) >/dev/null 2>&1; do
>&2 echo 'Waiting for servers ...'
sleep 1
timeout=$$((timeout - 1))
done; \
/usr/local/bin/hadmin server --host hserver0 init
hstore:
image: hstreamdb/hstream:v0.11.0
networks:
volumes:
- data_store:/data/store
command:
- bash
- "-c"
- |
set -ex
/usr/local/bin/ld-dev-cluster --root /data/store \
--use-tcp --tcp-host $$(hostname -I | awk '{print $$1}') \
--user-admin-port 6440 \
--no-interactive
zookeeper:
image: zookeeper
expose:
- 2181
networks:
- hstream-quickstart
volumes:
- data_zk_data:/data
- data_zk_datalog:/datalog
networks:
hstream-quickstart:
name: hstream-quickstart
volumes:
data_store:
name: quickstart_data_store
data_zk_data:
name: quickstart_data_zk_data
data_zk_datalog:
name: quickstart_data_zk_datalog
在同一个文件夹中运行:
docker-compose -f quick-start.yaml up
如果出现如下信息,表明现在已经有了一个运行中的 HServer:
提示
当然,你也可以选择在后台启动
docker-compose -f quick-start.yaml up -d
并且可以通过以下命令展示 logs :
docker-compose -f quick-start.yaml logs -f hserver
启动 HStreamDB 的 SQL 命令行界面
docker run -it --rm --name some-hstream-cli --network host hstreamdb/hstream:v0.11.0 hstream --port 6570 sql
首先,我们可以用 CREATE STREAM
语句创建一个名为 demo 的 stream.
CREATE STREAM demo;
对这个 stream 执行一个持久的查询操作
现在,我们可以通过 SELECT
在这个 stream 上执行一个持久的查询。
这个查询的结果将被直接展现在 CLI 中。
以下查询任务会输出所有 demo
stream 中具有 humidity 大于 70 的数据。
SELECT * FROM demo WHERE humidity > 70 EMIT CHANGES;
现在看起来好像无事发生。这是因为从这个任务执行开始,还没有数据被写入到 demo 中。 接下来,我们会写入一些数据,然后符合条件的数据就会被以上任务输出。
我们可以利用这个新的 CLI 来插入数据:
docker exec -it some-hstream-cli hstream --port 6570 sql
向 stream 中写入数据
输入并运行以下所有 INSERT
语句,然后关注我们之前创建的 CLI 窗口。
不出意外的话,你将看到以下的结果。
{"temperature":22,"humidity":80}
{"temperature":31,"humidity":76}
{"temperature":27,"humidity":82}