1.節點服務規划
master:coordinator,overlord
slave1:historical,middle_manager
slave2:router,broker
2.下載安裝包解壓
從druid官網(https://druid.apache.org/downloads.html) 下載,我這里下載的是druid-0.17.0
tar -zxvf apache-druid-0.17.0-bin.tar.gz
解壓后的目錄結構如下:
3.在mysql中創建druid元數據庫
CREATE DATABASE druid DEFAULT CHARACTER SET utf8;
4.開始配置
現在master節點上配置,配置好后scp到slave1,slave2節點上
配置信息如下:
在解壓后druid文件的當前目錄vim conf/druid/cluster/_common/common.runtime.properties
# If you specify `druid.extensions.loadList=[]`, Druid won't load any extension from file system.
# If you don't specify `druid.extensions.loadList`, Druid will load all the extensions under root extension directory.
# More info: https://druid.apache.org/docs/latest/operations/including-extensions.html
druid.extensions.loadList=["druid-hdfs-storage","mysql-metadata-storage"]
# If you have a different version of Hadoop, place your Hadoop client jar files in your hadoop-dependencies directory
# and uncomment the line below to point to your directory.
#druid.extensions.hadoopDependenciesDir=/my/dir/hadoop-dependencies
#
# Hostname
#
druid.host=master
#
# Zookeeper
#
druid.zk.service.host=master:2181,slave1:2181,slave2:2181
druid.zk.paths.base=/druid
##將Metadata storage配置為mysql,默認是derby注釋掉
# For MySQL (make sure to include the MySQL JDBC driver on the classpath):
druid.metadata.storage.type=mysql
druid.metadata.storage.connector.connectURI=jdbc:mysql://master:3306/druid
druid.metadata.storage.connector.user=root
druid.metadata.storage.connector.password=123456
#將數據文件存儲到hdfs,默認的注釋掉
# For HDFS:
druid.storage.type=hdfs
druid.storage.storageDirectory=/druid/segments
#將indexer.log文件存儲到hdfs,默認的注釋掉
druid.indexer.logs.type=hdfs
druid.indexer.logs.directory=/druid/indexing-logs
目錢主要需要根據默認配置項更改的如上,其他的采用默認配置項
5.配置個各個服務的內存消耗(尤為重要)
該項配置根據自己的服務器的資源情況而定
配置coordinator-overlord的jvm內存值
vim conf/druid/cluster/master/coordinator-overlord/jvm.config
-server
-Xms512m
-Xmx512m
-XX:+ExitOnOutOfMemoryError
-XX:+UseG1GC
-Duser.timezone=UTC
-Dfile.encoding=UTF-8
-Djava.io.tmpdir=var/tmp
-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager
-Dderby.stream.error.file=var/druid/derby.log
主要配置-Xms512m和-Xmx512m
配置數據節點的historical的jvm內存值,vim conf/druid/cluster/data/historical/jvm.config
-server
-Xms512m
-Xmx512m
-XX:MaxDirectMemorySize=128m
-XX:+ExitOnOutOfMemoryError
-Duser.timezone=UTC
-Dfile.encoding=UTF-8
-Djava.io.tmpdir=var/tmp
-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager
主要配置-Xms512m,-Xmx512m和-XX:MaxDirectMemorySize=128m
配置數據節點的historical的線程並發數,vim conf/druid/cluster/data/historical/runtime.properties
druid.processing.buffer.sizeBytes=5000000
druid.processing.numMergeBuffers=2
druid.processing.numThreads=10
druid.server.maxSize=300000000
主要是以上四項根據自己服務器資源調整,其他默認配置
配置數據節點的middleManager的jvm內存值,vim conf/druid/cluster/data/middleManager/jvm.config
-server
-Xms128m
-Xmx128m
-XX:+ExitOnOutOfMemoryError
-Duser.timezone=UTC
-Dfile.encoding=UTF-8
-Djava.io.tmpdir=var/tmp
-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager
主要配置-Xms128m,-Xmx128m和-XX:MaxDirectMemorySize=128m
配置數據節點的middleManager的線程並發數,vim conf/druid/cluster/data/middleManager/runtime.properties
druid.indexer.fork.property.druid.processing.numMergeBuffers=2
druid.indexer.fork.property.druid.processing.buffer.sizeBytes=1000000
druid.indexer.fork.property.druid.processing.numThreads=1
主要是以上三項根據自己服務器資源調整,其他默認配置
配置查詢節點的broker的jvm內存值,vim conf/druid/cluster/query/broker/jvm.config
-server
-Xms512m
-Xmx512m
-XX:MaxDirectMemorySize=128m
-XX:+ExitOnOutOfMemoryError
-Duser.timezone=UTC
-Dfile.encoding=UTF-8
-Djava.io.tmpdir=var/tmp
-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager
主要配置-Xms512m-Xmx512m和-XX:MaxDirectMemorySize=128m
配置查詢節點的broker的線程並發數,vim conf/druid/cluster/qury/broker/runtime.properties
druid.server.http.numThreads=30
# HTTP client settings
druid.broker.http.numConnections=50
druid.broker.http.maxQueuedBytes=10000000
# Processing threads and buffers
druid.processing.buffer.sizeBytes=5000000
druid.processing.numMergeBuffers=3
druid.processing.numThreads=1
主要是以上幾項根據自己服務器資源調整,其他默認配置
配置查詢節點router的jvm內存值,vim conf/druid/cluster/query/router/jvm.config
-server
-Xms512m
-Xmx512m
-XX:+UseG1GC
-XX:MaxDirectMemorySize=128m
-XX:+ExitOnOutOfMemoryError
-Duser.timezone=UTC
-Dfile.encoding=UTF-8
-Djava.io.tmpdir=var/tmp
-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager
主要配置-Xms512m-Xmx512m和-XX:MaxDirectMemorySize=128m
配置查詢節點的router的線程並發數,vim conf/druid/cluster/qury/router/runtime.properties
druid.router.http.numConnections=20
druid.router.http.readTimeout=PT5M
druid.router.http.numMaxThreads=50
druid.server.http.numThreads=50
主要是以上幾項根據自己服務器資源調整,其他默認配置
注意:
Historical和MiddleManager節點配置MaxDirectMemorySize必須滿足下面這個公式:
MaxDirectMemorySize >= druid.processing.buffer.sizeBytes[536,870,912] * (druid.processing.numMergeBuffers[2] + druid.processing.numThreads[2] + 1)
一般啟動不成功都是因為以上配置不合理,如果遇到一些啟動不成功問題,可以參照這邊博客解決(https://www.cnblogs.com/yinghun/p/9224701.html)
6.配置各個節點
在master節點上按4、5中配置完全后將整個druid目錄scp到slave1、slave2節點
scp -r druid-0.17.0 root@slave1:/home/bigdata/software/
scp -r druid-0.17.0 root@slave2:/home/bigdata/software/
再將slave1,和slave2中的配置文件conf/druid/cluster/_common/common.runtime.properties
的host改為對應節點的host
7.啟動druid集群
按照1中的規划在各個節點分別啟動
在master節點的druid目錄執行:
./bin/start-cluster-master-no-zk-server
在slave1節點的druid目錄執行:
./bin/start-cluster-data-server
在slave2節點的druid目錄執行:
./bin/start-cluster-query-server
以上第一次執行直接按上面方式打印出來,看會不會報錯,如果報錯大部分是因為內存和並發數超過了服務器節點能提供的,所以出現線程數據不足,java內存溢出問題。如果沒有報錯,證明啟動成功。
注意:druid的每個模塊是獨立存在的相互不影響的,所以如果某些模塊啟動成功,某些模塊啟動失敗,可以單獨排除沒有啟動成功模塊的異常。當然更多的jvm資源和線程數配置的異常
druid的管理頁面(http://slave2:8888),頁面信息如下:
也注意每個模塊都沒有異常信息才算集群完全啟動正確。后續會逐漸介紹Druid在大數據中的實際應用