Apache Druid 系列文章
1、Druid(Imply-3.0.4)介绍及部署(centos6.10)、验证
2、Druid的入门示例(使用三种不同的方式摄入数据和提交任务)
3、Druid的load data 示例(实时kafka数据和离线-本地或hdfs数据)
4、java操作druid api
5、Druid配置文件详细介绍以及示例
6、Druid的Roll up详细介绍及示例
文章目录
本问介绍了Druid的基本内容以及部署。
本文前提依赖jdk、zookeeper、hdfs,相关内容参考本人编写的其他专栏博文。
本文分为2个部分,即介绍和imply方式部署。
一、Druid介绍
1、Druid简介
官网:https://imply.io/what-is-druid/
http://www.apache-druid.cn/
Druid是MetaMarket 公司开发的,将Druid定义为“开源、分布式、面向列式存储的实时分析数据存储系统”。要解决的"痛点":
- 在高并发环境下,保证海量数据查询分析性能
- 提供海量实时数据的查询、分析与可视化功能
2、Druid关键特性
Druid是面向海量数据的、用于实时查询与分析的OLAP存储系统,時序數據庫。Druid的关键特性如下:
- 亚秒级的OLAP查询分析,采用了列式存储、倒排索引、位图索引等关键技术
- 在亚秒级别内完成海量数据的过滤、聚合以及多维分析等操作
- 实时流数据分析
- 实时数据在亚秒级内的可视化
- 丰富的数据分析功能
- SQL查询语言,REST查询接口
- 高可用性与高可拓展性
3、Druid的使用场景
如果使用场景符合以下的几个特征,那么Druid是一个可选项:
- 数据插入频率比较高,但较少更新数据
- 大多数查询场景为聚合查询和分组查询(GroupBy),同时还有一定得检索与扫描查询
- 将数据查询延迟目标定位100毫秒到几秒钟之间
- 数据具有时间属性(Druid针对时间做了优化和设计)
- 在多表场景下,每次查询仅命中一个大的分布式表,查询又可能命中多个较小的lookup表
- 场景中包含高基维度数据列(例如URL,用户ID等),并且需要对其进行快速计数和排序
- 需要从Kafka、HDFS、对象存储(如Amazon S3)中加载数据
如果您的使用场景符合以下特征,Druid可能不要用:
- 根据主键对现有数据进行低延迟更新操作。Druid支持流式插入,但不支持流式更新(更新操作是通过后台批处理作业完成)
- 延迟不重要的离线数据系统
- 场景中包括大连接(将一个大事实表连接到另一个大事实表),并且可以接受花费很长时间来完成这些查询
6、Druid 对比其他OLAP
1)、Druid vs. Elasticsearch
Druid在导入过程会对原始数据进行Rollup,而ES会保存原始数据
Druid专注于OLAP,针对数据导入以及快速聚合操作做了优化
Druid不支持全文检索
2)、Druid vs. Key/Value Stores (HBase/Cassandra/OpenTSDB)
Druid采用列式存储,使用倒排和bitmap索引,可以做到快速扫描相应的列
3)、Druid vs. Spark
Spark SQL的响应还不做到亚秒
Druid可以做到超低的响应时间,例如亚秒,而且高并发面向用户的应用。
4)、Druid vs SQL-on-Hadoop (Impala/Drill/Spark SQL/Presto)
Driud查询速度更快
数据导入,Druid支持实时导入,SQL-on-Hadoop一般将数据存储在Hdfs上,Hdfs的写入速度有可能成为瓶颈
SQL支持,Druid也支持SQL,但Druid不支持Join操作
5)、Druid vs. Kylin
Kylin不支持实时查询,Druid支持,但是Kylin3.0已经支持实时查询
Kylin支持表连接(Join),Druid不支持
Druid可以进行数据的存储,Kylin只能进行数据的OLAP分析
二、安装imply
1、Imply介绍
Imply也是Druid的核心团队开发的,它基于Apache Druid开发了一整套大数据分析解决方案
Imply基于Druid进行了一些组件开发,提供开源社区版本和商业版,简化了部署,imply有点类似于Cloudera Manager
2、集群规划
安装环境是centos6.10,jdk版本是Java1.8(1.8.0_144)
3、下载imply并解压
下载地址:https://imply.io/download-imply/
本示例安装的imply-3.0.4版本,本来安装的版本是imply-2022.12.1,但因为环境不支持,运行任务时出现如下图异常
界面异常信息:
Failed to get overlord modules: Request failed with status code 404
经查询发现imply-2022.12.1软件环境要求如下:
https://docs.imply.io/latest/install/
tar -xvzf imply-3.0.4.tar.gz -C /usr/local/bigdata
4、配置imply-3.0.4
mysql中创建imply相关的数据库
CREATE DATABASE `druid` DEFAULT CHARACTER SET utf8;
CREATE DATABASE `pivot` DEFAULT CHARACTER SET utf8;
-- MySQL版本必须使用5.5及以上版本(Druid和Pivot使用utf8字符集)
5、修改并上传配置文件
配置概述
Druid集群服务众多,一套完整的Druid集群需要修改很多配置文件。我们对常用配置文件进行了整理。
下面的配置common.runtime.properties是配置将Deep storage、Indexing service logs存储在HDFS中。
(同时有关文章说需要将core-site.xml, hdfs-site.xml, yarn-site.xml, mapred-site.xml四个配置文件放在Druid集群的/usr/local/bigdata/imply-3.0.4/conf/druid/_common中,并分发至整个集群。)
验证结果:数据文件、日志存储HDFS中。
#
# Extensions
#
druid.extensions.directory=dist/druid/extensions
druid.extensions.hadoopDependenciesDir=dist/druid/hadoop-dependencies
druid.extensions.loadList=["druid-datasketches","druid-lookups-cached-global","mysql-metadata-storage","druid-hdfs-storage","druid-histogram","druid-kafka-indexing-service"]
#
# Logging
#
# Log all runtime properties on startup. Disable to avoid logging properties on startup:
druid.startup.logging.logProperties=true
#
# Zookeeper
#
druid.zk.service.host=server1:2118,server2:2118,server3:2118
druid.zk.paths.base=/druid
#
# Metadata storage
#
# For Derby server on your Druid Coordinator (only viable in a cluster with a single Coordinator, no fail-over):
# druid.metadata.storage.type=derby
# druid.metadata.storage.connector.connectURI=jdbc:derby://master.example.com:1527/var/druid/metadata.db;create=true
# druid.metadata.storage.connector.host=master.example.com
# druid.metadata.storage.connector.port=1527
# For MySQL:
druid.metadata.storage.type=mysql
druid.metadata.storage.connector.connectURI=jdbc:mysql://192.168.10.44:3306/druid
druid.metadata.storage.connector.user=root
druid.metadata.storage.connector.password=77777777
#
# Deep storage
#
# For local disk (only viable in a cluster if this is a network mount):
# druid.storage.type=local
# druid.storage.storageDirectory=var/druid/segments
# For HDFS:
druid.storage.type=hdfs
druid.storage.storageDirectory=/druid/segments
#
# Indexing service logs
#
# For local disk (only viable in a cluster if this is a network mount):
# druid.indexer.logs.type=file
# druid.indexer.logs.directory=var/druid/indexing-logs
# For HDFS:
druid.indexer.logs.type=hdfs
druid.indexer.logs.directory=/druid/indexing-logs
#
# Service discovery
#
druid.selectors.indexing.serviceName=druid/overlord
druid.selectors.coordinator.serviceName=druid/coordinator
#
# Monitoring
#
druid.monitoring.monitors=["org.apache.druid.java.util.metrics.JvmMonitor"]
druid.emitter=logging
druid.emitter.logging.logLevel=info
1)、修改 conf/druid/_common/common.runtime.properties 文件
- 修改zookeeper的配置
druid.zk.service.host=server1:2118,server2:2118,server3:2118
# 其中/conf/zk/zoo.cfg文件中关于zokepr的端口配置不确定是否需要修改,其默认的是2181端口。本示例是将其端口进行修改成了本环境实际的端口2118
- 修改MySQL的配置
druid.extensions.loadList=["mysql-metadata-storage"]
# 其他数据源配置
# druid.extensions.loadList=["druid-datasketches","druid-lookups-cached-global","mysql-metadata-storage","druid-hdfs-storage","druid-histogram","druid-kafka-indexing-service"]
druid.metadata.storage.type=mysql
druid.metadata.storage.connector.connectURI=jdbc:mysql://192.168.10.44:3306/druid
druid.metadata.storage.connector.user=root
druid.metadata.storage.connector.password=7777777777
# 选用hdfs作为数据的存储位置,故需要将Hadoop配置XML文件(core-site.xml,hdfs-site.xml,yarn-site.xml,mapred-site.xml)放在Druid节点的classpath上。
#可以通过将它们复制到conf/druid/_common/中来实现
2)、修改 conf/pivot/config.yaml 配置文件
修改mysql的配置
stateStore:
type: mysql
location: mysql
connection: 'mysql://root:7777777@192.168.10.44:3306/pivot'
6、将配置好的 imply 分发到不同节点
scp -r imply-3.0.4/ server2:$PWD
scp -r imply-3.0.4/ server3:$PWD
7、配置环境变量
在每台服务器上配置DRUID_HOME环境变量
export DRUID_HOME=/usr/local/bigdata/imply-3.0.4
export PATH=$PATH:${DRUID_HOME}/bin
#重新加载环境变量
source /etc/profile
8、启动 imply 集群
1)、启动zk集群
2)、server1节点(使用外部zk而不使用imply自带zk启动overlord和coordinator)
# 使用外部zk而不使用imply自带zk启动overlord和coordinator
/usr/local/bigdata/imply-2022.12.1/bin/supervise -c /usr/local/bigdata/imply-2022.12.1/conf/supervise/master-no-zk.conf
/usr/local/bigdata/imply-3.0.4/bin/supervise -c /usr/local/bigdata/imply-3.0.4/conf/supervise/master-no-zk.conf
3)、server2节点(启动historical和middlemanager)
/usr/local/bigdata/imply-2022.12.1/bin/supervise -c /usr/local/bigdata/imply-2022.12.1/conf/supervise/data.conf
/usr/local/bigdata/imply-3.0.4/bin/supervise -c /usr/local/bigdata/imply-3.0.4/conf/supervise/data.conf
4)、server3节点(启动broker和router)
/usr/local/bigdata/imply-2022.12.1/bin/supervise -c /usr/local/bigdata/imply-2022.12.1/conf/supervise/query.conf
/usr/local/bigdata/imply-3.0.4/bin/supervise -c /usr/local/bigdata/imply-3.0.4/conf/supervise/query.conf
啓動可能存在以下異常
/usr/local/bigdata/imply-2022.12.1/dist/pivot/linux/pivot-linux: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by /usr/local/bigdata/imply-2022.12.1/dist/pivot/linux/pivot-linux)
/usr/local/bigdata/imply-2022.12.1/dist/pivot/linux/pivot-linux: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.18' not found (required by /usr/local/bigdata/imply-2022.12.1/dist/pivot/linux/pivot-linux)
/usr/local/bigdata/imply-2022.12.1/dist/pivot/linux/pivot-linux: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.5' not found (required by /usr/local/bigdata/imply-2022.12.1/dist/pivot/linux/pivot-linux)
/usr/local/bigdata/imply-2022.12.1/dist/pivot/linux/pivot-linux: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /usr/local/bigdata/imply-2022.12.1/dist/pivot/linux/pivot-linux)
/usr/local/bigdata/imply-2022.12.1/dist/pivot/linux/pivot-linux: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by /usr/local/bigdata/imply-2022.12.1/dist/pivot/linux/pivot-linux)
/usr/local/bigdata/imply-2022.12.1/dist/pivot/linux/pivot-linux: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.18' not found (required by /usr/local/bigdata/imply-2022.12.1/dist/pivot/linux/pivot-linux)
/usr/local/bigdata/imply-2022.12.1/dist/pivot/linux/pivot-linux: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.5' not found (required by /usr/local/bigdata/imply-2022.12.1/dist/pivot/linux/pivot-linux)
/usr/local/bigdata/imply-2022.12.1/dist/pivot/linux/pivot-linux: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /usr/local/bigdata/imply-2022.12.1/dist/pivot/linux/pivot-linux)
具體升級參考文檔(centos6手動升級GCC7.5))
https://note.youdao.com/s/Rcsr80mI
如果希望imply运行在后台,在每个执行命令后面加 --daemonize
9、访问WebUI
以上,完成了Druid的简单介绍以及安装。