使用 Docker-Compose 快速上手

    安装

    提示

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

    浏览查阅 ,然后 安装到您的操作系统上。安装时,请注意检查您的设备是否满足所有的前置条件。

    确认 Docker daemon 正在运行:

    提示

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

    安装 docker-compose

    提示

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

    注意

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

    创建一个 quick-start.yaml, 可以直接或者复制以下内容:

    1. # quick-start.yaml
    2. version: "3.5"
    3. services:
    4. hserver0:
    5. image: hstreamdb/hstream:v0.11.0
    6. depends_on:
    7. - zookeeper
    8. - hstore
    9. ports:
    10. - "127.0.0.1:6570:6570"
    11. expose:
    12. - 6570
    13. networks:
    14. - hstream-quickstart
    15. volumes:
    16. - /var/run/docker.sock:/var/run/docker.sock
    17. - /tmp:/tmp
    18. - data_store:/data/store
    19. command:
    20. - bash
    21. - "-c"
    22. - |
    23. set -e
    24. /usr/local/script/wait-for-storage.sh hstore 6440 zookeeper 2181 600 \
    25. /usr/local/bin/hstream-server \
    26. --bind-address 0.0.0.0 --port 6570 \
    27. --internal-port 6571 \
    28. --server-id 100 \
    29. --seed-nodes "$$(hostname -I | awk '{print $$1}'):6571,hserver1:6573" \
    30. --advertised-address $$(hostname -I | awk '{print $$1}') \
    31. --metastore-uri zk://zookeeper:2181 \
    32. --store-config /data/store/logdevice.conf \
    33. --store-admin-host hstore --store-admin-port 6440 \
    34. --io-tasks-path /tmp/io/tasks \
    35. --io-tasks-network hstream-quickstart
    36. hserver1:
    37. depends_on:
    38. - zookeeper
    39. - hstore
    40. ports:
    41. - "127.0.0.1:6572:6572"
    42. expose:
    43. - 6572
    44. networks:
    45. volumes:
    46. - /var/run/docker.sock:/var/run/docker.sock
    47. - /tmp:/tmp
    48. - data_store:/data/store
    49. command:
    50. - bash
    51. - "-c"
    52. - |
    53. set -e
    54. /usr/local/script/wait-for-storage.sh hstore 6440 zookeeper 2181 600 \
    55. /usr/local/bin/hstream-server \
    56. --bind-address 0.0.0.0 --port 6572 \
    57. --internal-port 6573 \
    58. --server-id 101 \
    59. --seed-nodes "hserver0:6571,$$(hostname -I | awk '{print $$1}'):6573" \
    60. --advertised-address $$(hostname -I | awk '{print $$1}') \
    61. --metastore-uri zk://zookeeper:2181 \
    62. --store-config /data/store/logdevice.conf \
    63. --store-admin-host hstore --store-admin-port 6440 \
    64. --io-tasks-path /tmp/io/tasks \
    65. --io-tasks-network hstream-quickstart
    66. hserver-init:
    67. image: hstreamdb/hstream:v0.11.0
    68. depends_on:
    69. - hserver0
    70. - hserver1
    71. networks:
    72. - hstream-quickstart
    73. command:
    74. - bash
    75. - "-c"
    76. - |
    77. timeout=120
    78. until ( \
    79. /usr/local/bin/hadmin server --host hserver0 --port 6570 status && \
    80. /usr/local/bin/hadmin server --host hserver1 --port 6572 status \
    81. ) >/dev/null 2>&1; do
    82. >&2 echo 'Waiting for servers ...'
    83. sleep 1
    84. timeout=$$((timeout - 1))
    85. done; \
    86. /usr/local/bin/hadmin server --host hserver0 init
    87. hstore:
    88. image: hstreamdb/hstream:v0.11.0
    89. networks:
    90. volumes:
    91. - data_store:/data/store
    92. command:
    93. - bash
    94. - "-c"
    95. - |
    96. set -ex
    97. /usr/local/bin/ld-dev-cluster --root /data/store \
    98. --use-tcp --tcp-host $$(hostname -I | awk '{print $$1}') \
    99. --user-admin-port 6440 \
    100. --no-interactive
    101. zookeeper:
    102. image: zookeeper
    103. expose:
    104. - 2181
    105. networks:
    106. - hstream-quickstart
    107. volumes:
    108. - data_zk_data:/data
    109. - data_zk_datalog:/datalog
    110. networks:
    111. hstream-quickstart:
    112. name: hstream-quickstart
    113. volumes:
    114. data_store:
    115. name: quickstart_data_store
    116. data_zk_data:
    117. name: quickstart_data_zk_data
    118. data_zk_datalog:
    119. name: quickstart_data_zk_datalog

    在同一个文件夹中运行:

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

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

    提示

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

    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:v0.11.0 hstream --port 6570 sql

    首先,我们可以用 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 来插入数据:

    1. docker exec -it some-hstream-cli hstream --port 6570 sql

    向 stream 中写入数据

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

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

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