2020-09-20

一、Overview

1.1 概念

  • Segment: Druid将索引数据保存到Segment文件中,Segment文件根据时间进行分 片。Segment中会保存维度、指标以及索引信息。
  • roll-up: 数据预聚合,将一定时间粒度范围内、维度列相同的数据进行聚合

Druid进程和服务

  • Coordinator 进程管理群集上的数据可用性。从metastore中读取Segment的元数据,并决定哪些Segments需要被加载到集群中。使用ZooKeeper查看已经存在的历史节点都有哪些,了解集群各个节点负载情况。创建一个ZK的条目告诉历史节点加载、删除、或者移动Segments
  • Overlord 进程控制数据提取工作负载的分配。
  • Broker 进程处理来自外部客户端的查询。负责将查询请求分发到历史节点和实时节点,并聚合这些节点返回的查询结果数据。Broker节点通过zooeeper知道Segment都存放在哪些节点上。
  • Router 进程是可选的进程,可以将请求路由到Broker,Coordinator和Overlords。
  • Historical 进程存储可查询数据。提供对Segment的数据查询服务。与ZooKeeper通信,上报节点信息,告知ZK自己拥有哪些Segments。从ZooKeeper中获取执行任务。
  • MiddleManager 进程负责提取数据。

我们常常根据线程的服务类型分为

  • Master:运行Coordinator和Overlord进程,管理数据可用性和摄取。
  • Query:运行Broker和可选的Router进程,处理来自外部客户端的查询。
  • Data:运行Historical和MiddleManager进程,执行提取工作负载并存储所有可查询数据。

1.2 架构

druid-architecture.png

druid-cluster-architecture

1.3 Druid 能做什么

Druid擅长的部分

  • 对于大部分查询场景可以亚秒级响应
  • 事件流实时写入与批量数据导入兼备
  • 数据写入前预聚合节省存储空间,提升查询效率 • 水平扩容能力强
  • 社区活跃

Druid短板的部分

  • 不支持Join
  • 大数据量场景下明细查询有瓶颈

我是否需要使用Druid?

  • 处理时间序列事件
  • 快速的聚合以及探索式分析
  • 近实时分析亚秒级响应
  • 存储大量(TB级、PB级)可以预先定义若干维度的事件 • 无单点问题的数据存储

 

二 安装

获取Druid安装包有以下几种方式

  • 源代码编译druid/release,主要用于定制化需求时,比如结合实际环境中的周边依赖,或者是加入支持特定查询的部分的优化必定等。
  • 官网安装包下载download,包含Druid部署运行的最基本组件
  • Imply组合套件Imply,该套件包含了稳定版本的Druid组件、实时数据写入支持服务、图形化展示查询Web UI和SQL查询支持组件等,目的是为更加方便、快速地部署搭建基于Druid的数据分析应用产品。

2.1 单机版安装(Single-Server )

2.1.1 软件要求

  • Java 8 (8u92+)
  • Linux, Mac OS X, 或者其他的类Unix OS (Windows是不支持的)

2.1.2 硬件要求

Druid包括几个单服务配置示例,以及使用这些配置启动Druid进程的脚本。如果您在笔记本电脑等小型机器上运行以进行快速评估,那么micro-quickstart配置是一个不错的选择,适用于 4CPU/16GB RAM环境。如果您计划在教程之外使用单机部署进行进一步评估,我们建议使用比micro-quickstart更大的配置。

2.1.3 下载官方安装包

下载 0.15.0-incubating版本。

通过在终端中运行以下命令来解压Druid:

tar -xzf apache-druid-0.15.0-incubating-bin.tar.gz
cd apache-druid-0.15.0-incubating
  • 1
  • 2

在包中,您应该找到:

  • DISCLAIMERLICENSE, 和 NOTICE 文件
  • bin/* - 对快速入门有用的脚本
  • conf/* - 单服务和群集设置的示例配置
  • extensions/* - Druid核心扩展
  • hadoop-dependencies/* - Druid Hadoop 依赖
  • lib/* - Druid核心的库和依赖
  • quickstart/* - 快速入门教程的配置文件,示例数据和其他文件

2.1.4 外部依赖

  • Deep Storage(数据文件存储库):这里使用HDFS,提前安装好Hadoop
  • Metadata Storage(元数据库): MySQL或者PostgreSQL,这里使用MySQL。
  • ZooKeeper(集群状态管理服务):Druid依赖Apache ZooKeeper进行分布式协调。您需要下载并运行ZooKeeper。

2.1.5 配置环境变量

配置如下,保存并推出。并最后使配置生效 source ~/.bash_profile

vim ~/.bash_profile
  • 1

添加如下配置

# Druid配置
export DRUID_HOME=/opt/apache-druid-0.15.0-incubating
export PATH=$PATH:$DRUID_HOME/bin
  • 1
  • 2
  • 3

2.1.6 修改Druid配置文件

这里使用最低配置的配置micro-quickstart(Micro-Quickstart: 4 CPU, 16GB RAM)方式启动。启动的时候会加载$DRUID_HOME/conf/supervise/single-server/micro-quickstart.conf,配置文件的内容如下:

:verify bin/verify-java
:verify bin/verify-default-ports
:kill-timeout 10

# !p数字,表示服务关闭的权重,默认值为50,数值越大越优先关闭。
!p10 zk bin/run-zk conf
coordinator-overlord bin/run-druid coordinator-overlord conf/druid/single-server/micro-quickstart
broker bin/run-druid broker conf/druid/single-server/micro-quickstart
router bin/run-druid router conf/druid/single-server/micro-quickstart
historical bin/run-druid historical conf/druid/single-server/micro-quickstart
!p90 middleManager bin/run-druid middleManager conf/druid/single-server/micro-quickstart

# Uncomment to use Tranquility Server
#!p95 tranquility-server tranquility/bin/tranquility server -configFile conf/tranquility/wikipedia-server.json -Ddruid.extensions.loadList=[]

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

ZooKeeper(集成)

在程序包根目录中,运行以下命令:

cd $DRUID_HOME
curl https://archive.apache.org/dist/zookeeper/zookeeper-3.4.11/zookeeper-3.4.11.tar.gz -o zookeeper-3.4.11.tar.gz
tar -xzf zookeeper-3.4.11.tar.gz
mv zookeeper-3.4.11 zk
  • 1
  • 2
  • 3
  • 4

ZooKeeper(外部)

如果使用外部已经存在的ZK,可以将$DRUID_HOME/conf/supervise/single-server/micro-quickstart.conf!p10 zk bin/run-zk conf注释掉,然后修改配置

vim $DRUID_HOME/conf/druid/single-server/micro-quickstart/_common/common.runtime.properties

#
# Zookeeper,大概在46~55行中间,对zk进行配置
#
druid.zk.service.host=cdh1:2181,cdh2:2181,cdh3:2181
druid.zk.paths.base=/druid
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

配置common.runtime.properties

编辑:vim $DRUID_HOME/conf/druid/single-server/micro-quickstart/_common/common.runtime.properties

druid.extensions.loadList=["mysql-metadata-storage", "druid-hdfs-storage", "druid-kafka-indexing-service", "druid-datasketches"]

# 元数据Mysql配置
druid.metadata.storage.type=mysql
druid.metadata.storage.connector.connectURI=jdbc:mysql://cdh1:3306/druid?characterEncoding=UTF-8
druid.metadata.storage.connector.user=root
druid.metadata.storage.connector.password=123456

#
# Deep storage
#
#druid.extensions.loadList=["druid-hdfs-storage"]
# For HDFS:
druid.storage.type=hdfs
druid.storage.storageDirectory=hdfs://cdh1:8020/druid/segments

#
# Indexing service logs
#
# For HDFS:
druid.indexer.logs.type=hdfs
druid.indexer.logs.directory=hdfs://cdh1:8020/druid/indexing-logs

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

调整JVM(主要修改时区,调整为 UTC+0800 )

默认micro-quickstart启动的JVM大小如下

  • broker 512m
  • coordinator-overlord 256m
  • historical: 512m
  • middleManager 64m
  • router 128m

修改 $DRUID_HOME/conf/druid/single-server/micro-quickstart/ 下各个服务的 jvm.config,可以根据情况配置如下几种常用配置项。

-XX:+UseConcMarkSweepGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+ExitOnOutOfMemoryError
-Duser.timezone=UTC+0800
-Dfile.encoding=UTF-8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

如果配置的了深存储是HDFS

需要将Hadoop的配置文件:core-site.xmlhdfs-site.xmlmapred-site.xmlyarn-site.xml放置到$DRUID_HOME/conf/druid/single-server/micro-quickstart/_common目录下

如果配置了元数据库为MySQL

需要手动创建出druid.metadata.storage.connector.connectURI指定的数据库

# 在MySQL服务器中执行命令,创建一个 druid 库
mysql -u <username> -e "CREATE DATABASE druid CHARACTER SET utf8 COLLATE utf8_general_ci" -p

  • 1
  • 2
  • 3

同时,需要在$DRUID_HOME/conf/druid/single-server/micro-quickstart/_common/common.runtime.properties 中的配置项druid.extensions.loadList添加["mysql-metadata-storage"]
其他扩展参数可查看extensions

下载Mysql驱动(它的名字应该是mysql-connector-java-xxxx.jar)到$DRUID_HOME/extensions/mysql-metadata-storage目录下

wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.47/mysql-connector-java-5.1.47.jar -P $DRUID_HOME/extensions/mysql-metadata-storage/
  • 1

注意,这里如果使用的是MySQL数据库,可能因为版本不同,设置编码时会有问题,官方文档为CREATE DATABASE druid DEFAULT CHARACTER SET utf8mb4;,后面发下会报如下错误:

Caused by: org.skife.jdbi.v2.exceptions.UnableToExecuteStatementException: java.sql.BatchUpdateException: Specified key was too long; max key length is 767 bytes [statement:"null", located:"null", rewritten:"null", arguments:null]
	at org.skife.jdbi.v2.Batch.execute(Batch.java:131) ~[jdbi-2.63.1.jar:2.63.1]
	at org.apache.druid.metadata.SQLMetadataConnector$2.withHandle(SQLMetadataConnector.java:189) ~[druid-server-0.15.0-incubating.jar:0.15.0-incubating]
	at org.apache.druid.metadata.SQLMetadataConnector$2.withHandle(SQLMetadataConnector.java:179) ~[druid-server-0.15.0-incubating.jar:0.15.0-incubating]
	at org.skife.jdbi.v2.DBI.withHandle(DBI.java:281) ~[jdbi-2.63.1.jar:2.63.1]
	... 15 more
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

因此创建元数据库时,最好设置为utf8_general_ci编码。

2.1.7 启动Druid服务

启动前请确保如下端口没有占用

服务简介端口
ZooKeeper分布式协调服务– / 2181
Coordinator协调节点,管理集群状态8081
broker查询节点,处理查询请求8082
historical历史节点,管理历史数据8083
overlord统治节点,管理数据写入任务8090
middleManager中间管理者,负责写数据处理

启动Drui服务的命令如下

# 创建一个日志的目录,用来保存启动日志
mkdir $DRUID_HOME/logs
nohup $DRUID_HOME/bin/start-micro-quickstart > ${DRUID_HOME}/logs/start-micro-quickstart.log &

  • 1
  • 2
  • 3
  • 4

启动的时候可以查看日志。

 tail -f ${DRUID_HOME}/logs/start-micro-quickstart.log
  • 1

如果显示如下日志则启动成功

[Fri May  3 11:40:50 2019] Running command[coordinator-overlord], logging to[/opt/apache-druid-0.15.0-incubating/var/sv/coordinator-overlord.log]: bin/run-druid coordinator-overlord conf/druid/single-server/micro-quickstart
[Fri May  3 11:40:50 2019] Running command[broker], logging to[/opt/apache-druid-0.15.0-incubating/var/sv/broker.log]: bin/run-druid broker conf/druid/single-server/micro-quickstart
[Fri May  3 11:40:50 2019] Running command[router], logging to[/opt/apache-druid-0.15.0-incubating/var/sv/router.log]: bin/run-druid router conf/druid/single-server/micro-quickstart
[Fri May  3 11:40:50 2019] Running command[historical], logging to[/opt/apache-druid-0.15.0-incubating/var/sv/historical.log]: bin/run-druid historical conf/druid/single-server/micro-quickstart
[Fri May  3 11:40:50 2019] Running command[middleManager], logging to[/opt/apache-druid-0.15.0-incubating/var/sv/middleManager.log]: bin/run-druid middleManager conf/druid/single-server/micro-quickstart
[Fri May  3 11:40:50 2019] Command[coordinator-overlord] exited (pid = 22702, exited = 1)
[Fri May  3 11:40:50 2019] Command[coordinator-overlord] failed, see logfile for more details: /opt/apache-druid-0.15.0-incubating/var/sv/coordinator-overlord.log
[Fri May  3 11:40:50 2019] Running command[coordinator-overlord], logging to[/opt/apache-druid-0.15.0-incubating/var/sv/coordinator-overlord.log]: bin/run-druid coordinator-overlord conf/druid/single-server/micro-quickstart

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2.1.8 启动的错误解决

端口被占用

如果日志中出现一些错误,可以根据提示解决,最常见的错误如下

Cannot start up because port[8081] is already in use.
  • 1

请修改 $DRUID_HOME/conf/druid/single-server/micro-quickstart/ 下的对应服务的runtime.properties的端口号,例如这里8081端口被占用,说明是Coordinator服务端口需要修改,

$DRUID_HOME/conf/druid/single-server/micro-quickstart/coordinator-overlord/runtime.properties

# 修改如下配置
druid.plaintextPort=8085

  • 1
  • 2
  • 3
  • 4
  • 5

同时因为micro-quickstart启动时会进行端口验证,因此也需要修改$DRUID_HOME/bin/druid/verify-default-ports

# 将8081改为8085
#my @ports = (1527, 2181, 8081, 8082, 8083, 8090, 8091, 8200, 9095);
my @ports = (1527, 2181, 8085, 8082, 8083, 8090, 8091, 8200, 9095);

  • 1
  • 2
  • 3
  • 4

Command[coordinator-overlord] failed

此时根据提示查看 $DRUID_HOME/var/sv/coordinator-overlord.log,进行异常解决。

2.1.9 关闭Druid服务

$DRUID_HOME/bin/service --down

  • 1
  • 2

2.2 Imply组合套件方式部署

2.2.1 下载

浏览器访问 https://imply.io/get-started,选择右侧的Download Imply On-prem方式下载,可以不用注册账号,填写姓名、组织、公司邮箱即可下载,如果不想输入个人信息,可以使用这个连接下载老版本的

curl -O https://static.imply.io/release/imply-2.7.10.tar.gz
  • 1

2.2.2 安装

因此这里就不详细说明这方方式的安装过程了。

 

3 体验

3.1 转到浏览器

群集启动后,所有Druid进程都需要几秒钟才能完全启动。过上几秒后,我们就可以浏览器上转到http//cdh6:8888页面。服务于Druid控制台的Druid路由进程驻留在此地址。
Druid UI 01

3.2 继续

这部分可以查看官网

也可以查看我的官网文档的一份译文

其中导入测试数据时,因为安装包已经有一份demo数据,可以选择本地

  • Firehose type: local
  • Base directory: quickstart/tutorial/
  • File filter : wikiticker-2015-09-12-sampled.json.gz
    druid load data

Overlord Console页面
gacy overlord console

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值