跳转到主要内容

使用 Docker 运行

本快速入门指南将引导您完成从 Docker Hub 下载 Apache Druid 镜像,并使用 DockerDocker Compose 将其部署到单台机器上的步骤。完成初始设置后,集群即可开始加载数据。

在开始快速入门之前,建议您阅读 Druid 概览数据摄入概览,因为教程中会引用这些页面中讨论的概念。熟悉 Docker 也会有所帮助。

本教程假设您将从 GitHub 下载所需文件。这些文件也可在 Druid 安装包和 Druid 源代码中找到。

先决条件

Docker 内存要求

默认的 docker-compose.yml 会启动八个容器:Zookeeper、PostgreSQL,以及六个基于 微型快速入门配置的 Druid 容器。每个 Druid 服务都被配置为最多使用 7 GiB 内存(6 GiB 直接内存和 1 GiB 堆内存)。不过,快速入门并不会耗尽所有可用内存。

对于此设置,Docker 需要至少 6 GiB 的可用内存给 Druid 集群。对于 Mac OS 上的 Docker Desktop,请在 Docker Desktop 首选项中调整内存设置。如果您遇到 137 错误代码导致的崩溃,通常是因为分配给 Docker 的内存不足。

您可以修改 Docker environment 文件中 DRUID_SINGLE_NODE_CONF 的值,以使用不同的单机模式。例如,要使用 nano 快速入门:DRUID_SINGLE_NODE_CONF=nano-quickstart

入门指南

创建一个目录以存放 Druid Docker 文件。

Druid 源代码中包含一个 示例 docker-compose.yml,它会从 Docker Hub 拉取镜像,非常适合作为示例环境,用于尝试基于 Docker 的 Druid 配置和部署。将此文件下载到上面创建的目录中。

Compose 文件

示例 docker-compose.yml 将为每个 Druid 服务创建一个容器,以及 ZooKeeper 和一个作为元数据存储的 PostgreSQL 容器。

它还将创建一个名为 druid_shared 的卷作为深度存储,用于在 Druid 服务之间保存和共享分片数据(segments)和任务日志。该卷在容器内挂载为 opt/shared

环境文件

Druid docker-compose.yml 示例使用了一个 环境文件来指定完整的 Druid 配置,包括 配置 部分中描述的环境变量。该文件默认命名为 environment,必须与 docker-compose.yml 文件位于同一目录中。将示例 environment 文件下载到上面创建的目录中。此文件中的选项非常适合用于尝试 Druid 和进行教程练习。

这种单文件配置方法不适用于生产系统。对于生产环境,我们建议使用 DRUID_COMMON_CONFIGDRUID_CONFIG_${service},或专门定制的、针对特定服务的环境文件。

配置

Druid Docker 容器的配置通过容器内设置的环境变量来完成。Docker Compose 将 environment file 中的值传递到容器中。这些变量还可以指定标准 Druid 配置文件的路径,这些文件必须在容器内可用。

默认值适用于快速入门。生产系统则需要修改这些默认值。

基础配置

  • DRUID_MAXDIRECTMEMORYSIZE -- 设置 Java 最大直接内存大小。默认值为 6 GiB。
  • DRUID_XMX -- 设置 Java Xmx,即最大堆内存大小。默认值为 1 GB。

生产环境配置

  • DRUID_CONFIG_COMMON -- Druid 公共属性文件的完整路径
  • DRUID_CONFIG_${service} -- Druid 服务属性文件的完整路径
  • JAVA_OPTS -- 设置 Java 选项

日志配置

高级内存配置

除了上述特殊环境变量外,容器内启动 Druid 的脚本会将任何以 druid_ 为前缀的环境变量用作命令行配置。例如,环境变量

druid_metadata_storage_type=postgresql

会被转换为容器内 Druid 进程 Java 启动命令中的以下选项:

-Ddruid.metadata.storage.type=postgresql

请注意,Druid 使用 8888 端口作为控制台端口。此端口也被 Jupyter 等其他工具使用。为避免冲突,您可以在 docker-compose.yml 文件的 ports 部分更改端口。例如,要将控制台暴露在主机的 9999 端口:

    container_name: router
...
ports:
- "9999:8888"

启动集群

使用 cd 进入包含配置文件的目录。该目录为您上面创建的目录,或者如果您已在本地安装了 Druid,则为 Druid 安装目录下的 distribution/docker/

运行 docker compose up 以在当前 shell 界面下启动集群,或者运行 docker compose up -d 以在后台启动集群。

集群启动后,您可以访问 https://:8888 进入 Web 控制台Druid router 进程负责提供 UI 服务。

web console

所有 Druid 进程完全启动需要几秒钟时间。如果您在服务刚启动后立即打开控制台,可能会看到一些错误,这些错误通常可以忽略。

使用集群

现在您可以继续进行快速入门。对于生产环境,请根据需要优化 docker-compose.yml 文件,并添加任何额外的外部服务依赖。

您可以使用 Docker 进入 Druid 容器启动 shell:

docker exec -ti <id> sh

其中 <id> 是通过 docker ps 找到的容器 ID。Druid 安装在 /opt/druid。使用上述环境变量并启动 Druid 的 脚本位于 /druid.sh

运行 docker compose down 可关闭集群。您的数据将以 Docker 卷的形式持久化,并在您重启 Druid 集群时可用。