下载解压安装包
下载Druid包,解压到安装目录:
1 | wget http://static.druid.io/artifacts/releases/druid-0.12.3-bin.tar.gz |
下载MySQL metadata store extension,并解压到extensions目录中:
1 | wget http://static.druid.io/artifacts/releases/mysql-metadata-storage-0.12.3.tar.gz |
手动创建 druid-0.12.3/var/tmp 和 druid-0.12.3/var/hadoop-tmp 目录
创建Metadata storage和Deep storage
Metadata storage
我使用的是MySql数据库作为元数据库,在MySql中创建一个Druid用户和Druid数据库,并给Druid用户配置Druid数据库的所有权限。
Deep storage
我使用HDFS作为Druid的Deep storage,在hdfs创建/druid目录,相关命令如下:
1 | sudo su hdfs |
集群分配
线上集群一共10台机器,启动8个数据节点、2个Master节点、2个查询节点。
数据节点:包括 Historical 和 MiddleManager 进程。
Master节点:包括 Coordinator 和 Overlord 进程。
查询节点:包括 Broker 和 Router(可选) 进程。
配置
创建druid-0.12.3/conf-online目录,将conf/中的配置复制到conf-online/中,在进行修改,具体配置如下:
Common配置
配置文件:conf-online/druid/_common/common.runtime.properties
复制hadoop配置文件
将Hadoop configuration XMLs(core-site.xml, hdfs-site.xml, yarn-site.xml, mapred-site.xml)复制到conf-online/druid/_common中。
配置 Zookeeper
1 | # |
添加 extensions (“druid-kafka-indexing-service” “mysql-metadata-storage” “druid-hdfs-storage”)
1 | druid.extensions.loadList=["druid-kafka-eight", "druid-histogram", "druid-datasketches", "druid-lookups-cached-global", "mysql-metadata-storage", "druid-kafka-indexing-service", "druid-hdfs-storage"] |
配置 Metadata storage
1 | # |
配置 Deep storage
1 | # |
配置 Indexing service logs
1 | # |
设置 Monitoring 日志级别
1 | # |
Coordinator配置
配置目录:conf-online/druid/coordinator
jvm.config
修改时区
1 | -server |
runtime.properties
修改host和port
1 | druid.service=druid/coordinator |
Overlord配置
配置目录:conf-online/druid/overlord
jvm.config
修改时区
1 | -server |
runtime.properties
修改host和port
1 | druid.service=druid/overlord |
Historical配置
配置目录:conf-online/druid/historical
jvm.config
修改时区和MaxDirectMemorySize
1 | -server |
runtime.properties
修改host和port
调整druid.server.http.numThreads和druid.processing.numThreads(建议cores-1)
注意:MaxDirectMemorySiz >= druid.processing.buffer.sizeBytes * (druid.processing.numMergeBuffers + druid.processing.numThreads + 1)
druid.segmentCache.locations是本地缓存segment的地方
配置historical的缓存
1 | druid.service=druid/historical |
MiddleManager配置
配置目录:conf-online/druid/middleManager
jvm.config
修改时区
1 | -server |
runtime.properties
修改host和port
修改druid.indexer.runner.javaOpts,配置MaxDirectMemorySize
修改druid.indexer.fork.property.druid.processing相关配置
指定druid.indexer.task.defaultHadoopCoordinates,HadoopIndexTasks使用的Hadoop版本
1 | druid.service=druid/middleManager |
Broker配置
配置目录:conf-online/druid/broker
jvm.config
修改时区
修改-Xms、-Xmx、MaxDirectMemorySize
1 | -server |
runtime.properties
修改host和port
调整druid.server.http.numThreads和druid.processing.numThreads(建议cores-1)
注意:MaxDirectMemorySiz >= druid.processing.buffer.sizeBytes * (druid.processing.numMergeBuffers + druid.processing.numThreads + 1)
设置druid.sql.enable为true,可以使用sql
设置druid.query.groupBy.maxOnDiskStorag。合并缓冲区或dictionary填满时,将结果集溢出到磁盘的最大磁盘空间(每次查询)。
1 | druid.service=druid/broker |
启动集群
修改bin/node.sh
在文件前面添加 DRUID_CONF_DIR=”conf-online/druid”
复制配置到其他节点上,注意要修改 host
启动 Master节点
1 | bin/coordinator.sh start |
启动 Data节点
1 | bin/historical.sh start |
启动 Query节点
1 | bin/broker.sh start |
安装Superset
Superset是一款开源的数据探索与可视化工具,支持Druid数据源,可以将druid中的数据可视化的展示,还可以支持Sql查询。
项目地址:https://github.com/apache/incubator-superset
安装参考:https://superset.incubator.apache.org/installation.html
遇到的问题
Not enough direct memory.
1 | Not enough direct memory. Please adjust -XX:MaxDirectMemorySize, druid.processing.buffer.sizeBytes, druid.processing.numThreads, or druid.processing.numMergeBuffers: maxDirectMemory[1,073,741,824], memoryNeeded[6,979,321,856] = druid.processing.buffer.sizeBytes[536,870,912] * (druid.processing.numMergeBuffers[2] + druid.processing.numThreads[10] + 1) |
修改-XX:MaxDirectMemorySize,使得:MaxDirectMemorySiz >= druid.processing.buffer.sizeBytes * (druid.processing.numMergeBuffers + druid.processing.numThreads + 1)
Failed to create directory within 10000 attempts
手动创建var/tmp目录,路径错误,在druid中有一个环境路径需要提前手工创建environment:java.io.tmpdir=var/tmp
1 | java.lang.IllegalStateException: Failed to create directory within 10000 attempts (tried 1538122986466-0 to 1538122986466-9999) |