Druid最新版本的(安装+启动服务+打开控制台+本地文件数据载入+数据查询)及(小内存服务器启动JVM参数调整)一次学会使用Druid的完整流程(已完成)

1,026 阅读9分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第15天,点击查看活动详情

当前最新版本安装包 apache-druid-0.22.0-bin.tar.gz 百度网盘分享(以下的安装配置使用的也是用的这个文件),也许是我的网络不好,下载很慢 :snail: 这里分享一下,有需要的可以使用:

链接:pan.baidu.com/s/1893NRqkl… 提取码:2vhj

Druid官网的 Quickstart 从安装到使用还是介绍的比较清晰的。我们跟随官网进行安装使用。

1. Install Druid

在这里插入图片描述 Druid官方只支持 Java 8(是不是瞬间明白为啥 JDK1.8 还依然非常活跃 :wink:)目前,对Java后续主要版本的支持还处于试验阶段。

【环境】 腾讯云服务器 CentOS 7.9 + JKD1.8:

[root@tcloud ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

[root@tcloud ~]# java -version
java version "1.8.0_251"
Java(TM) SE Runtime Environment (build 1.8.0_251-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.251-b08, mixed mode)

安装过程很简单:

tar -zxvf apache-druid-0.22.0-bin.tar.gz
mv apache-druid-0.22.0 /usr/local/druid

2. Start up Druid services

Druid包含的配置文件范围从最小的 Nano-Quickstart 配置(1 CPU, 4GiB RAM)到 X-Large 配置(64 CPU, 512GiB RAM)。

在这里插入图片描述 最小的 Nano-Quickstart 需要 1核 4G内存,我的云服务器是 1核 2G的,启动一下试试:

[root@tcloud druid]# ./bin/start-nano-quickstart
[Tue Nov  9 17:02:39 2021] Running command[zk], logging to[/usr/local/druid/var/sv/zk.log]: bin/run-zk conf
[Tue Nov  9 17:02:39 2021] Running command[coordinator-overlord], logging to[/usr/local/druid/var/sv/coordinator-overlord.log]: bin/run-druid coordinator-overlord conf/druid/single-server/nano-quickstart
[Tue Nov  9 17:02:39 2021] Running command[broker], logging to[/usr/local/druid/var/sv/broker.log]: bin/run-druid broker conf/druid/single-server/nano-quickstart
[Tue Nov  9 17:02:39 2021] Running command[router], logging to[/usr/local/druid/var/sv/router.log]: bin/run-druid router conf/druid/single-server/nano-quickstart
[Tue Nov  9 17:02:39 2021] Running command[historical], logging to[/usr/local/druid/var/sv/historical.log]: bin/run-druid historical conf/druid/single-server/nano-quickstart
[Tue Nov  9 17:02:39 2021] Running command[middleManager], logging to[/usr/local/druid/var/sv/middleManager.log]: bin/run-druid middleManager conf/druid/single-server/nano-quickstart

3. Open the Druid console

After the Druid services finish startup 启动过程是有点儿慢的 :snail: open the Druid console at http://tcloud:8888

在这里插入图片描述 页面显示出来了,实际上启动是失败的,查看报错日志:

Java HotSpot(TM) 64-Bit Server VM warning: 
INFO: os::commit_memory(0x00000000e0000000, 536870912, 0) failed; 
error='Cannot allocate memory' (errno=12)

3.1 小内存服务器启动JVM参数调整

内存不足!怎么办?试着把每个进程使用的内存调整小一些,我们试试:

# 根据启动脚本用到的配置文件名称 查询一下配置文件的位置
[root@tcloud ~]# find /usr/local/druid/ -name '*nano-*'
/usr/local/druid/conf/supervise/single-server/nano-quickstart.conf

# 查看一下配置文件的内容 
cat /usr/local/druid/conf/supervise/single-server/nano-quickstart.conf

# 内容如下
:verify bin/verify-java
:verify bin/verify-default-ports
:kill-timeout 10

!p10 zk bin/run-zk conf
coordinator-overlord bin/run-druid coordinator-overlord conf/druid/single-server/nano-quickstart
broker bin/run-druid broker conf/druid/single-server/nano-quickstart
router bin/run-druid router conf/druid/single-server/nano-quickstart
historical bin/run-druid historical conf/druid/single-server/nano-quickstart
!p90 middleManager bin/run-druid middleManager conf/druid/single-server/nano-quickstart

实际上在 /usr/local/druid/conf/druid/single-server/nano-quickstart 文件夹下一共有 :six: 个文件夹:

在这里插入图片描述 每个文件夹下都有运行和配置参数,以 coordinator-overlord 服务为例,查询 jvm.config 配置,顺便看一下 runtime.properties 当前组件占用的端口号 :

[root@tcloud coordinator-overlord]# cat ./jvm.config
-server
-Xms256m
-Xmx256m
-XX:+ExitOnOutOfMemoryError
-XX:+UseG1GC
-Duser.timezone=UTC
-Dfile.encoding=UTF-8
-Djava.io.tmpdir=var/tmp
-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager
-Dderby.stream.error.file=var/druid/derby.log

[root@tcloud coordinator-overlord]# cat ./runtime.properties
druid.service=druid/coordinator
druid.plaintextPort=8081

查询启动脚本里的 :five: 个组件,实际上还有 zookeeper 和 derby 数据库,一共 :seven: 个:

组件使用内存占用端口号
router128m8888
coordinator-overlord256m8081
broker512m8082
historical512m8083
middleManager64m8091
zookeeper128m2181
derby未标出1527
进行一波调整【也不能调整的过小 太小组件本身就无法启动】:
组件调整后内存占用端口号
------
router(减半)64m8888
coordinator-overlord(减半)128m8081
broker(减半)256m8082
historical(减半)256m8083
middleManager(不调整)64m8091
zookeeper(减半)64m2181
derby(不调整)未标出1527

3.2 系统初始化及需要开放端口

官网有这么两段话:

  All persistent state, such as the cluster metadata store and segments for the services, are kept in the var directory under the Druid root directory, apache-druid-0.22.0. Each service writes to a log file under var/sv, as noted in the startup script output above.

  At any time, you can revert Druid to its original, post-installation state by deleting the entire var directory. You may want to do this, for example, between Druid tutorials or after experimentation, to start with a fresh instance.

  大概是说元数据都保存在 var 文件夹下,各个服务的日志文件都在 var/sv 文件夹下,如果想初始化程序,那么删除 var 文件夹下的数据即可。   如果是云服务器,需要在安全组里释放相关端口【8888、1527、2181、8081、8082、8083、8091】,内存后调整好后,我们删掉 var 文件夹下的文件,然后重新启动:

在这里插入图片描述 似乎改观并不大,唯一的区别是Lookups的状态从400变为uninitiated,查看日志并没有发现内存不足的情况,我们继续 Quickstart 的下一步,遇到问题再进行解决。

4. Load data

不得不说 Druid 的 Quickstart 还是很贴心的,提供了测试文件:

The Druid distribution bundles sample data we can use. The sample data located in quickstart/tutorial/wikiticker-2015-09-12-sampled.json.gz in the Druid root directory represents Wikipedia page edits for a given day.

从这个页面开始,官网的教程界面跟最新版本的开始有不同了,Web页面大家随便点击,又不会坏 :blush: 步骤名称用官网的,配图用最新版本的:

  1. Click Load data from the Druid console header (Load data).
  2. Select the Local disk tile and then click Connect data.

在这里插入图片描述

  1. Enter the following values.
  • Base directory: quickstart/tutorial/
  • File filter: wikiticker-2015-09-12-sampled.json.gz
  1. Click Apply.

The data loader displays the raw data, giving you a chance to verify that the data appears as expected. 数据加后会显示原始数据,可以验证数据是否如预期的那样显示。

在这里插入图片描述

官网特别提示:在加载数据的步骤序列(当前是Connect)中,显示在控制台的顶部,如下所示。可以随时单击其他步骤,按顺序向前或向后移动。

在这里插入图片描述

  1. Click Next: Parse data.

这一步是对数据进行格式化,我们可以自由选择其他输入格式选项,以了解它们的配置设置以及Druid如何解析其他类型的数据。

在这里插入图片描述

  1. With the JSON parser selected, click Next: Parse time. The Parse time settings are where you view and adjust the primary timestamp column for the data.

这一步是对时间字段的格式化,Druid 要求数据有一个主时间戳列(内部存储在一个名为 __time 的列中)。如果数据中没有时间戳,需要选择常量值。示例中,数据加载程序确定时间列是唯一可以用作主时间列的候选项。

在这里插入图片描述 没有修改 Format 的类型,所以 _time 和 time 的格式其实是一样的。

特别说明: 由于是云服务器,内存小、带宽也小,wikiticker-2015-09-12-sampled.json.gz 文件解压后有 16.3M 共 39244 条记录,Format 总是失败,所以我只保留了前 200 条作为测试,前边的流程重新走一次,后边的截图数据就是 200 条记录的了。

  1. Click Next: Transform, Next: Filter, and then Next: Configure schema, skipping a few steps.

这一步跳过了调整转换或筛选设置。

  1. 配置模式设置是您配置所摄取的维度和指标的地方。这个配置的结果准确地表示了数据在摄入后将如何在Druid中出现。
  2. 数据集小的可以通过取消rollup开关,并在提示时确认更改来关闭rollup。

在这里插入图片描述

Rollup开关的作用: Druid将尝试在索引之前预聚合数据以节省存储空间。主时间戳将被截断为指定的查询粒度,包含相同字符串字段值的行将被聚合在一起。如果启用了汇总,则必须指定哪些列是维度(希望对其进行分组和筛选的字段),哪些列是度量(希望对其进行聚合的字段)。

  1. Click Next: Partition to configure how the data will be split into segments. In this case, choose DAY as the Segment granularity.

这一步是对数据进行分区,选择分区的字段。

在这里插入图片描述

  1. Click Next: Tune and Next: Publish.

输入调优,对于类型为“local”的inputSource没有特定的调优配置。

在这里插入图片描述

Publish设置,可以重命名数据源名称,对数据源是否追加,以及对异常的出来。我把默认名称从wikiticker-2015-09-12-segment 改成了 wikiticker-segment。

在这里插入图片描述

  1. Click Next: Edit spec to review the ingestion spec we've constructed with the data loader.

在这里插入图片描述

实际上这些都是前几步配置的信息,我们可以随意返回并更改前面步骤中的设置,以查看这样做如何更新规范。类似地,可以直接编辑规范,并查看它在前面步骤中的反映。

在这里插入图片描述 11. Once you are satisfied with the spec, click Submit.

点击 Submit 就可以提交数据源。新任务将出现在Ingestion视图中。任务可能需要一两分钟才能完成。当完成时,任务状态是SUCCESS,并指出任务的持续时间。注意,视图被设置为自动刷新,因此不需要刷新浏览器来查看状态更改。一个成功的任务意味着已经构建了一个或多个片段,现在由我们的数据服务器提取。

在这里插入图片描述

5. Query the data

单击控制台标题中的 Datasources 可以查看所有数据源。当数据源在“可用性”列中显示为“完全可用”时,它是可查询的。

当数据源可用时,打开该数据源的Actions菜单(Actions),并选择Query with SQL。请注意可以对数据源执行的其他操作,包括配置保留规则、压缩等。

在这里插入图片描述

可以自己写SQL,可以进行配置,点击 Run 即可查看结果。

在这里插入图片描述