4.1集群安装
集群配置的规划需要根据需求来定制,下面以一个开发环境机器搭建为例,描述如何搭建一个有HA特性的Druid集群.
集群部署有以下几点需要说明
1. 为了保证HA,主节点部署两台
2. 管理节点与查询节点可以考虑多核大内存的机器
角色 |
机器 |
配置 |
集群角色 |
主节点 |
10.5.24.137 |
8C16G |
Coordinator,Overlord |
主节点 |
10.5.24.138 |
8C16G |
Coordinator,Overlord |
数据节点,查询节点 |
10.5.24.139 |
8C16G |
Historical, MiddleManager, Tranquility,Broker,Pivot Web |
数据节点,查询节点 |
10.5.24.140 |
8C16G |
Historical, MiddleManager, Tranquility,(数据节点,查询节点)Broker |
在druid包下,有以下内容:
- LICENSE - license文件
- bin/ - 对此quickstart有用的脚本
- conf/ - 集群设置的配置模板
- conf-quickstart/ - 此quickstart的配置
- extensions/ - Druid的所有扩展
- haddop-dependencies/ - Druid haddop的依赖
- lib/ - 所有Druid核心包含的包
- quickstart/ - 对此quickstart有用的文件
需要修改conf文件夹下的配置文件
4.1.1配置deep storage
Druid用分布式文件系统或大对象(blob)存储来进行数据存储。最常用的是亚马逊S3和HDFS。
4.1.2配置Hadoop (可选)
如果需要通过hadoop集群加载数据,在Druid集群中需要如下配置:
更新conf/middleManager/runtime.properties中的druid.indexer.task.hadoopWorkingPath参数,将索引过程中需要的临时文件指向HDFS路径。
通常会配置成druid.indexer.task.hadoopWorkingPath=/tmp/druid-indexing
将hadoop的xml(core-site.xml, hdfs-site.xml, yarn-site.xml, mapred-site.xml)配置文件放到Druid节点的classpath路径里,可以copy到conf/druid/_common/core-site.xml, conf/druid/_common/hdfs-site.xml等等。请注意,您不需要为了从Hadoop加载数据而使用HDFS深存储。例如,如果您的集群在Amazon Web Services上运行,我们建议使用S3进行深度存储,即使您正在使用Hadoop或Elastic MapReduce加载数据。
配置Druid coordination
在这个简单的集群示例中,可以在同一台服务器上,部署单个Druid Coordinator、Druid Overlord、一个ZooKeeper实例和一个嵌入式Derby元数据数据库。
修改conf/druid/_common/common.runtime.properties配置文件中druid.zk.service.host参数,指向zookeeper服务器地址。修改druid.metadata.storage.connector.connectURI和druid.metadata.storage.connector.host参数执行元数据存储地址。
4.2数据摄取
流数据的摄取有两种方式:
通过实时节点以Pull的方式摄取
通过索引服务的方式以Push方式摄取
4.2.1以Pull方式摄取
Ingestion Spec是一个JSON文本,由三部分组成
{
“dataSchema”:{,,,},#Json对象,指明数据源格式、数据解析格式、维度
“ioConfig”:{,,,},#Json对象,指明数据如何在Druid中存储
“tuningConfig”:{,,,}#Json对象,指明存储优化配置
}
{
{
数据源的描述 |
||
"type" : "index",
"spec" :
{
数据源名字 |
||
"dataSchema" : {
"dataSource" : "wikipedia",
"parser" : {
Json对象 如何解析数据 |
||
"type" : "string",
"parseSpec" : {
"format" : "json",
指明数据源格式,维度列表、指标列表、时间戳列名 json、csv、tsv |
||
"dimensionsSpec" : {
"dimensions" : [
"channel",
"cityName",
维度名列表 |
||
"comment",
"countryIsoCode",
"countryName",
"isAnonymous",
"isMinor",
"isNew",
"isRobot",
"isUnpatrolled",
"metroCode",
"namespace",
"page",
"regionIsoCode",
"regionName",
"user",
{ "name" : "commentLength", "type" : "long" },
{ "name" : "deltaBucket", "type" : "long" },
"flags",
"diffUrl",
{ "name": "added", "type": "long" },
{ "name": "deleted", "type": "long" },
{ "name": "delta", "type": "long" }
]
},
"timestampSpec": {
"column": "timestamp",
时间戳列名 |
||
"format": "iso"
}
}
]
},
"timestampSpec": {
"column": "timestamp",
"format": "iso"
}
}
所有指标列的信息 |
||
},
"metricsSpec" : [],
"granularitySpec" : {
Json对象,指明数据的存储和查询粒度 |
||
"type" : "uniform",
"segmentGranularity" : "day",
"queryGranularity" : "none",
"intervals" : ["2016-06-27/2016-06-28"],
"rollup" : false
数据源的来源 |
||
}
},
"ioConfig" : {
"type" : "index",
"firehose" : {
"type" : "local",
"baseDir" : "quickstart/",
"filter" : "wikipedia-2016-06-27-sampled.json"
},
"appendToExisting" : false
},
优化数据摄取的配置 |
||
"tuningConfig" : {
"type" : "index",
"targetPartitionSize" : 5000000,
"maxRowsInMemory" : 25000,
"forceExtendableShardSpecs" : true
}
}
}
4.2.2以Push方式摄取
以Push方式摄取需要启动索引服务,先启动中间管理者,和统治节点(Overload node)
4.2.3以静态文件摄取
同样通过索引服务的方式。批量摄取数据。需要一个通知节点提交一个索引任务。
4.2.4以hadoop方式摄取
Druid Hadoop Index job支持从HDFS上获取数据,并摄入到Druid中,同样是通过Http启动一个Json配置文件
命令:
curl –X ‘POST’ –H ‘Content-Type:application/json’ –d @hadoop-index-task.json http://localhost:8090/druid/indexer/v1/task