# 使用 Docker-Compose 快速上手
# 前提条件
启动 HStream 需要一个内核版本不小于 Linux 4.14 的操作系统。
# 安装
# 安装 docker
提示
如果您已经有一安装好的 Docker,可以跳过这一步
浏览查阅 Install Docker Engine (opens new window),然后 安装到您的操作系统上。安装时,请注意检查您的设备是否满足所有的前置条件。
确认 Docker daemon 正在运行:
docker version
提示
在 Linux,Docker 需要 root 权限。当然,你也可以以非 root 用户的方式运行 Docker,详情可以参考 Post-installation steps for Linux (opens new window)。
# 安装 docker-compose
提示
如果您已经有一安装好的 Docker Compose,可以跳过这一步
浏览查阅 Install Docker Compose (opens new window),然 后安装到您的操作系统上。安装时,请注意检查您的设备是否满足所有的前置条件。
docker-compose -v
# 启动 HStreamDB 服务
注意
请不要在生产环境中使用以下配置
创建一个 quick-start.yaml, 可以直接下载 (opens new window)或者复制以下内容:
# 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:
image: hstreamdb/hstream:v0.11.0
depends_on:
- zookeeper
- hstore
ports:
- "127.0.0.1:6572:6572"
expose:
- 6572
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 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))
[ $$timeout -le 0 ] && echo 'Timeout!' && exit 1;
done; \
/usr/local/bin/hadmin server --host hserver0 init
hstore:
image: hstreamdb/hstream:v0.11.0
networks:
- hstream-quickstart
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
在同一个文件夹中运行:
docker-compose -f quick-start.yaml up
如果出现如下信息,表明现在已经有了一个运行中的 HServer:
hserver_1 | [INFO][2021-11-22T09:15:18+0000][app/server.hs:137:3][thread#67]************************
hserver_1 | [INFO][2021-11-22T09:15:18+0000][app/server.hs:145:3][thread#67]Server started on port 6570
hserver_1 | [INFO][2021-11-22T09:15:18+0000][app/server.hs:146:3][thread#67]*************************
2
3
提示
当然,你也可以选择在后台启动
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
如果所有的步骤都正确运行,您将会进入到命令行界面,并且能看见一下帮助信息:
__ _________________ _________ __ ___
/ / / / ___/_ __/ __ \/ ____/ | / |/ /
/ /_/ /\__ \ / / / /_/ / __/ / /| | / /|_/ /
/ __ /___/ // / / _, _/ /___/ ___ |/ / / /
/_/ /_//____//_/ /_/ |_/_____/_/ |_/_/ /_/
Command
:h To show these help info
:q To exit command line interface
:help [sql_operation] To show full usage of sql statement
SQL STATEMENTS:
To create a simplest stream:
CREATE STREAM stream_name;
To create a query select all fields from a stream:
SELECT * FROM stream_name EMIT CHANGES;
To insert values to a stream:
INSERT INTO stream_name (field1, field2) VALUES (1, 2);
>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 创建一个 stream
首先,我们可以用 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 窗口
我们可以利用这个新的 CLI 来插入数据:
docker exec -it some-hstream-cli hstream --port 6570 sql
# 向 stream 中写入数据
输入并运行以下所有 INSERT
语句,然后关注我们之前创建的 CLI 窗口。
INSERT INTO demo (temperature, humidity) VALUES (22, 80);
INSERT INTO demo (temperature, humidity) VALUES (15, 20);
INSERT INTO demo (temperature, humidity) VALUES (31, 76);
INSERT INTO demo (temperature, humidity) VALUES ( 5, 45);
INSERT INTO demo (temperature, humidity) VALUES (27, 82);
INSERT INTO demo (temperature, humidity) VALUES (28, 86);
2
3
4
5
6
不出意外的话,你将看到以下的结果。
{"temperature":22,"humidity":80}
{"temperature":31,"humidity":76}
{"temperature":27,"humidity":82}
{"temperature":28,"humidity":86}
2
3
4