关于java:超详细Apache-Durid从入门到安装详细教程

52次阅读

共计 7478 个字符,预计需要花费 19 分钟才能阅读完成。

1. Durid 概述

Apache Druid 是一个集工夫序列数据库、数据仓库和全文检索零碎特点于一体的剖析性数据平台。本文将带你简略理解 Druid 的个性,应用场景,技术特点和架构。这将有助于你选型数据存储计划,深刻理解 Druid 存储,深刻理解工夫序列存储等。

Apache Druid 是一个高性能的实时剖析型数据库。

1.1 为什么应用

1.1.1 云原生数据库

一个现代化的云原生,流原生,剖析型数据库

​ Druid 是为疾速查问和疾速摄入数据的工作流而设计的。Druid 强在有弱小的 UI,运行时可操作查问,和高性能并发解决。Druid 能够被视为一个满足多样化用户场景的数据仓库的开源替代品。

1.1.2 轻松集成

轻松与现有的数据管道集成

​ Druid 能够从音讯总线流式获取数据(如 Kafka,Amazon Kinesis),或从数据湖批量加载文件(如 HDFS,Amazon S3 和其余同类数据源)。

1.1.3 超高性能

比传统计划快 100 倍的性能

  • Druid 对数据摄入和数据查问的基准性能测试大大超过了传统解决方案。
  • Druid 的架构交融了数据仓库,工夫序列数据库和检索系统最好的个性。
1.1.4 工作流

解锁新的工作流

​ Druid 为 Clickstream,APM(利用性能管理系统),supply chain(供应链),网络遥测,数字营销和其余事件驱动模式的场景解锁了新的查问形式和工作流。Druid 专为实时和历史数据的疾速长期查问而构建。

1.1.5 多种部署形式

能够部署在 AWS/GCP/Azure,混合云,k8s 和租用服务器上

​ Druid 能够部署在任 Linux 环境中,无论是外部环境还是云环境。部署 Druid 是十分 easy 的:通过增加或删减服务来扩容缩容。

1.2 应用场景

Apache Druid 实用于对实时数据提取,高性能查问和高可用要求较高的场景。因而,Druid 通常被作为一个具备丰盛 GUI 的剖析零碎,或者作为一个须要疾速聚合的高并发 API 的后盾。Druid 更适宜面向事件数据。

1.2.1 常见的应用场景

比拟常见的应用场景

1.2.1.1 用户流动和行为

​ Druid 常常用在点击流,拜访流,和流动流数据上。具体场景包含:掂量用户参与度,为产品公布追踪 A / B 测试数据,并理解用户应用形式。Druid 能够做到准确和近似计算用户指标,例如不反复计数指标。这意味着,如日活用户指标能够在一秒钟计算出近似值(均匀精度 98%),以查看总体趋势,或准确计算以展现给利益相关者。Druid 能够用来做“漏斗剖析”,去测量有多少用户做了某种操作,而没有做另一个操作。这对产品追踪用户注册非常有用。

1.2.1.2 网络流

​ Druid 经常用来收集和剖析网络流数据。Druid 被用于治理以任意属性切分组合的流数据。Druid 可能提取大量网络流记录,并且可能在查问时疾速对数十个属性组合和排序,这有助于网络流剖析。这些属性包含一些外围属性,如 IP 和端口号,也包含一些额定增加的强化属性,如地理位置,服务,利用,设施和 ASN。Druid 可能解决非固定模式,这意味着你能够增加任何你想要的属性。

1.2.1.3 数字营销

​ Druid 经常用来存储和查问在线广告数据。这些数据通常来自广告服务商,它对掂量和了解广告流动成果,点击穿透率,转换率(消耗率)等指标至关重要。

​ Druid 最后就是被设计成一个面向广告数据的弱小的面向用户的剖析型应用程序。在存储广告数据方面,Druid 曾经有大量生产实践,全世界有大量用户在上千台服务器上存储了 PB 级数据。

1.2.1.4 利用性能治理

​ Druid 经常用于追踪应用程序生成的可经营数据。和用户流动应用场景相似,这些数据能够是对于用户怎么和应用程序交互的,它能够是应用程序本身上报的指标数据。Druid 可用于下钻发现应用程序不同组件的性能如何,定位瓶颈,和发现问题。

​ 不像许多传统解决方案,Druid 具备更小存储容量,更小复杂度,更大数据吞吐的特点。它能够疾速剖析数以千计属性的利用事件,并计算简单的加载,性能,利用率指标。比方,基于百分之 95 查问提早的 API 终端。咱们能够以任何长期属性组织和切分数据,如以天为工夫切分数据,如以用户画像统计,如按数据中心地位统计。

1.2.1.5 物联网和设施指标

​ Driud 能够作为工夫序列数据库解决方案,来存储解决服务器和设施的指标数据。收集机器生成的实时数据,执行疾速长期的剖析,去估计性能,优化硬件资源,和定位问题。

​ 和许多传统工夫序列数据库不同,Druid 实质上是一个剖析引擎,Druid 交融了工夫序列数据库,列式剖析数据库,和检索系统的理念。它在单个零碎中反对了基于工夫分区,列式存储,和搜寻索引。这意味着基于工夫的查问,数字聚合,和检索过滤查问都会特地快。

​ 你能够在你的指标中包含百万惟一维度值,并随便按任何维度组合 group 和 filter(Druid 中的 dimension 维度相似于工夫序列数据库中的 tag)。你能够基于 tag group 和 rank,并计算大量简单的指标。而且你在 tag 上检索和过滤会比传统工夫序列数据库更快。

1.2.1.6 OLAP 和商业智能

​ Druid 常常用于商业智能场景。公司部署 Druid 去减速查问和加强利用。和基于 Hadoop 的 SQL 引擎 (如 Presto 或 Hive) 不同,Druid 为高并发和亚秒级查问而设计,通过 UI 强化交互式数据查问。这使得 Druid 更适宜做实在的可视化交互剖析。

1.2.2 适宜的场景

如果您的应用场景合乎以下的几个特色,那么 Druid 是一个十分不错的抉择:

  • 数据插入频率比拟高,但较少更新数据
  • 大多数查问场景为聚合查问和分组查问(GroupBy),同时还有肯定得检索与扫描查问
  • 将数据查问提早指标定位 100 毫秒到几秒钟之间
  • 数据具备工夫属性(Druid 针对工夫做了优化和设计)
  • 在多表场景下,每次查问仅命中一个大的分布式表,查问又可能命中多个较小的 lookup 表
  • 场景中蕴含高基维度数据列(例如 URL,用户 ID 等),并且须要对其进行疾速计数和排序
  • 须要从 Kafka、HDFS、对象存储(如 Amazon S3)中加载数据
1.2.3 不适宜的场景

如果您的应用场景合乎以下特色,那么应用 Druid 可能是一个不好的抉择:

  • 依据主键对现有数据进行低提早更新操作。Druid 反对流式插入,但不反对流式更新(更新操作是通过后盾批处理作业实现)
  • 提早不重要的离线数据系统
  • 场景中包含大连贯(将一个大事实表连贯到另一个大事实表),并且能够承受破费很长时间来实现这些查问

2. Durid 是什么

Apache Druid 是一个开源的分布式数据存储引擎。

​ Druid 的外围设计交融了 OLAP/analytic databases,timeseries database,和 search systems 的理念,以发明一个实用宽泛用例的对立零碎。Druid 将这三种零碎的次要个性交融进 Druid 的 ingestion layer(数据摄入层),storage format(存储格式化层),querying layer(查问层),和 core architecture(外围架构)中。

2.1 次要个性

2.1.1 列式存储

​ Druid 独自存储并压缩每一列数据。并且查问时只查问特定须要查问的数据,反对疾速 scan,ranking 和 groupBy。

2.2.2 原生检索索引

​ Druid 为 string 值创立倒排索引以达到数据的疾速搜寻和过滤。

2.2.3 流式和批量数据摄入

​ 开箱即用的 Apache kafka,HDFS,AWS S3 连接器 connectors,流式处理器。

2.2.4 灵便的数据模式

​ Druid 优雅地适应一直变动的数据模式和嵌套数据类型。

2.2.5 基于工夫的优化分区

​ Druid 基于工夫对数据进行智能分区。因而,Druid 基于工夫的查问将显著快于传统数据库。

2.2.6 反对 SQL 语句

​ 除了原生的基于 JSON 的查问外,Druid 还反对基于 HTTP 和 JDBC 的 SQL。

2.2.7 程度扩大能力

​ 百万 / 秒的数据摄入速率,海量数据存储,亚秒级查问。

2.2.8 易于运维

​ 能够通过增加或移除 Server 来扩容和缩容。Druid 反对主动重均衡,生效转移。

2.3 技术选型

技术比照
Druid

​ 是一个实时处理时序数据的 OLAP 数据库,它的索引首先依照工夫分片,查问的时候也是依照工夫线来路由索引。

Kylin

​ 外围是 Cube,Cube 是一种预计算技术,事后对数据作多维索引,查问时只扫描索引而不拜访原始数据从而提速。

Presto

​ 它没有应用 MapReduce,大部分场景下比 Hive 快一个数量级,其中的要害是所有的解决都在内存中实现。

Impala

​ 基于内存运算,速度快,反对的数据源没有 Presto 多。

Spark SQL

​ 基于 Spark 平台上的一个 OLAP 框架,基本思路是减少机器来并行计算,从而进步查问速度。

ES

​ 最大的特点是应用了倒排索引解决索引问题。依据钻研,ES 在数据获取和汇集用的资源比在 Druid 高。

框架选型
  • 从超大数据的查问效率来看:
    Druid > Kylin > Presto > Spark SQL
  • 从反对的数据源品种来讲:
    Presto > Spark SQL > Kylin > Druid

2.4 数据摄入

​ Druid 同时反对流式和批量数据摄入。Druid 通常通过像 Kafka 这样的音讯总线(加载流式数据)或通过像 HDFS 这样的分布式文件系统(加载批量数据)来连贯原始数据源。

​ Druid 通过 Indexing 解决将原始数据以 segment 的形式存储在数据节点,segment 是一种查问优化的数据结构。

2.5 数据存储

​ 像大多数剖析型数据库一样,Druid 采纳列式存储。依据不同列的数据类型(string,number 等),Druid 对其应用不同的压缩和编码方式。Druid 也会针对不同的列类型构建不同类型的索引。

​ 相似于检索系统,Druid 为 string 列创立反向索引,以达到更疾速的搜寻和过滤。相似于工夫序列数据库,Druid 基于工夫对数据进行智能分区,以达到更快的基于工夫的查问。

​ 不像大多数传统零碎,Druid 能够在数据摄入前对数据进行预聚合。这种预聚合操作被称之为 rollup,这样就能够显著的节俭存储老本。

2.6 查问

​ Druid 反对 JSON-over-HTTP 和 SQL 两种查问形式。除了规范的 SQL 操作外,Druid 还反对大量的唯一性操作,利用 Druid 提供的算法套件能够疾速的进行计数,排名和分位数计算。

Drui 被设计成一个强壮的零碎,它须要 7 *24 小时运行。

Druid 领有以下个性,以确保长期运行,并保证数据不失落。

2.6.1 数据正本

​ Druid 依据配置的正本数创立多个数据正本,所以单机生效不会影响 Druid 的查问。

2.6.2 独立服务

​ Druid 清晰的命名每一个主服务,每一个服务都能够依据应用状况做相应的调整。服务能够独立失败而不影响其余服务的失常运行。例如,如果数据摄入服务生效了,将没有新的数据被加载进零碎,然而曾经存在的数据仍然能够被查问。

2.6.3 主动数据备份

​ Druid 主动备份所有曾经 indexed 的数据到一个文件系统,它能够是分布式文件系统,如 HDFS。你能够失落所有 Druid 集群的数据,并疾速从备份数据中从新加载。

2.6.4 滚动更新

​ 通过滚动更新,你能够在不停机的状况下更新 Druid 集群,这样对用户就是无感知的。所有 Druid 版本都是向后兼容。

3. 装置部署

3.1 环境介绍

3.1.1 Durid 端口列表

以下是 Durid 默认的端口列表,避免因为端口占用导致服务器启动失败

角色 端口 介绍
Coordinator 8081 治理集群上的数据可用性
Historical 8083 存储历史查问到的数据
Broker 8082 解决来自内部客户端的查问申请
Realtime 8084
Overlord 8090 控制数据摄取工作负载的调配
MiddleManager 8091 负责摄取数据
Router 8888 能够将申请路由到 Brokers, Coordinators, and Overlords

3.2 装置形式

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

3.2.1 源代码编译

​ druid/release,次要用于定制化需要时,比方结合实际环境中的周边依赖,或者是退出反对特定查问的局部的优化等。

3.2.2 官网下载

​ 官网安装包下载:download,蕴含 Druid 部署运行的最根本组件

3.2.3 Imply 组合套件

​ Imply,该套件蕴含了稳固版本的 Druid 组件、实时数据写入反对服务、图形化展现查问 Web UI 和 SQL 查问反对组件等,目标是为更加不便、疾速地部署搭建基于 Druid 的数据分析利用产品。

3.3 单机配置参考

3.3.1 Nano-Quickstart

1 CPU, 4GB 内存

  • 启动命令: bin/start-nano-quickstart
  • 配置目录: conf/druid/single-server/nano-quickstart
3.3.2 微型疾速入门

4 CPU, 16GB 内存

  • 启动命令: bin/start-micro-quickstart
  • 配置目录: conf/druid/single-server/micro-quickstart
3.3.3 小型

8 CPU, 64GB 内存 (~i3.2xlarge)

  • 启动命令: bin/start-small
  • 配置目录: conf/druid/single-server/small
3.3.4 中型

16 CPU, 128GB 内存 (~i3.4xlarge)

  • 启动命令: bin/start-medium
  • 配置目录: conf/druid/single-server/medium
3.3.5 大型

32 CPU, 256GB 内存 (~i3.8xlarge)

  • 启动命令: bin/start-large
  • 配置目录: conf/druid/single-server/large
3.3.6 超大型

64 CPU, 512GB 内存 (~i3.16xlarge)

  • 启动命令: bin/start-xlarge
  • 配置目录: conf/druid/single-server/xlarge

3.4 单机版装置

3.4.1 软件要求
  • Java 8 (8u92+)
  • Linux, Mac OS X, 或者其余的类 Unix OS (Windows 是不反对的)
  • 装置 Docker 环境
  • 装置 Docker-compose 环境
3.4.2 硬件要求

Druid 包含几个单服务配置示例,以及应用这些配置启动 Druid 过程的脚本。

​ 如果您在笔记本电脑等小型机器上运行以进行疾速评估,那么 micro-quickstart 配置是一个不错的抉择,实用于 4CPU/16GB RAM 环境。如果您打算在教程之外应用单机部署进行进一步评估,咱们倡议应用比 micro-quickstart 更大的配置。

​ 尽管为大型单台计算机提供了示例配置,但在更高规模下,咱们倡议在集群部署中运行 Druid,以实现容错和缩小资源争用。

3.5 imply 形式装置

装置举荐 Imply 形式,Imply 形式出了提供 druid 组件,还有图形化、报表等性能

3.5.1 装置 perl

因为启动 druid 须要用到 perl 环境,须要装置下

yum install perl gcc kernel-devel
3.5.2 敞开防火墙
# 查看防火状态
systemctl status firewalld
#临时敞开防火墙
systemctl stop firewalld
#永恒敞开防火墙
systemctl disable firewalld

3.5.3 装置 JDK

抉择与本人零碎相匹配的版本,我的是 Centos7 64 位的,所以如果是我的话我会抉择此版本,要记住的你们下载的话抉择的是以 tar.gz 结尾的。

3.5.3.1 下载 JDK

到 Oracle 官网下载 jdk1.8,抉择jdk-8u301-linux-x64.tar.gz

将文件下载到本地后上传到 linux 目录下

3.5.3.2 上传解压

上传文件

mkdir /usr/local/java

解压目录

tar -zxvf jdk-8u301-linux-x64.tar.gz
3.5.3.3 配置环境变量

配置环境变量,批改 profile 文件并退出如下内容

vi /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8.0_301
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

3.5.3.4 失效配置
source /etc/profile
3.5.3.5 查看环境
java -version

3.5.4 装置 imply
3.5.4.1 登录 Imply 官网

拜访 https://imply.io/get-started, 进入 Imply 官网,查找适合的 imply 的版本的安装包,并填写简要信息后就能够下载了

3.5.4.2 解压 imply

下载后上传到服务器,并进行解压

# 创立 imply 装置目录
mkdir /usr/local/imply
# 解压 imply
tar -zxvf imply-2021.05-1.tar.gz
3.5.4.3 环境筹备

进入 imply-2021.05-1 目录后

# 进入 imply 目录
cd imply-2021.05-1
3.5.4.4 疾速启动

应用本地存储、默认元数据存储 derby,自带 zookeeper 启动,来体验下druid

# 创立日志目录
mkdir logs
# 应用命令启动
nohup bin/supervise -c conf/supervise/quickstart.conf > logs/quickstart.log 2>&1 &
3.5.4.5 查看日志

通过 quickstart.log 来查看 impl 启动日志

tail -f logs/quickstart.log

每启动一个服务均会打印出一条日志。能够通过 var/sv/xxx/current 查看服务启动时的日志信息

tail -f var/sv/broker/current

3.5.4.6 拜访 Imply

能够通过拜访 9095 端口来拜访 imply 的治理页面

http://192.168.64.173:9095/

3.5.4.7 拜访 Druid

拜访 8888 端口就能够拜访到咱们的 druid

http://192.168.64.173:8888/

本文由传智教育博学谷 – 狂野架构师教研团队公布,转载请注明出处!

如果本文对您有帮忙,欢送关注和点赞;如果您有任何倡议也可留言评论或私信,您的反对是我保持创作的能源

正文完
 0