数据分析工具:Apache Druid:Druid集群部署与管理_第1页
数据分析工具:Apache Druid:Druid集群部署与管理_第2页
数据分析工具:Apache Druid:Druid集群部署与管理_第3页
数据分析工具:Apache Druid:Druid集群部署与管理_第4页
数据分析工具:Apache Druid:Druid集群部署与管理_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据分析工具:ApacheDruid:Druid集群部署与管理1数据分析工具:ApacheDruid:Druid集群部署与管理1.1ApacheDruid简介ApacheDruid是一个开源的数据存储和查询系统,专为实时分析大规模数据集而设计。它能够处理PB级别的数据,提供低延迟的数据查询和聚合功能,适用于实时监控、日志分析、商业智能等场景。Druid支持多种数据源,如CSV文件、数据库、Hadoop等,并能够实时摄取数据,无需批处理。1.1.1特点实时数据摄取:Druid能够实时处理数据流,无需等待批处理完成即可查询数据。高性能查询:通过预聚合和列式存储,Druid能够快速响应查询,即使在大规模数据集上也能实现亚秒级响应。可扩展性:Druid集群可以水平扩展,通过增加节点来处理更多数据和查询。高可用性:Druid集群设计为高可用,能够容忍节点故障,保证数据的完整性和查询的连续性。1.2Druid的架构与组件Druid的架构由多个组件组成,每个组件负责不同的功能,共同协作以实现高效的数据处理和查询。1.2.1组件Broker:负责接收查询请求,优化查询计划,并将查询分发到Historical和Realtime节点。Historical:存储历史数据,处理历史数据的查询。Realtime:摄取实时数据流,处理实时数据的查询。Coordinator:管理数据段的加载和卸载,确保数据在Historical和Realtime节点之间正确分布。MiddleManager:负责数据段的下载和存储,以及数据的预聚合。Overlord:管理实时数据摄取任务,分配任务给Realtime节点。Indexer:用于批量加载数据,可以是实时数据摄取的一部分,也可以独立运行。Segment:数据的最小存储单位,包含预聚合的数据和元数据。1.2.2架构图graphTD

A[Broker]-->|Query|B[Historical]

A-->|Query|C[Realtime]

D[Coordinator]-->|Manage|B

D-->|Manage|C

E[Overlord]-->|Task|C

F[Indexer]-->|Load|B

G[MiddleManager]-->|Store|B

G-->|Store|C1.3Druid集群的工作原理Druid集群通过分布式架构实现数据的存储和查询。数据被分割成多个段(Segment),每个段包含预聚合的数据,以提高查询性能。集群中的节点根据角色分工,共同处理数据和查询。1.3.1数据摄取流程数据摄取:数据通过Realtime节点或Indexer进入集群。预聚合:MiddleManager对数据进行预聚合,生成Segment。数据分发:Coordinator管理数据段的分发,确保数据在集群中均匀分布。数据存储:Historical和Realtime节点存储数据段,Historical存储历史数据,Realtime存储实时数据。1.3.2查询处理流程查询接收:Broker接收查询请求,优化查询计划。查询分发:Broker将查询分发到Historical和Realtime节点。数据查询:Historical和Realtime节点根据查询请求处理数据。结果聚合:Broker收集各节点的查询结果,进行聚合,然后返回给客户端。1.3.3示例:部署Druid集群以下是一个简单的示例,展示如何使用Docker部署一个Druid集群。#下载Druid的Docker镜像

dockerpulldruidio/druid:latest

#启动Coordinator节点

dockerrun-d--namedruid-coordinator-p8081:8081druidio/druid:latestcoordinator

#启动Historical节点

dockerrun-d--namedruid-historical-p8082:8082druidio/druid:latesthistorical

#启动Realtime节点

dockerrun-d--namedruid-realtime-p8083:8083druidio/druid:latestrealtime

#启动Broker节点

dockerrun-d--namedruid-broker-p8080:8080druidio/druid:latestbroker

#启动MiddleManager节点

dockerrun-d--namedruid-middlemanager-p8091:8091druidio/druid:latestmiddlemanager

#启动Overlord节点

dockerrun-d--namedruid-overlord-p8090:8090druidio/druid:latestoverlord

#启动Zookeeper(Druid集群需要Zookeeper进行协调)

dockerrun-d--namezookeeper-p2181:2181zookeeper:latest1.3.4示例:数据摄取假设我们有一个CSV文件,包含用户活动数据,我们可以使用Druid的Indexer来摄取这些数据。{

"type":"index",

"spec":{

"dataSchema":{

"dataSource":"user_activity",

"parser":{

"type":"string",

"parseSpec":{

"format":"csv",

"timestampSpec":{

"column":"timestamp",

"format":"yyyy-MM-dd'T'HH:mm:ss.SSSZ"

},

"dimensionsSpec":{

"dimensions":["user_id","activity_type"],

"dimensionExclusions":[]

},

"columns":["timestamp","user_id","activity_type","duration"],

"skipHeaderRecord":true

}

},

"metricsSpec":[

{

"type":"count",

"name":"count"

},

{

"type":"doubleSum",

"name":"total_duration",

"fieldName":"duration"

}

],

"granularitySpec":{

"type":"uniform",

"segmentGranularity":"HOUR",

"queryGranularity":"MINUTE",

"rollup":true

}

},

"ioConfig":{

"type":"index",

"firehose":{

"type":"local",

"baseDir":"/data",

"filter":"user_activity.csv"

},

"appendToExisting":false

},

"tuningConfig":{

"type":"index",

"maxRowsInMemory":100000,

"maxRowsPerSegment":5000000,

"maxRowsInRollup":1000000

}

}

}将上述JSON配置文件保存为user_activity_index.json,然后使用以下命令启动数据摄取任务:curl-XPOST-H'Content-Type:application/json'--data-binary@user_activity_index.jsonhttp://druid-overlord:8090/druid/indexer/v1/task1.3.5示例:查询数据查询数据时,我们可以通过Broker节点发送查询请求。以下是一个查询示例,展示如何查询用户活动数据的总时长。{

"queryType":"timeseries",

"dataSource":"user_activity",

"granularity":"MINUTE",

"intervals":["2023-01-01T00:00:00.000Z/2023-01-02T00:00:00.000Z"],

"aggregations":[

{

"type":"doubleSum",

"name":"total_duration",

"fieldName":"duration"

}

],

"postAggregations":[

{

"type":"arithmetic",

"name":"avg_duration",

"fn":"/",

"fields":[

{

"type":"fieldAccess",

"name":"total_duration"

},

{

"type":"fieldAccess",

"name":"count"

}

]

}

],

"context":{

"timeout":"10s"

}

}将上述JSON配置文件保存为user_activity_query.json,然后使用以下命令发送查询请求:curl-XPOST-H'Content-Type:application/json'--data-binary@user_activity_query.jsonhttp://druid-broker:8080/druid/v2通过上述示例,我们可以看到ApacheDruid如何通过其独特的架构和组件,实现大规模数据的实时摄取和高效查询。在实际应用中,Druid的配置和使用会更加复杂,但其核心原理和流程与上述示例相似。2部署ApacheDruid集群2.1环境准备与要求在开始部署ApacheDruid集群之前,确保满足以下环境要求:操作系统:Druid支持在Linux和MacOS上运行,推荐使用Linux系统以获得最佳性能。JDK版本:需要安装JDK1.8或更高版本。内存:每个节点至少需要8GB的内存,对于高性能查询,建议配置更多内存。磁盘空间:至少需要50GB的磁盘空间用于数据存储和日志文件。网络:所有节点之间需要有良好的网络连接,以确保数据同步和查询响应速度。2.2下载与安装Druid2.2.1下载Druid访问ApacheDruid的官方网站,下载最新版本的Druid。以druid-0.18.0为例,下载链接如下:wget/druid/0.18.0/apache-druid-0.18.0.tar.gz2.2.2解压与安装解压下载的tar包,并将解压后的目录移动到一个合适的位置,例如/opt目录下。tar-xzfapache-druid-0.18.0.tar.gz-C/opt/

cd/opt/

mvapache-druid-0.18.0druid2.2.3启动DruidDruid集群由多个角色组成,包括Overlord、Coordinator、Historical、MiddleManager、Broker和Realtime。每个角色都需要在不同的机器上启动,或者在单机环境下模拟集群。启动Coordinatorcd/opt/druid/

./bin/start-coordinator.sh启动Overlord./bin/start-overlord.sh启动Historical./bin/start-historical.sh启动MiddleManager./bin/start-middlemanager.sh启动Broker./bin/start-broker.sh启动Realtime./bin/start-realtime.sh2.3配置Druid集群Druid集群的配置主要涉及以下几个方面:集群配置:定义集群的拓扑结构,包括各个角色的机器列表和端口。数据源配置:定义数据源的属性,如数据格式、存储策略等。查询配置:定义查询的性能参数,如缓存大小、查询超时时间等。2.3.1配置集群编辑/opt/druid/conf/druid/_common/perties文件,添加集群配置信息。druid.zk.service.host=00

druid.zk.service.port=2181

druid.zk.service.path=/druid2.3.2配置数据源在/opt/druid/conf/druid/coordinator目录下,创建一个数据源的配置文件,例如exampleDataSperties。druid.indexer.task.timeout=PT1H

druid.indexer.task.maxVirtSize=100GB

druid.indexer.task.maxRunning=10

druid.indexer.task.maxPending=102.3.3配置查询在/opt/druid/conf/druid/broker目录下,编辑perties文件,配置查询参数。druid.broker.maxCacheSizeBytes=10GB

druid.broker.cache.size=10GB

druid.broker.cache.ttl=PT1H2.3.4启动服务重新启动所有Druid服务,以使配置生效。./bin/restart.sh2.3.5监控与管理Druid提供了Web界面进行监控和管理,访问http://<Coordinator_IP>:8080/druid/indexer/v1/task可以查看和管理任务状态。2.4示例:数据导入假设我们有一个CSV文件example_data.csv,内容如下:timestamp,metric,host

2022-01-01T00:00:00.000Z,10.5,server1

2022-01-01T00:01:00.000Z,11.3,server2

2022-01-01T00:02:00.000Z,12.1,server1我们可以使用Druid的index任务来导入数据。创建一个JSON格式的任务配置文件exampleTask.json:{

"type":"index",

"spec":{

"dataSchema":{

"dataSource":"exampleDataSource",

"parser":{

"type":"string",

"parseSpec":{

"format":"csv",

"timestampSpec":{

"column":"timestamp",

"format":"iso"

},

"dimensionsSpec":{

"dimensions":["host"],

"dimensionExclusions":[]

},

"columns":["timestamp","metric","host"],

"skipHeaderRecord":true

}

},

"metricsSpec":[

{

"type":"doubleSum",

"name":"metric",

"fieldName":"metric"

}

],

"granularitySpec":{

"type":"uniform",

"segmentGranularity":"HOUR",

"queryGranularity":"MINUTE",

"rollup":true

}

},

"ioConfig":{

"type":"index",

"firehose":{

"type":"local",

"baseDir":"/path/to/data",

"filter":"example_data.csv"

},

"appendToExisting":false

},

"tuningConfig":{

"type":"index",

"maxRowsInMemory":100000,

"indexSpec":{

"bitmap":{

"type":"roaring"

}

}

}

}

}使用curl命令提交任务:curl-XPOST-H'Content-Type:application/json'--data-binary@exampleTask.jsonhttp://<Coordinator_IP>:8081/druid/indexer/v1/task通过访问http://<Coordinator_IP>:8080/druid/indexer/v1/task可以查看任务执行状态。2.5结论通过上述步骤,您可以成功部署和配置一个ApacheDruid集群,用于高效的数据分析和查询。确保所有配置正确无误,并根据实际需求调整参数,以获得最佳性能。3Druid集群组件详解3.1Broker节点配置3.1.1原理Broker节点在ApacheDruid集群中主要负责处理客户端的查询请求。它不存储数据,而是从Historical节点获取数据并进行聚合计算,然后将结果返回给客户端。Broker节点的配置优化直接影响到查询性能和效率。3.1.2内容Broker节点的配置主要在druid-broker.conf文件中进行。以下是一个示例配置:druid.broker.http.port=8082

druid.broker.queryCache.percent=0.1

druid.broker.maxConcurrentQueries=10

druid.broker.maxPendingConcurrentQueries=20

druid.broker.maxCacheSizeBytes=1073741824

druid.broker.cache.sizeBytes=1073741824

druid.broker.cache.type=onheap

druid.broker.cache.ttl=PT1H

druid.broker.cache.query.enabled=true

druid.broker.cache.query.maxSizeBytes=1073741824

druid.broker.cache.query.ttl=PT1H

druid.broker.cache.query.type=onheap

druid.broker.cache.query.enabled=true

druid.broker.cache.query.maxSizeBytes=1073741824

druid.broker.cache.query.ttl=PT1H

druid.broker.cache.query.type=onheap

druid.broker.cache.query.enabled=true

druid.broker.cache.query.maxSizeBytes=1073741824

druid.broker.cache.query.ttl=PT1H

druid.broker.cache.query.type=onheap

druid.broker.cache.query.enabled=true

druid.broker.cache.query.maxSizeBytes=1073741824

druid.broker.cache.query.ttl=PT1H

druid.broker.cache.query.type=onheap

druid.broker.cache.query.enabled=true

druid.broker.cache.query.maxSizeBytes=1073741824

druid.broker.cache.query.ttl=PT1H

druid.broker.cache.query.type=onheap

druid.broker.cache.query.enabled=true

druid.broker.cache.query.maxSizeBytes=1073741824

druid.broker.cache.query.ttl=PT1H

druid.broker.cache.query.type=onheap

druid.broker.cache.query.enabled=true

druid.broker.cache.query.maxSizeBytes=1073741824

druid.broker.cache.query.ttl=PT1H

druid.broker.cache.query.type=onheapdruid.broker.http.port:Broker节点的HTTP端口,用于接收查询请求。druid.broker.queryCache.percent:用于缓存查询结果的内存比例。druid.broker.maxConcurrentQueries:Broker节点同时处理的最大查询数量。druid.broker.maxPendingConcurrentQueries:Broker节点等待处理的最大查询数量。druid.broker.maxCacheSizeBytes:Broker节点缓存的最大大小。druid.broker.cache.*:缓存配置,包括类型、大小和TTL。3.2Historical节点配置3.2.1原理Historical节点是ApacheDruid集群中的数据存储节点。它负责存储和维护数据段,是Broker节点查询数据的来源。Historical节点的配置直接影响数据的存储效率和查询性能。3.2.2内容Historical节点的配置主要在druid-historical.conf文件中进行。以下是一个示例配置:druid.historical.http.port=8083

druid.historical.segmentCache.size=10737418240

druid.historical.segmentCache.ttl=PT24H

druid.historical.segmentCache.type=onheap

druid.historical.segmentCpress=true

druid.historical.segmentCpressType=gzip

druid.historical.segmentCpressThresholdBytes=10485760

druid.historical.segmentCpressBlockSizeBytes=1048576

druid.historical.segmentCpressLevel=6

druid.historical.segmentCpressEnabled=true

druid.historical.segmentCpressType=gzip

druid.historical.segmentCpressThresholdBytes=10485760

druid.historical.segmentCpressBlockSizeBytes=1048576

druid.historical.segmentCpressLevel=6druid.historical.http.port:Historical节点的HTTP端口。druid.historical.segmentCache.*:数据段缓存配置,包括大小、TTL、类型和压缩设置。3.3MiddleManager节点配置3.3.1原理MiddleManager节点负责接收Overlord节点的指令,进行数据段的加载、卸载和存储。它在数据摄取和存储过程中扮演重要角色。3.3.2内容MiddleManager节点的配置主要在druid-middlemanager.conf文件中进行。以下是一个示例配置:druid.middleManager.http.port=8091

druid.storage.type=local

druid.storage.basePath=/var/druid/data

druid.storage.extension=druid

druid.storage.maxSize=107374182400

druid.storage.minSize=10737418240

druid.storage.maxSegmentsToLoad=1000

druid.storage.maxSegmentsToUnload=100

druid.storage.maxSegmentsToLoadPerHour=100

druid.storage.maxSegmentsToUnloadPerHour=10

druid.storage.maxSegmentsToLoadPerInterval=10

druid.storage.maxSegmentsToUnloadPerInterval=1

druid.storage.maxSegmentsToLoadPerIntervalPerDataSource=1

druid.storage.maxSegmentsToUnloadPerIntervalPerDataSource=1druid.middleManager.http.port:MiddleManager节点的HTTP端口。druid.storage.*:存储配置,包括类型、路径、最大和最小大小、最大加载和卸载的数据段数量。3.4Coordinator节点配置3.4.1原理Coordinator节点是ApacheDruid集群的管理节点,负责协调数据段在Historical节点之间的分配,确保数据的均衡分布和高可用性。3.4.2内容Coordinator节点的配置主要在druid-coordinator.conf文件中进行。以下是一个示例配置:druid.coordinator.http.port=8081

druid.coordinator.loadQueue.capacity=100

druid.coordinator.loadQueue.capacityPerDataSource=10

druid.coordinator.loadQueue.capacityPerInterval=1

druid.coordinator.loadQueue.capacityPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTier=10

druid.coordinator.loadQueue.capacityPerTierPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerInterval=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid.coordinator.loadQueue.capacityPerTierPerIntervalPerDataSource=1

druid

#数据分析工具:ApacheDruid:数据摄入与查询

##数据摄入流程

在ApacheDruid中,数据摄入是指将数据从各种来源加载到Druid集群的过程。这一过程可以是实时的,也可以是离线的,取决于数据的性质和需求。数据摄入流程主要包括以下步骤:

1.**数据准备**:数据需要被格式化为Druid可以理解的格式,通常是JSON或CSV。

2.**数据摄入**:通过Druid的摄入工具,如`indexer`或`real-time`任务,将数据加载到集群中。

3.**数据分片**:数据被分割成多个段,每个段可以独立查询,以提高查询性能。

4.**数据复制**:为了提高可用性和容错性,数据段会被复制到集群中的多个节点上。

##实时数据摄入配置

实时数据摄入允许Druid处理流式数据,如来自Kafka的消息。下面是一个实时摄入任务的配置示例:

```json

{

"type":"realtime",

"spec":{

"dataSchema":{

"dataSource":"exampleDataSource",

"parser":{

"type":"string",

"parseSpec":{

"format":"json",

"timestampSpec":{

"column":"timestamp",

"format":"auto"

},

"dimensionsSpec":{

"dimensions":["dim1","dim2"],

"dimensionExclusions":[]

},

"metricsSpec":[

{

"type":"count",

"name":"count"

},

{

"type":"doubleSum",

"name":"metric1",

"fieldName":"value1"

}

],

"granularitySpec":{

"segmentGranularity":"HOUR",

"queryGranularity":"MINUTE",

"rollup":true

}

}

},

"ioConfig":{

"firehose":{

"type":"kafka",

"kafkaBrokers":"localhost:9092",

"topic":"exampleTopic"

},

"appendToExisting":false

},

"tuningConfig":{

"type":"druid_realtime_default_tuning",

"maxRowsInMemory":100000,

"maxRowsPerSegment":5000000,

"maxRowsInPendingSegment":1000000

}

},

"ioConfig":{

"type":"index",

"firehose":{

"type":"kafka",

"kafkaBrokers":"localhost:9092",

"topic":"exampleTopic"

},

"indexSpec":{

"type":"default",

"bitmapVersion":"v1",

"dimensionsSpec":{

"dimensions":["dim1","dim2"],

"spatialDimensions":[]

},

"metricsSpec":[

{

"type":"count",

"name":"count"

},

{

"type":"doubleSum",

"name":"metric1",

"fieldName":"value1"

}

],

"rollup":true

}

},

"tuningConfig":{

"type":"druid_realtime_default_tuning",

"maxRowsInMemory":100000,

"maxRowsPerSegment":5000000,

"maxRowsInPendingSegment":1000000

}

}

}3.4.3解释dataSource:指定数据源的名称。parser:定义数据的解析方式,包括时间戳和维度字段。metricsSpec:定义要计算的度量,如计数和数值求和。granularitySpec:定义数据的粒度,如小时或分钟。firehose:配置数据摄入的来源,这里是Kafka。tuningConfig:调整实时摄入的性能参数。3.5离线数据摄入配置离线数据摄入适用于批量数据处理,如从HDFS或S3加载历史数据。以下是一个离线摄入任务的配置示例:{

"type":"index",

"spec":{

"dataSchema":{

"dataSource":"exampleDataSource",

"parser":{

"type":"string",

"parseSpec":{

"format":"json",

"timestampSpec":{

"column":"timestamp",

"format":"auto"

},

"dimensionsSpec":{

"dimensions":["dim1","dim2"],

"dimensionExclusions":[]

},

"metricsSpec":[

{

"type":"count",

"name":"count"

},

{

"type":"doubleSum",

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论