Druid被設(shè)計成可擴(kuò)展、高容錯的集群。
在本文檔中,我們將搭建一個簡單的集群,并討論如何進(jìn)一步配置以滿足您的需求。 這個簡單的集群將為Historicals和MiddleManagers提供可擴(kuò)展的容錯服務(wù)器,以及一個單一的coordination服務(wù)器來承載協(xié)調(diào)器和Overlord進(jìn)程。在生產(chǎn)中,我們建議部署Coordinator和Overlord也采用多機(jī)容錯配置。
硬件要求
Coordinator和Overlord進(jìn)程可以共同部署在同一臺服務(wù)器上,該服務(wù)器負(fù)責(zé)處理集群的元數(shù)據(jù)和協(xié)調(diào)需求。硬件要求如下:
- 4核CPU
- 15GB內(nèi)存
- 80GB SSD存儲
Historicals和MiddleManagers可以共同部署在同一臺服務(wù)器上,該服務(wù)器負(fù)責(zé)處理集群中的實(shí)際數(shù)據(jù)。主要需要CPU、內(nèi)存和硬盤,硬件要求如下:
- 8核CPU
- 61GB內(nèi)存
- 160GB SSD存儲
Druid Brokers接受查詢請求并將請求發(fā)送到集群的其余部分。它們還可選地保存查詢的高速緩存。主要需要CPU和內(nèi)存。
- 8核CPU
- 61GB內(nèi)存
- 160GB SSD存儲
您可以考慮在Broker服務(wù)器上運(yùn)行Druid相關(guān)開源UI程序或者查詢庫。
更大的集群就需要更好配置的服務(wù)器。
操作系統(tǒng)
最好Linux,java版本1.7及其以上
下載集群
首先,下載和解壓最新的Druid包。最好是在單個機(jī)器上操作,因?yàn)榭梢孕薷耐昱渲梦募蠓职l(fā)復(fù)制到所有機(jī)器。
curl -O http://static.druid.io/artifacts/releases/druid-0.9.2-bin.tar.gz
tar -xzf druid-0.9.2-bin.tar.gz
cd druid-0.9.2
在druid包下,有以下內(nèi)容:
- LICENSE - license文件
- bin/ - 對此quickstart有用的腳本
- conf/ - 集群設(shè)置的配置模板
- conf-quickstart/ - 此quickstart的配置
- extensions/ - Druid的所有擴(kuò)展
- haddop-dependencies/ - Druid haddop的依賴
- lib/ - 所有Druid核心包含的包
- quickstart/ - 對此quickstart有用的文件
需要修改conf文件夾下的配置文件
配置deep storage
Druid用分布式文件系統(tǒng)或大對象(blob)存儲來進(jìn)行數(shù)據(jù)存儲。最常用的是亞馬遜S3和HDFS。
S3
在conf/druid/_common/common.runtime.properties配置文件中,將設(shè)置druid.extensions.loadList=["druid-s3-extensions"],然后注釋掉本地存儲相關(guān)配置,放開S3配置。
druid.extensions.loadList=["druid-s3-extensions"]
#druid.storage.type=local
#druid.storage.storageDirectory=var/druid/segments
druid.storage.type=s3
druid.storage.bucket=your-bucket
druid.storage.baseKey=druid/segments
druid.s3.accessKey=...
druid.s3.secretKey=...
#druid.indexer.logs.type=file
#druid.indexer.logs.directory=var/druid/indexing-logs
druid.indexer.logs.type=s3
druid.indexer.logs.s3Bucket=your-bucket
druid.indexer.logs.s3Prefix=druid/indexing-logs
HDFS
在conf/druid/_common/common.runtime.properties配置文件中,將設(shè)置druid.extensions.loadList=["io.druid.extensions:druid-hdfs-storage"],然后注釋掉本地存儲相關(guān)配置,放開HDFS配置。
druid.extensions.loadList=["druid-hdfs-storage"]
#druid.storage.type=local
#druid.storage.storageDirectory=var/druid/segments
druid.storage.type=hdfs
druid.storage.storageDirectory=/druid/segments
#druid.indexer.logs.type=file
#druid.indexer.logs.directory=var/druid/indexing-logs
druid.indexer.logs.type=hdfs
druid.indexer.logs.directory=/druid/indexing-logs
將Hadoop配置XML文件(core-site.xml,hdfs-site.xml,yarn-site.xml,mapred-site.xml)放在Druid節(jié)點(diǎn)的classpath上。你可以通過將它們復(fù)制到conf/druid/_common/中來實(shí)現(xiàn)。
配置Tranquility服務(wù)器 (可選)
通過Tranquility服務(wù)器的http接口能夠?qū)?shù)據(jù)流發(fā)送到Druid。如果想使用這種方法就需要配置Tranquility服務(wù)器。
配置Tranquility Kafka (可選)
Druid能夠通過Tranquility Kafka從kafka消費(fèi)獲取數(shù)據(jù)流。如果想使用這種方法就需要配置Tranquility kafka。
配置Hadoop (可選)
如果需要通過hadoop集群加載數(shù)據(jù),在Druid集群中需要如下配置:
更新conf/middleManager/runtime.properties中的druid.indexer.task.hadoopWorkingPath參數(shù),將索引過程中需要的臨時文件指向HDFS路徑。
通常會配置成druid.indexer.task.hadoopWorkingPath=/tmp/druid-indexing
將hadoop的xml(core-site.xml, hdfs-site.xml, yarn-site.xml, mapred-site.xml)配置文件放到Druid節(jié)點(diǎn)的classpath路徑里,可以copy到conf/druid/_common/core-site.xml, conf/druid/_common/hdfs-site.xml等等。
請注意,您不需要為了從Hadoop加載數(shù)據(jù)而使用HDFS深存儲。例如,如果您的集群在Amazon Web Services上運(yùn)行,我們建議使用S3進(jìn)行深度存儲,即使您正在使用Hadoop或Elastic MapReduce加載數(shù)據(jù)。
配置Druid coordination
在這個簡單的集群示例中,可以在同一臺服務(wù)器上,部署單個Druid Coordinator、Druid Overlord、一個ZooKeeper實(shí)例和一個嵌入式Derby元數(shù)據(jù)數(shù)據(jù)庫。
修改conf/druid/_common/common.runtime.properties配置文件中druid.zk.service.host參數(shù),指向zookeeper服務(wù)器地址。修改druid.metadata.storage.connector.connectURI和druid.metadata.storage.connector.host參數(shù)執(zhí)行元數(shù)據(jù)存儲地址。
生產(chǎn)上建議運(yùn)行兩個服務(wù)器,每個服務(wù)器運(yùn)行一個Druid Coordinator和一個Druid Overlord。同時將ZooKeeper運(yùn)行在一個獨(dú)立的環(huán)境,元數(shù)據(jù)存儲也用MySQL或者PostgreSQL運(yùn)行在獨(dú)立環(huán)境上。
調(diào)整服務(wù)查詢Druid進(jìn)程
Druid Historicals和MiddleManagers節(jié)點(diǎn)可以通過以下參數(shù)分配調(diào)整硬件資源:
-Xmx and -Xms
druid.server.http.numThreads
druid.processing.buffer.sizeBytes
druid.processing.numThreads
druid.query.groupBy.maxIntermediateRows
druid.query.groupBy.maxResults
druid.server.maxSize and druid.segmentCache.locations on Historical Nodes
druid.worker.capacity on MiddleManagers
保證 -XX:MaxDirectMemory >= numThreads*sizeBytes, 否則Druid會啟動失敗。
有關(guān)配置選項(xiàng)的詳細(xì)說明請參考configuration documentation 。
調(diào)整Druid Brokers
Druid Brokers的主要配置如下:
-Xmx and -Xms
druid.server.http.numThreads
druid.cache.sizeInBytes
druid.processing.buffer.sizeBytes
druid.processing.numThreads
druid.query.groupBy.maxIntermediateRows
druid.query.groupBy.maxResults
保證 -XX:MaxDirectMemory >= numThreads*sizeBytes, 否則Druid會啟動失敗。
有關(guān)配置選項(xiàng)的詳細(xì)說明請參考configuration documentation 。
端口開通
- 1527 (Derby on your Coordinator; not needed if you are using a separate metadata store like MySQL or PostgreSQL)
- 2181 (ZooKeeper; not needed if you are using a separate ZooKeeper cluster)
- 8081 (Coordinator)
- 8082 (Broker)
- 8083 (Historical)
- 8084 (Standalone Realtime, if used)
- 8088 (Router, if used)
- 8090 (Overlord)
- 8091, 8100–8199 (Druid Middle Manager; you may need higher than port 8199 if you have a very high druid.worker.capacity)
- 8200 (Tranquility Server, if used)
在生產(chǎn)上,建議將ZooKeeper和元數(shù)據(jù)存儲獨(dú)立部署,不要和Coordinator部署在同一個服務(wù)器上。
啟動Coordinator, Overlord, Zookeeper, metadata store
將配置好的配置copy到協(xié)調(diào)服務(wù)器,如果本機(jī)已經(jīng)配置好了也可以通過rsync來進(jìn)行同步copy:
rsync -az druid-0.9.2/ COORDINATION_SERVER:druid-0.9.2/
安裝Zookeeper:
curl http://www.gtlib.gatech.edu/pub/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz -o zookeeper-3.4.6.tar.gz
tar -xzf zookeeper-3.4.6.tar.gz
cd zookeeper-3.4.6
cp conf/zoo_sample.cfg conf/zoo.cfg
./bin/zkServer.sh start
在協(xié)調(diào)服務(wù)器上,cd進(jìn)入Druid根目錄,并啟動協(xié)調(diào)服務(wù)(可以在不同的窗口執(zhí)行或者將日志輸出到文件中)。
java `cat conf/druid/coordinator/jvm.config | xargs` -cp conf/druid/_common:conf/druid/coordinator:lib/* io.druid.cli.Main server coordinator
java `cat conf/druid/overlord/jvm.config | xargs` -cp conf/druid/_common:conf/druid/overlord:lib/* io.druid.cli.Main server overlord
每一個服務(wù)啟動后應(yīng)該都有l(wèi)og信息輸出,在var/log/druid目錄可以查看更詳細(xì)的日志信息。
啟動Historicals和MiddleManagers
將配置好的Druid連同配置全目錄拷貝到Druid Historicals和MiddleManagers服務(wù)器上。
登錄服務(wù)器進(jìn)入Druid根目錄,執(zhí)行以下指令:
java `cat conf/druid/historical/jvm.config | xargs` -cp conf/druid/_common:conf/druid/historical:lib/* io.druid.cli.Main server historical
java `cat conf/druid/middleManager/jvm.config | xargs` -cp conf/druid/_common:conf/druid/middleManager:lib/* io.druid.cli.Main server middleManager
按照需要也可以添加更多的Historicals和MiddleManagers節(jié)點(diǎn)。
For clusters with complex resource allocation needs, you can break apart Historicals and MiddleManagers and scale the components individually. This also allows you take advantage of Druid's built-in MiddleManager autoscaling facility.
如果您正在使用Kafka或通過HTTP進(jìn)行基于推送的數(shù)據(jù)流加載,則還可以在MiddleManagers和Historicals的同一服務(wù)器上啟動Tranquility Server。 對于大規(guī)模生產(chǎn)環(huán)境,MiddleManagers和Tranquility仍然可以位于同一服務(wù)器。 如果您使用流處理器運(yùn)行Tranquility(而不是服務(wù)器),則可以將Tranquility與流處理器共存,而不需要單獨(dú)的Tranquility服務(wù)器。
curl -O http://static.druid.io/tranquility/releases/tranquility-distribution-0.8.0.tgz
tar -xzf tranquility-distribution-0.8.0.tgz
cd tranquility-distribution-0.8.0
bin/tranquility <server or kafka> -configFile <path_to_druid_distro>/conf/tranquility/<server or kafka>.json
啟動Druid Broker
進(jìn)入Druid目錄,執(zhí)行以下指令啟動Druid Broker:
java `cat conf/druid/broker/jvm.config | xargs` -cp conf/druid/_common:conf/druid/broker:lib/* io.druid.cli.Main server broker
根據(jù)查詢負(fù)載也可以添加更多的Brokers。
加載數(shù)據(jù)
一個簡單的Druid就搭建好了,下一步就需要學(xué)習(xí)如何按照需求進(jìn)行數(shù)據(jù)加載了。
詳情參考loading data.