原文轉載自:https://blog.csdn.net/bigtree_3721/article/details/79583008
先決條件:安裝版本清單
本次安裝滿足下面的條件:
- CentOS v7.3.x
- Druid v0.12.x
- Hadoop v2.9.0 (HDFS)
- MySql v5.6
其中,Mysql 和 Hadoop在别的文章中有講述,本次安裝不在涉及。
一、預設端口

建議用如下的指令停掉CentOS上面的 firewall.
# systemctl stop firewalld.service
二、叢集機器IP 安裝服務配置
本叢集有三個節點
1. master節點: 10.70.27.8
部署druid服務: coordinator node, overlord node(indexing service)
2. slave1節點: 10.70.27.10
部署druid服務: historical node, middleManager node
3. slave2節點: 10.70.27.12
部署druid服務:broker node
另外,在本次設定中,druid的 deep storage(用于儲存冷資料)為 Hadoop 的HDFS。
druid 官方軟體下載下傳位址:
http://static.druid.io/artifacts/releases/druid-0.12.0-bin.tar.gz
下載下傳後,把上面這個druid軟體解壓到上面三台主機上的 /opt/druid-0.12.0下面。
官方cluster 叢集配置文檔如下:
http://druid.io/docs/latest/tutorials/cluster.html
http://druid.io/docs/0.12.0/tutorials/cluster.html
三、配置步驟如下
3.1 配置所有節點(master, slave1,slave2)的 common.runtime.properties檔案
3.1.1 修改common.runtime.properties檔案
# vi /opt/druid-0.12.0/conf/druid/_common/common.runtime.properties
注意以下的檔案内容,别的内容就保持原樣。
- druid.extensions.loadList=["mysql-metadata-storage","druid-hdfs-storage"]
- druid.startup.logging.logProperties=true
- druid.zk.service.host=10.70.27.8:2181,10.70.27.10:2181,10.70.27.12:2181
- druid.zk.paths.base=/druid
- druid.metadata.storage.type=mysql
- druid.metadata.storage.connector.connectURI=jdbc:mysql://10.70.27.12:3306/druid
- druid.metadata.storage.connector.user=druid
- druid.metadata.storage.connector.password=yourpassword
- druid.storage.type=hdfs
- druid.storage.storageDirectory=hdfs://1.2.3.4:9000/data/druid/segments
- druid.indexer.logs.type=hdfs
- druid.indexer.logs.directory=hdfs://1.2.3.4:9000/data/druid/indexing-logs
如果你先選擇用mysql存metadata的話,則還需要按照下面的步驟做額外的配置。
1: 官方包裡面沒有把mysql打進去,自己得去下mysql storage。
官方下載下傳這個storage的連接配接如下:
http://static.druid.io/artifacts/releases/mysql-metadata-storage-0.12.0.tar.gz
官方解釋的連接配接: http://druid.io/downloads.html
本文是用mysql存放的(如上設定的那樣),需要下載下傳這個tar.gz,
然後 copy mysql-metadata-storage-0.12.0.tar.gz 到 三台機器上的/opt/druid-0.12.0/extensions。
然後執行下面的操作:
# cd /opt/druid-0.12.0/extensions
# tar zxvf mysql-metadata-storage-0.12.0.tar.gz
2. 登陸到所要連接配接的mysql伺服器上,執行下面的操作:
# /usr/bin/mysql -uroot -p<root's password >
grant all privileges on druid.* to 'druid'@'%' identified by 'druid';
mysql> CREATE DATABASE druid DEFAULT CHARACTER SET utf8;
mysql> grant all privileges on druid.* to 'druid'@'%' identified by 'druid';
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql>quit;
3.1.2 拷貝hadoop配置檔案
本次安裝用hadoop的hdfs作為資料存放地,故要求把Hadoop配置XML檔案(core-site.xml,hdfs-site.xml,yarn-site.xml,mapred-site.xml)從hadoop叢集中拷貝到 各個druid主機的/opt/druid-0.12.0/conf/druid/_common/下面。
針對這個配置的解釋,見官方文檔連接配接如下:http://druid.io/docs/latest/tutorials/cluster.html
3.1.3 連接配接hadoop配置
vi /opt/druid-0.12.0/conf/druid/middleManager/runtime.properties
druid.indexer.task.hadoopWorkingPath=/tmp/druid-indexing
3.1.4 根據安裝計劃,指定主機位址(IP或者域名)
在本次安裝中,修改如下:
vi /opt/druid-0.12.0/conf/druid/broker/runtime.properties
druid.host=10.70.27.12
vi /opt/druid-0.12.0/conf/druid/coordinator/runtime.properties
druid.port=10.70.27.8
vi /opt/druid-0.12.0/conf/druid/overlord/runtime.properties
vi /opt/druid-0.12.0/conf/druid/historical/runtime.properties
druid.port=10.70.27.10
vi /opt/druid-0.12.0/conf/druid/middleManager/runtime.properties
3.1.4 調節性能參數
如果你是按cluster方式安裝的,則必須確定druid的各個伺服器 JVM 啟動參數滿足下面的條件。
官方文檔見:http://druid.io/docs/0.12.0/tutorials/cluster.html
官方文檔提示:要調節一下下面的參數,特别是下面的MaxDirectMemory,
- Keep -XX:MaxDirectMemory >= numThreads*sizeBytes, otherwise Druid will fail to start up..。
該參數指定了DirectByteBuffer能配置設定的空間的限額,如果沒有顯示指定這個參數啟動jvm,預設值是xmx對應的值。
- 另外,即使各個druid伺服器軟體能起來,在跑任務也有可能出現DirectMemory記憶體不足問題。
下面的log就是 Running Tasks碰到的坑,通過overlord console gui 比如 http://[overload server ip ]:8090/console.html看到的error log
"
2018-03-22T12:44:53,405 ERROR [main] io.druid.cli.CliPeon - Error when starting up. Failing.
com.google.inject.ProvisionExcept
ion: Unable to provision, see the following errors:
Not enough direct memory. Please adjust -XX:MaxDirectMemorySize, druid.processing.buffer.sizeBytes, druid.processing.numThreads, or druid.processing.numMergeBuffers: maxDirectMemory[1,908,932,608],”
memoryNeeded[3,758,096,384]=druid.processing.buffer.sizeBytes[536,870,912]*(druid.processing.numMergeBuffers[2]+druid.processing.numThreads[4] + 1)"。
注意藍色字型,說明index server的direct memory 不足,故要修改下面選項的參數。
注意MaxDirectMemorySize的數值是由你自己的設定決定的
計算公式為:MaxDirectMemorySize=druid.processing.buffer.sizeByte *(druid.processing.numMergeBuffers + druid.processing.numThreads + 1)
修改參數方式:
然後加入下面綠色的選項,
druid.indexer.runner.javaOpts=-server -Xmx6g -XX:MaxDirectMemorySize=4g -Duser.timezone=UTC -Dfile.encoding=UTF-8 -Djava.util.loggi
儲存檔案,重新開機middleManager,就可以搞定問題。
三、啟動叢集指令
把上面的整個/opt/druid-0.12.0目錄打成包,然後傳到每個節點,再展開。 然後分别到每個節點(master, slave1,slave2)去啟動相應的服務,指令如下:
on master,啟動 coordinator 和 overlord 服務
#cd /opt/druid-0.12.0
# bin/init
然後執行下面的指令:
- 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
on slave1,啟動 historical 服務 和 middleManager 服務
on slave2, 啟動broker 服務
然後執行下面的指令
java `cat conf/druid/broker/jvm.config | xargs` -cp conf/druid/_common:conf/druid/broker:lib/* io.druid.cli.Main server broker
四、驗證叢集
1. http://10.70.27.8:8090/console.html (overlord node)
2. http://10.70.27.8:8081(coordinator node)
3. 登陸到hadoop namenode,去檢查druid資訊。
#/opt/hadoop-2.9.0/bin/hadoop fs -ls /druid
Found 1 items
drwxr-xr-x - root supergroup 0 2018-03-22 15:00 /druid/indexing-logs
五、push 方式資料源輸入設定
5.1 代碼下載下傳
Tranquility 代碼下載下傳: http://druid.io/downloads.html
本次選擇的是 tranquility-distribution-0.8.2.tgz.
選擇一個機器,比如broker運作的那個機器,copy 上面的那個tranquility-distribution-0.8.2.tgz 到/op 目錄下。
#tar zxvf tranquility-distribution-0.8.2.tgz
5.2 用 Tranquility server 接受資料并轉發到druid裡面
官方教材:http://druid.io/docs/0.12.0/tutorials/tutorial-streams.html
基本思路通過http post請求,把資料以jason格式發給Tranquility server,然後Tranquility server會轉發給後面的druid。
1) 修改配置
# cd /opt/tranquility-distribution-0.8.2/conf
# cp kafka.json.example kafka.json; cp server.json.example server.json
然後改變kafka.json 和 server.json 裡面的 "zookeeper.connect" 為如下的數值。
"properties" : {
"zookeeper.connect" : "10.70.27.8:2181,10.70.27.10:2181,10.70.27.12:2181",
"zookeeper.timeout" : "PT20S",
"druid.selectors.indexing.serviceName" : "druid/overlord",
"druid.discovery.curator.path" : "/druid/discovery",
"kafka.zookeeper.connect" : "localhost:2181",
"kafka.group.id" : "tranquility-kafka",
"consumer.numThreads" : "2",
"commit.periodMillis" : "15000",
"reportDropsAsExceptions" : "false"
}
2) 啟動 Tranquility server
# bin/tranquility server -configFile conf/server.json
5.3 從kafka 裡面消費資料,然後push到druid
基本思路設定Tranquility kafka server好後,啟動它,它就是從指定的kafka中去消費資料,然後轉發給後面的druid。
這裡就不詳細說了,請參見官方文檔: http://druid.io/docs/0.12.0/tutorials/tutorial-kafka.html
對連接配接過程的了解:
我們向tranquility發post HTTP請求來添加資料,而tranquility收到資料後,則向overlord發送任務模闆,overlord接收到任務模闆後,會根據任務配置設定政策發送給某個MiddleManager,MiddleManager啟動一個java程序, 即peon。peon可以了解為一個http server。最後tranquility是向這個http server直接發送資料,而不再依賴overlord和MiddleManager節點。可以了解為我們通過內建tranqulity可以和每個peon建立一個連接配接。
一些人的誤區主要展現在: consumer将資料發送給了overlord,是通過overlord轉發資料給peon,這樣了解是錯誤的。iddleManager啟動一個java程序, 即peon。peon可以了解為一個http server。最後 consumer是向http server直接發送資料,而不再依賴overlord和MiddleManager節點。可以了解為我們通過內建tranqulity可以和 每個peon建立一個連接配接。
一些人的誤區主要展現在: consumer将資料發送給了overlord,是通過overlord轉發資料給peon,這樣了解是錯誤的。
七 分布式環境下的task resume和middle node重新開機讨論
給overlord設定如下參數,可以開啟task重新開機模式
- druid.indexer.runner.type=remote
- druid.indexer.storage.type=metadata
- druid.indexer.task.restoreTasksOnRestart=true
http://druid.io/docs/latest/configuration/indexing-service.html
https://www.cnblogs.com/xd502djj/p/6408979.html
八 參考文檔
- 1: 關于Hive和druid (0.9.x及其以後)的內建
- 內建 jira: https://issues.apache.org/jira/browse/HIVE-14217
- 內建介紹的官方page: https://cwiki.apache.org/confluence/display/Hive/Druid+Integration
2:參考檔案:
http://blog.csdn.net/fenghuibian/article/details/53216141
druid.io_druid.io本地叢集搭建 / 擴充叢集搭建
http://druid.io/docs/latest/tutorials/cluster.html
Druid Cluster Setup
海量資料實時OLAP分析系統-Druid.io安裝配置和體驗
DRUID: 新增MiddleManager節點遇到的坑
Druid 系統架構
Tranquility:
http://druid.io/downloads.html