本地快速入门
本快速入门指南旨在帮助您安装 Apache Druid,并带您了解 Druid 的数据摄入和查询功能。进行本教程,您需要一台至少拥有 6 GiB RAM 的机器。
在本快速入门中,您将:
- 安装 Druid
- 启动 Druid 服务
- 使用 SQL 摄入并查询数据
Druid 支持多种摄入选项。完成本教程后,请参考 摄入 (Ingestion) 页面,以确定哪种摄入方法最适合您。
先决条件
您可以在配置相对一般的机器上按照这些步骤操作,例如拥有 6 GiB RAM 的工作站或虚拟服务器。
安装机器的软件要求如下:
- Linux、Mac OS X 或其他类 Unix 操作系统。(不支持 Windows)
- Java 17
- Python 3
- Perl 5
必须安装 Java。您可以将其添加到系统路径中,或者设置 JAVA_HOME 或 DRUID_JAVA_HOME 环境变量之一。您可以运行 apache-druid-37.0.0/bin/verify-java 来验证当前环境是否满足 Java 要求。
在安装生产环境的 Druid 实例之前,请务必查看 安全概述。通常情况下,请避免以 root 用户身份运行 Druid。建议创建一个专用的用户账户来运行 Druid。
安装 Druid
从 Apache Druid 下载 37.0.0 版本。
在终端中,解压文件并进入发布目录:
tar -xzf apache-druid-37.0.0-bin.tar.gz
cd apache-druid-37.0.0
该发布目录包含 LICENSE 和 NOTICE 文件,以及用于存放可执行文件、配置文件、示例数据等的子目录。
启动 Druid 服务
使用自动单机配置启动 Druid 服务。此配置包含适用于本教程的默认设置,例如默认加载 druid-multi-stage-query 扩展,以便您可以使用 MSQ 任务引擎。
您可以在 conf/druid/auto 目录下的配置文件中查看默认设置。
在 apache-druid-37.0.0 包根目录下,运行以下命令:
./bin/start-druid
这将启动 ZooKeeper 实例和 Druid 服务。例如:
$ ./bin/start-druid
[Tue Nov 29 16:31:06 2022] Starting Apache Druid.
[Tue Nov 29 16:31:06 2022] Open https://:8888/ in your browser to access the web console.
[Tue Nov 29 16:31:06 2022] Or, if you have enabled TLS, use https on port 9088.
[Tue Nov 29 16:31:06 2022] Starting services with log directory [/apache-druid-37.0.0/log].
[Tue Nov 29 16:31:06 2022] Running command[zk]: bin/run-zk conf
[Tue Nov 29 16:31:06 2022] Running command[broker]: bin/run-druid broker /apache-druid-37.0.0/conf/druid/single-server/quickstart '-Xms1187m -Xmx1187m -XX:MaxDirectMemorySize=791m'
[Tue Nov 29 16:31:06 2022] Running command[router]: bin/run-druid router /apache-druid-37.0.0/conf/druid/single-server/quickstart '-Xms128m -Xmx128m'
[Tue Nov 29 16:31:06 2022] Running command[coordinator-overlord]: bin/run-druid coordinator-overlord /apache-druid-37.0.0/conf/druid/single-server/quickstart '-Xms1290m -Xmx1290m'
[Tue Nov 29 16:31:06 2022] Running command[historical]: bin/run-druid historical /apache-druid-37.0.0/conf/druid/single-server/quickstart '-Xms1376m -Xmx1376m -XX:MaxDirectMemorySize=2064m'
[Tue Nov 29 16:31:06 2022] Running command[middleManager]: bin/run-druid middleManager /apache-druid-37.0.0/conf/druid/single-server/quickstart '-Xms64m -Xmx64m' '-Ddruid.worker.capacity=2 -Ddruid.indexer.runner.javaOptsArray=["-server","-Duser.timezone=UTC","-Dfile.encoding=UTF-8","-XX:+ExitOnOutOfMemoryError","-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager","-Xms256m","-Xmx256m","-XX:MaxDirectMemorySize=256m"]'
Druid 最多可能使用总可用系统内存的 80%。要明确设置 Druid 的总可用内存,可以传入 memory 参数值。例如,./bin/start-druid -m 16g。
Druid 将所有持久状态数据(例如集群元数据存储和数据分片)存储在 apache-druid-37.0.0/var 中。每个服务都会将其日志写入 apache-druid-37.0.0/log 下的日志文件中。
您可以随时通过删除整个 var 目录,将 Druid 恢复到安装后的原始状态。例如,在进行不同的 Druid 教程之间或实验之后,您可能希望这样做以获得一个全新的实例。
要随时停止 Druid,请在终端中使用 CTRL+C。这将退出 bin/start-druid 脚本并终止所有 Druid 进程。
打开 Web 控制台
启动 Druid 服务后,通过 https://:8888 打开 Web 控制台。

所有 Druid 服务(包括负责提供控制台服务的 Druid 路由器)完成启动可能需要几秒钟。如果您在启动完成前尝试打开 Web 控制台,浏览器中可能会出现错误。请稍候片刻再试。
在本快速入门中,您将使用 Web 控制台进行数据摄入。MSQ 任务引擎专门使用 Query(查询) 视图来编辑和运行 SQL 查询。有关与多阶段查询架构和 MSQ 任务引擎相关的 Query 视图的完整演练,请参阅 UI 演练。
加载数据
Druid 发行版中附带了 wikiticker-2015-09-12-sampled.json.gz 示例数据集,可供您测试使用。该示例数据集位于 Druid 根目录下的 quickstart/tutorial/ 文件夹中,代表了特定一天的维基百科页面编辑记录。
按照以下步骤加载示例维基百科数据集:
-
在 Query(查询) 视图中,点击 Connect external data(连接外部数据)。
-
选择 Local disk(本地磁盘) 图标并输入以下值:
-
Base directory(基础目录):
quickstart/tutorial/ -
File filter(文件过滤器):
wikiticker-2015-09-12-sampled.json.gz

UI 允许您分别输入基础目录和 通配符文件过滤器,这使得您可以一次指定多个文件进行摄入。
-
-
点击 Connect data(连接数据)。
-
在 Parse(解析) 页面上,您可以在将数据加载到 Druid 之前检查原始数据并执行以下可选操作:
- 展开一行以查看相应的源数据。
- 通过从 Input format(输入格式) 选项中选择,自定义处理数据的方式。
- 调整数据的主时间戳列。Druid 要求数据必须有一个主时间戳列(内部存储在名为
__time的列中)。如果您的数据集没有时间戳,Druid 将使用默认值1970-01-01 00:00:00。

-
点击 Done(完成)。系统将返回到 Query(查询) 视图,显示新生成的查询语句。该查询将示例数据插入到名为
wikiticker-2015-09-12-sampled的表中。显示查询
REPLACE INTO "wikiticker-2015-09-12-sampled" OVERWRITE ALL
WITH input_data AS (SELECT *
FROM TABLE(
EXTERN(
'{"type":"local","baseDir":"quickstart/tutorial/","filter":"wikiticker-2015-09-12-sampled.json.gz"}',
'{"type":"json"}',
'[{"name":"time","type":"string"},{"name":"channel","type":"string"},{"name":"cityName","type":"string"},{"name":"comment","type":"string"},{"name":"countryIsoCode","type":"string"},{"name":"countryName","type":"string"},{"name":"isAnonymous","type":"string"},{"name":"isMinor","type":"string"},{"name":"isNew","type":"string"},{"name":"isRobot","type":"string"},{"name":"isUnpatrolled","type":"string"},{"name":"metroCode","type":"long"},{"name":"namespace","type":"string"},{"name":"page","type":"string"},{"name":"regionIsoCode","type":"string"},{"name":"regionName","type":"string"},{"name":"user","type":"string"},{"name":"delta","type":"long"},{"name":"added","type":"long"},{"name":"deleted","type":"long"}]'
)
))
SELECT
TIME_PARSE("time") AS __time,
channel,
cityName,
comment,
countryIsoCode,
countryName,
isAnonymous,
isMinor,
isNew,
isRobot,
isUnpatrolled,
metroCode,
namespace,
page,
regionIsoCode,
regionName,
user,
delta,
added,
deleted
FROM input_data
PARTITIONED BY DAY -
(可选)点击 Preview(预览) 查看数据在摄入前的基本结构。
-
编辑查询的第一行,将默认的目标数据源名称从
wikiticker-2015-09-12-sampled修改为wikipedia。 -
点击 Run(运行) 执行查询。任务可能需要一两分钟才能完成。完成后,任务会显示其持续时间和插入到表中的行数。该视图会自动刷新,因此您无需刷新浏览器即可查看状态变化。

任务成功意味着 Druid 数据服务器已经接收并存储了一个或多个数据分片(segment)。
查询数据
摄入任务完成后,您就可以查询数据了。
在 Query(查询) 视图中,运行以下查询以列出排名靠前的频道:
SELECT
channel,
COUNT(*)
FROM "wikipedia"
GROUP BY channel
ORDER BY COUNT(*) DESC

恭喜!您在短短一个快速入门教程中,完成了从下载 Druid 到使用 MSQ 任务引擎查询数据的全过程。
后续步骤
请参阅以下主题以获取更多信息:
- Druid SQL 概述 或 查询教程,了解如何查询刚刚摄入的数据。
- 摄入概述,探索摄入更多数据的选项。
- 教程:使用 SQL 加载文件,了解如何生成将外部数据加载到 Druid 数据源的 SQL 查询。
- 教程:使用原生批处理摄入加载数据,使用 Druid 的原生批处理摄入功能加载和查询数据。
- 教程:从 Apache Kafka 加载流数据,从 Kafka 主题中加载流数据。
- 扩展,获取有关 Druid 扩展的详细信息。
请记住,停止 Druid 服务后,下次您可以删除 Druid 根目录下的 var 目录并再次运行 bin/start-druid 脚本,以全新的状态启动。在尝试其他数据摄入教程之前,您可能希望这样做,因为它们通常会使用相同的 Wikipedia 数据源。