天天看點

CentOS7.1.x+Druid 0.12 叢集配置 Druid Cluster Setup海量資料實時OLAP分析系統-Druid.io安裝配置和體驗

原文轉載自: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在别的文章中有講述,本次安裝不在涉及。

一、預設端口

CentOS7.1.x+Druid 0.12 叢集配置 Druid Cluster Setup海量資料實時OLAP分析系統-Druid.io安裝配置和體驗

建議用如下的指令停掉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

 注意以下的檔案内容,别的内容就保持原樣。

  1. druid.extensions.loadList=["mysql-metadata-storage","druid-hdfs-storage"]
  2. druid.startup.logging.logProperties=true
  3. druid.zk.service.host=10.70.27.8:2181,10.70.27.10:2181,10.70.27.12:2181
  4. druid.zk.paths.base=/druid
  5. druid.metadata.storage.type=mysql
  6. druid.metadata.storage.connector.connectURI=jdbc:mysql://10.70.27.12:3306/druid
  7. druid.metadata.storage.connector.user=druid
  8. druid.metadata.storage.connector.password=yourpassword
  9. druid.storage.type=hdfs
  10. druid.storage.storageDirectory=hdfs://1.2.3.4:9000/data/druid/segments
  11. druid.indexer.logs.type=hdfs
  12. 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

然後執行下面的指令:

  1. java `cat conf/druid/coordinator/jvm.config | xargs` -cp "conf/druid/_common:conf/druid/coordinator:lib/*" io.druid.cli.Main server coordinator
  2. 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重新開機模式

  1. druid.indexer.runner.type=remote
  2.  druid.indexer.storage.type=metadata
  3.  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

繼續閱讀