当前位置: 首页 > 后端技术 > Java

【超详细】ApacheDurid从入门到安装详细教程

时间:2023-04-01 16:43:10 Java

1.Durid概述ApacheDruid是一个综合了时序数据库、数据仓库和全文检索系统的特点的数据分析平台。本文将带您简要了解Druid的特性、使用场景、技术特点和架构。这将帮助您选择数据存储方案、深入了解Druid存储、深入了解时序存储等。ApacheDruid是一个高性能的实时分析数据库。1.1为什么使用1.1.1云原生数据库Druid是一个现代的云原生、流原生、分析型数据库,专为快速查询和快速数据摄取工作流程而设计。Druid的强大之处在于拥有强大的UI、运行时的操作查询以及高性能的并发处理。Druid可以看作是满足多样化用户场景的数据仓库的开源替代方案。1.1.2轻松集成与现有数据管道轻松集成Druid可以从消息总线(如Kafka、AmazonKinesis)流式传输数据,或从数据湖(如HDFS、AmazonS3和其他类似数据源)批量加载文件。1.1.3比传统方案快100倍的超高性能Druid在数据摄取和数据查询方面的基准性能测试大大超过了传统方案。Druid的架构结合了数据仓库、时序数据库和检索系统的最佳特性。1.1.4Workflow解锁新工作流Druid为Clickstream、APM(ApplicationPerformanceManagementSystem)、供应链(supplychain)、网络遥测、数字营销等事件驱动场景流解锁新的查询方式和工作。Druid专为实时和历史数据的快速即席查询而构建。1.1.5AWS/GCP/Azure、混合云、k8s、租用服务器多种部署方式Druid可以部署在任何Linux环境,无论是内部环境还是云端环境。部署Druid非常简单:通过添加或删除服务来扩展和收缩。1.2使用场景ApacheDruid适用于对实时数据提取、高性能查询和高可用性要求高的场景。因此,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.3DigitalMarketingDruid常用来存储和查询在线广告数据。这些数据通常来自广告服务提供商,对于衡量和了解广告活动的效果、点击率、转化率(燃烧率)等指标至关重要。Druid最初被设计为一个强大的面向用户的广告数据分析应用程序。在存储广告数据方面,Druid已经有大量的生产实践。全球大量用户在数千台服务器上存储了PB级的数据。1.2.1.4应用性能管理Druid常用于跟踪应用产生的运行数据。类似于用户活动使用场景,这些数据可以是关于用户如何与应用进行交互的,也可以是应用本身上报的指标数据。Druid可用于下钻,发现应用程序不同组件的性能,定位瓶颈并发现问题。与许多传统解决方案不同,Druid具有更小的存储容量、更低的复杂性和更大的数据吞吐量的特点。它可以快速分析具有数千个属性的应用程序事件,并计算复杂的负载、性能和利用率指标。例如,基于95%查询延迟的API端点。我们可以按任何临时属性对数据进行组织和切分,比如按天切分数据,比如按用户画像统计,比如按数据中心位置统计。1.2.1.5物联网和设备指标Driud可以作为一个时间序列数据库解决方案来存储和处理服务器和设备指标数据。收集实时机器生成的数据,并进行快速的ad-hoc分析,以衡量性能、优化硬件资源和定位问题。与许多传统的时间序列数据库不同,Druid本质上是一个分析引擎。Druid结合了时间序列数据库、分栏分析数据库和检索系统的概念。它支持在单个系统中基于时间的分区、列式存储和搜索索引。这意味着基于时间的查询、数字聚合和检索过滤查询都非常快。你可以在你的指标中包含数百万个唯一的维度值,并按任意维度自由组合分组和过滤(Druid中的维度维度类似于时序数据库中的标签)。您可以根据标签组和排名计算出很多复杂的指标。您可以比传统时间序列数据库更快地搜索和过滤标签。1.2.1.6OLAP和商业智能Druid常用于商业智能场景。公司部署Druid来加速查询和增强应用程序。与基于Hadoop的SQL引擎(如Presto或Hive)不同,Druid专为高并发和亚秒级查询而设计,并通过UI增强交互式数据查询。这让Druid更适合做真实的视觉交互分析。1.2.2适用场景如果你的使用场景满足以下特点,那么Druid是一个非常好的选择:数据插入频率比较高,但是数据很少更新大多数查询场景是聚合查询和分组查询(GroupBy),并且在同时,必须有检索和扫描查询,定位数据查询延迟目标在100毫秒到几秒之间。数据有时间属性(Druid针对时间进行了优化设计)。在多表场景下,每次查询只命中一个大的分布式表,查询可能会命中多个较小的查找表。场景包含高基维度数据列(如URL、用户ID等),需要从Kafka、HDFS、对象存储(如AmazonS3)加载数据进行快速统计和排序1.2.3不适合的场景如果你的使用场景满足以下特点,那么使用Druid可能不是一个好的选择:基于主键对已有数据进行低延迟的更新操作。Druid支持流式插入,但不支持流式更新(更新操作通过后台批处理作业完成)。延迟不重要的离线数据系统场景包括大连接(将一个大事实表连接到另一个大事实表),并且花很长时间来完成这些查询是可以接受的2.什么是Durid?ApacheDruid是一个开源的分布式数据存储引擎。Druid的核心设计融合了OLAP/分析数据库、时间序列数据库和搜索系统的思想,为广泛的用例创建了一个统一的系统。Druid将这三个系统的主要特性整合为Druid的摄取层(datainctionlayer)、存储格式(storageformatlayer)、查询层(querylayer)、核心架构(corearchitecture)。2.1主要特点2.1.1列式存储Druid对每一列数据分别进行存储和压缩。并且在查询的时候只查询需要查询的数据,支持fastscan、ranking和groupBy。2.2.2原生搜索索引Druid为字符串值创建倒排索引,实现快速的数据搜索和过滤。2.2.3开箱即用的流式和批处理数据摄取Apachekafka、HDFS、AWSS3连接器、流处理器。2.2.4灵活的数据模式Druid优雅地适应不断变化的数据模式和嵌套数据类型。2.2.5基于时间的优化分区Druid智能地根据时间对数据进行分区。因此,Druid基于时间的查询会明显快于传统数据库。2.2.6对SQL语句的支持除了原生的基于JSON的查询,Druid还支持基于HTTP和JDBC的SQL。2.2.7水平可扩展性每秒百万级数据摄取,海量数据存储,亚秒级查询。2.2.8易于运维您可以通过添加或删除服务器来扩展和收缩。Druid支持自动再平衡和故障转移。2.3技术选型技术比较Druid是一个实时处理时序数据的OLAP数据库。它的索引先是按照时间进行切片,查询的时候索引也是按照时间线进行路由。Kylin的核心是Cube。Cube是一种预先对数据进行多维索引的预计算技术。查询时,只扫描索引,不访问原始数据,以加快速度。Presto不使用MapReduce,在大多数场景下比Hive快一个数量级。关键是所有的处理都是在内存中完成的。Impala基于内存计算,速度快,支持的数据源不如Presto多。SparkSQL是基于Spark平台上的一个OLAP框架。其基本思想是增加机器进行并行计算,从而提高查询速度。ES最大的特点就是使用倒排索引来解决索引问题。根据研究,ES比Druid使用更多的资源来进行数据获取和聚合。框架选择从超大数据查询效率的角度:Druid>Kylin>Presto>SparkSQL从支持的数据源类型:Presto>SparkSQL>Kylin>Druid2.4数据摄取Druid同时支持流式和批式数据摄取。Druid通常通过像Kafka这样的消息总线(用于加载流式数据)或通过像HDFS这样的分布式文件系统(用于加载批量数据)连接到原始数据源。Druid将原始数据以分段的形式存储在数据节点中索引处理。段是查询优化的数据结构。2.5数据存储与大多数分析型数据库一样,Druid使用列式存储。根据不同列的数据类型(字符串、数字等),Druid对它们采用了不同的压缩和编码方式。Druid也为不同的列类型建立了不同类型的索引。类似于检索系统,Druid为字符串列创建倒排索引,以实现更快的搜索和过滤。与时序数据库类似,Druid会根据时间对数据进行智能分区,以实现更快的基于时间的查询。与大多数传统系统不同,Druid可以在摄取数据之前预先聚合数据。这种预聚合操作称为汇总,可以显着节省存储成本。2.6查询Druid支持JSON-over-HTTP和SQL查询方式。除了标准的SQL操作,Druid还支持大量独特的操作,使用Druid提供的算法套件快速进行计数、排名和分位数计算。Drui被设计成一个需要24/7全天候运行的强大系统。Druid具有以下特点,可以保证长期运行,保证数据不丢失。2.6.1数据副本Druid会根据配置的副本数创建多个数据副本,因此单机故障不会影响Druid的查询。2.6.2独立服务Druid明确了每个主要服务的名称,每个服务都可以根据使用情况做相应的调整。服务可以独立失败而不影响其他服务的正常运行。例如,如果数据摄取服务发生故障,则系统不会加载新数据,但仍然可以查询现有数据。2.6.3数据自动备份Druid自动将所有索引数据备份到一个文件系统中,可以是分布式文件系统,比如HDFS。您可以丢失所有Druid集群数据并从备份数据快速重新加载。2.6.4滚动更新使用滚动更新,可以在不停机的情况下更新Druid集群,让用户感觉不到。所有Druid版本都向后兼容。3.安装部署3.1环境介绍3.1.1Durid端口列表以下为Durid默认端口列表,防止端口被占用导致服务器启动失败角色端口介绍Coordinator8081管理集群上的数据可用性Historical8083存储历史查询数据Broker8082处理来自outside客户端的查询请求Realtime8084Overlord8090控制数据摄取工作负载的分配MiddleManager8091负责摄取数据Router8888可以将请求路由到Brokers,Coordinators,Overlords3.2安装方法Druid安装包有几种获取方式3.2.1源码compilationdruid/release主要用于自定义需求,比如结合实际环境中的外围依赖,或者对支持特定查询的部分进行优化等。3.2.2官网下载官网安装包下载:下载,包括最基本的Druid部署和运行组件3.2.3Imply组合套件Imply,该套件包含稳定版Druid组件,实时数据写入支持服务,以及图形展示QueryWebUI和SQL查询支持组件等,目的是构建基于Druid的数据分析应用产品,更方便快捷的部署。3.3单机配置参考3.3.1Nano-Quickstart1CPU,4GB内存启动命令:bin/start-nano-quickstart配置目录:conf/druid/single-server/nano-quickstart3.3.2MicroQuickstart4CPU,16GB内存启动命令:bin/start-micro-quickstart配置目录:conf/druid/single-server/micro-quickstart3.3.3small8CPU,64GBmemory(~i3.2xlarge)启动命令:bin/start-small配置目录:conf/druid/single-server/small3.3.4medium16CPU,128GBmemory(~i3.4xlarge)启动命令:bin/start-medium配置目录:conf/druid/single-server/medium3.3.5large32CPU,256GBmemory(~i3.8xlarge)启动命令:bin/start-large配置目录:conf/druid/single-server/large3.3.6超大64CPU,512GB内存(~i3.16xlarge)启动命令:bin/start-xlarge配置目录:conf/druid/single-server/xlarge3.4单机版安装3.4.1软件需求Java8(8u92+)Linux,MacOSX,orotherUnix-likeOS(Windowsisnotsupported)安装Docker环境安装Docker-compose环境3.4.2硬件要求Druid包括几个示例单服务器配置,以及使用这些配置启动Druid进程的脚本。如果您在笔记本电脑等小型机器上运行以进行快速评估,micro-quickstart配置是4CPU/16GBRAM环境的不错选择。如果您计划在本教程之外使用单机部署进行进一步评估,我们建议使用比micro-quickstart更大的配置。虽然为大型单机提供了示例配置,但在更高的规模下,我们建议在集群部署中运行Druid以实现容错和减少资源争用。3.5隐式安装推荐使用隐式安装方式。Imply方法提供了druid组件,以及图形、报表等功能。3.5.1安装perl因为启动druid需要perl环境,所以需要安装yuminstallperlgcckernel-devel3。5.2关闭防火墙#查看firestatussystemctlstatusfirewalld#暂时关闭防火墙systemctlstopfirewalld#永久关闭防火墙systemctldisablefirewalld3.5.3安装JDK选择适合自己系统的版本,我的是Centos764位,所以如果是我我会选择这个版本,记得下载的话选择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-zxvfjdk-8u301-linux-x64.tar.gz3.5.3.3配置环境变量配置环境变量,修改profile文件,添加如下内容vi/etc/profileexportJAVA_HOME=/usr/本地/java/jdk1.8.0_301exportCLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexportPATH=$PATH:$JAVA_HOME/bin3.5.3.4有效配置源/etc/profile3.5.3.5检查环境java-version3.5.4安装imply3.5.4.1登录Imply官网,访问https://imply.io/get-started,进入Imply官网,找到对应版本的imply安装包,填写简要信息进行下载。3.5.4.2解压imply,下载,上传到服务器,解压#创建imply安装目录mkdir/usr/local/imply#解压implytar-zxvfimply-2021.05-1.tar.gz3.5.4.3环境准备工作进入imply-2021.05-1目录后#进入imply目录cdimply-2021.05-13.5.4.4快速启动使用本地存储,默认元数据存储derby,启动zookeeper体验druid#创建日志目录mkdirlogs#使用命令启动nohupbin/supervise-cconf/supervise/quickstart.conf>logs/quickstart.log2>&1&3.5.4.5查看日志通过quickstart.log查看impl启动日志tail-flogs/quickstart.log会打印每次服务启动时退出可以通过var/sv/xxx/current查看日志,查看服务启动时的日志信息tail-fvar/sv/broker/current3.5.4.6访问imply,访问imply的管理页面即可9095端口http://192.168.64.173:9095/3.5.4.7访问Druid访问8888端口访问我们的druidhttp://192.168.64.173:8888/本文由传智教育博学谷教研组发表-野生建筑师。转载请注明出处!如果本文对您有帮助,请关注并点赞;有什么建议也可以留言或私信。您的支持是我坚持创作的动力