druid.io本地集群搭建 / 擴展集群搭建


druid.io 是一個比較重型的數據庫查詢系統,分為5種節點 。

在此就不對數據庫進行介紹了,如果有疑問請參考白皮書:

http://pan.baidu.com/s/1eSFlIJS  

 

 

單台機器的集群搭建

 

首先說一下通用的集群搭建,基於 0.9.1.1

下載地址  http://pan.baidu.com/s/1hrJBjlq:

 

修改 conf/druid/_common 內的 common.runtime.properties,參考如下配置:

 

  1.  
    #
  2.  
    # Licensed to Metamarkets Group Inc. (Metamarkets) under one
  3.  
    # or more contributor license agreements. See the NOTICE file
  4.  
    # distributed with this work for additional information
  5.  
    # regarding copyright ownership. Metamarkets licenses this file
  6.  
    # to you under the Apache License, Version 2.0 (the
  7.  
    # "License"); you may not use this file except in compliance
  8.  
    # with the License. You may obtain a copy of the License at
  9.  
    #
  10.  
    # http://www.apache.org/licenses/LICENSE-2.0
  11.  
    #
  12.  
    # Unless required by applicable law or agreed to in writing,
  13.  
    # software distributed under the License is distributed on an
  14.  
    # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  15.  
    # KIND, either express or implied. See the License for the
  16.  
    # specific language governing permissions and limitations
  17.  
    # under the License.
  18.  
    #
  19.  
     
  20.  
    #
  21.  
    # Extensions
  22.  
    #
  23.  
     
  24.  
    # This is not the full list of Druid extensions, but common ones that people often use. You may need to change this list
  25.  
    # based on your particular setup.
  26.  
    #druid.extensions.loadList=["druid-kafka-eight", "druid-s3-extensions", "druid-histogram", "druid-datasketches", "druid-lookups-cached-global", "mysql-metadata-storage"]
  27.  
    druid.extensions.loadList=[ "mysql-metadata-storage"]
  28.  
     
  29.  
    # If you have a different version of Hadoop, place your Hadoop client jar files in your hadoop-dependencies directory
  30.  
    # and uncomment the line below to point to your directory.
  31.  
    #druid.extensions.hadoopDependenciesDir=/my/dir/hadoop-dependencies
  32.  
     
  33.  
    #
  34.  
    # Logging
  35.  
    #
  36.  
     
  37.  
    # Log all runtime properties on startup. Disable to avoid logging properties on startup:
  38.  
    druid.startup.logging.logProperties= true
  39.  
     
  40.  
    #
  41.  
    # Zookeeper
  42.  
    #
  43.  
     
  44.  
    druid.zk.service.host= 10.202.4.22:2181
  45.  
    druid.zk.paths.base=/druid
  46.  
     
  47.  
    #
  48.  
    # Metadata storage
  49.  
    #
  50.  
     
  51.  
    # For Derby server on your Druid Coordinator (only viable in a cluster with a single Coordinator, no fail-over):
  52.  
    #druid.metadata.storage.type=derby
  53.  
    #druid.metadata.storage.connector.connectURI=jdbc:derby://metadata.store.ip:1527/var/druid/metadata.db;create=true
  54.  
    #druid.metadata.storage.connector.host=metadata.store.ip
  55.  
    #druid.metadata.storage.connector.port=1527
  56.  
     
  57.  
    # For MySQL:
  58.  
    druid.metadata.storage.type=mysql
  59.  
    druid.metadata.storage.connector.connectURI=jdbc:mysql: //10.202.4.22:3306/druid?characterEncoding=UTF-8
  60.  
    druid.metadata.storage.connector.user=szh
  61.  
    druid.metadata.storage.connector.password= 123456
  62.  
     
  63.  
    # For PostgreSQL (make sure to additionally include the Postgres extension):
  64.  
    #druid.metadata.storage.type=postgresql
  65.  
    #druid.metadata.storage.connector.connectURI=jdbc:postgresql://db.example.com:5432/druid
  66.  
    #druid.metadata.storage.connector.user=...
  67.  
    #druid.metadata.storage.connector.password=...
  68.  
     
  69.  
    #
  70.  
    # Deep storage
  71.  
    #
  72.  
     
  73.  
    # For local disk (only viable in a cluster if this is a network mount):
  74.  
    druid.storage.type=local
  75.  
    druid.storage.storageDirectory= var/druid/segments
  76.  
     
  77.  
    # For HDFS (make sure to include the HDFS extension and that your Hadoop config files in the cp):
  78.  
    #druid.storage.type=hdfs
  79.  
    #druid.storage.storageDirectory=/druid/segments
  80.  
     
  81.  
    # For S3:
  82.  
    #druid.storage.type=s3
  83.  
    #druid.storage.bucket=your-bucket
  84.  
    #druid.storage.baseKey=druid/segments
  85.  
    #druid.s3.accessKey=...
  86.  
    #druid.s3.secretKey=...
  87.  
     
  88.  
    #
  89.  
    # Indexing service logs
  90.  
    #
  91.  
     
  92.  
    # For local disk (only viable in a cluster if this is a network mount):
  93.  
    druid.indexer.logs.type=file
  94.  
    druid.indexer.logs.directory= var/druid/indexing-logs
  95.  
     
  96.  
    # For HDFS (make sure to include the HDFS extension and that your Hadoop config files in the cp):
  97.  
    #druid.indexer.logs.type=hdfs
  98.  
    #druid.indexer.logs.directory=/druid/indexing-logs
  99.  
     
  100.  
    # For S3:
  101.  
    #druid.indexer.logs.type=s3
  102.  
    #druid.indexer.logs.s3Bucket=your-bucket
  103.  
    #druid.indexer.logs.s3Prefix=druid/indexing-logs
  104.  
     
  105.  
    #
  106.  
    # Service discovery
  107.  
    #
  108.  
     
  109.  
    druid.selectors.indexing.serviceName=druid/overlord
  110.  
    druid.selectors.coordinator.serviceName=druid/coordinator
  111.  
     
  112.  
    #
  113.  
    # Monitoring
  114.  
    #
  115.  
     
  116.  
    druid.monitoring.monitors=[ "com.metamx.metrics.JvmMonitor"]
  117.  
    druid.emitter=logging
  118.  
    druid.emitter.logging.logLevel=info



 

0.9.1.1 默認是不帶mysql 擴展的需要自己下載,解壓后放置於extensions 下:

參考文章:

http://druid.io/docs/0.9.1.1/operations/including-extensions.html

 

 

擴展包的下載地址

http://druid.io/downloads.html

分別修改5個節點的啟動配置

/conf/druid/${serviceName}/runtime.properties

 

broker節點:

/conf/druid/broker/runtime.properties

 

  1.  
    druid.host=10.202.4.22:9102
  2.  
    druid.service=druid/broker
  3.  
    druid.port=9102
  4.  
     
  5.  
    # HTTP server threads
  6.  
    druid.broker.http.numConnections=5
  7.  
    druid.server.http.numThreads=25
  8.  
     
  9.  
    # Processing threads and buffers
  10.  
    druid.processing.buffer.sizeBytes=32768
  11.  
    druid.processing.numThreads=2
  12.  
     
  13.  
    # Query cache
  14.  
    druid.broker.cache.useCache= true
  15.  
    druid.broker.cache.populateCache= true
  16.  
    druid.cache.type= local
  17.  
    druid.cache.sizeInBytes=2000000000



 

 

coordinator 節點:

/conf/druid/coordinator/runtime.properties

druid.host=10.202.4.22:8082
druid.service=druid/coordinator
druid.port=8082



historical 節點:

/conf/druid/historical/runtime.properties

 

  1.  
    druid.service=druid/historical
  2.  
    druid.host= 10.202.4.22:9002
  3.  
    druid.port= 9002
  4.  
     
  5.  
    # HTTP server threads
  6.  
    druid. server.http.numThreads=25
  7.  
     
  8.  
    # Processing threads and buffers
  9.  
    druid.processing.buffer.sizeBytes= 6870912
  10.  
    druid.processing.numThreads= 7
  11.  
     
  12.  
    druid.historical.cache.useCache= false
  13.  
    druid.historical.cache.populateCache= false
  14.  
     
  15.  
    # Segment storage
  16.  
    druid.segmentCache.locations=[{ "path":"var/druid/segment-cache","maxSize"\:13000000}]
  17.  
    druid. server.maxSize=13000000



 

 

middleManager 節點:

/conf/druid/middleManager/runtime.properties

 

  1.  
    druid.host= 10.202.4.22:8091
  2.  
    druid.service=druid/middleManager
  3.  
    druid.port= 8091
  4.  
     
  5.  
    # Number of tasks per middleManager
  6.  
    druid.worker.capacity= 3
  7.  
     
  8.  
    # Task launch parameters
  9.  
    druid.indexer.runner.javaOpts=-server -Xmx256m -Duser.timezone=UTC -Dfile.encoding=UTF -8 -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager
  10.  
    druid.indexer.task.baseTaskDir= var/druid/task
  11.  
     
  12.  
    # HTTP server threads
  13.  
    druid.server.http.numThreads= 25
  14.  
     
  15.  
    # Processing threads and buffers
  16.  
    druid.processing.buffer.sizeBytes= 65536
  17.  
    druid.processing.numThreads= 2
  18.  
     
  19.  
    # Hadoop indexing
  20.  
    druid.indexer.task.hadoopWorkingPath= var/druid/hadoop-tmp
  21.  
    druid.indexer.task.defaultHadoopCoordinates=[ "org.apache.hadoop:hadoop-client:2.3.0"]



 

 

 

overlord 節點:

/conf/druid/overlord/runtime.properties

 

  1.  
    druid.service=druid/overlord
  2.  
    druid.host= 10.202.4.22:9100
  3.  
    druid.port= 9100
  4.  
     
  5.  
    #druid.indexer.queue.startDelay=PT30S
  6.  
     
  7.  
    druid.indexer.runner. type=remote
  8.  
    druid.indexer.storage. type=metadata

 

 

 

啟動集群啟動  可以利用我寫的腳本:

 

  1.  
    #java `cat conf/druid/broker/jvm.config | xargs` -cp conf/druid/_common:conf/druid/broker:lib/* io.druid.cli.Main server broker
  2.  
     
  3.  
    function help(){
  4.  
    echo "參數列表"
  5.  
    echo " 參數1 參數2"
  6.  
    echo " serviceName [-f]"
  7.  
    echo "參數1:serviceName: 啟動服務的名字"
  8.  
    echo "serviceName可選項:"
  9.  
    echo "1: broker"
  10.  
    echo "2: coordinator"
  11.  
    echo "3: historical"
  12.  
    echo "4: middleManager"
  13.  
    echo "5: overlord"
  14.  
    echo "參數2:[-f]: 是否前台啟動"
  15.  
    echo "-f:前台啟動,(不加)默認后台啟動"
  16.  
    }
  17.  
     
  18.  
    function startService(){
  19.  
    # echo $0
  20.  
    # echo $1
  21.  
    # echo $2
  22.  
    echo $service
  23.  
    if [[ $2 == "-f" ]]; then
  24.  
    echo "前台啟動"
  25.  
    java -Xmx256m -Duser.timezone=UTC -Dfile.encoding=UTF-8 -classpath conf/druid/_common:conf/druid/ $service:lib/* io.druid.cli.Main server $service
  26.  
    else
  27.  
    echo "后台啟動"
  28.  
    nohup java -Xmx256m -Duser.timezone=UTC -Dfile.encoding=UTF-8 -classpath conf/druid/_common:conf/druid/ $service:lib/* io.druid.cli.Main server $service &
  29.  
    fi;
  30.  
    }
  31.  
     
  32.  
    function tips(){
  33.  
    red=`tput setaf 1`
  34.  
    reset=`tput sgr0`
  35.  
    echo "${red}Not correct arguments${reset}"
  36.  
    echo "please use --help or -h for help"
  37.  
    }
  38.  
     
  39.  
    if [[ $1 == "--help" || $1 == "-h" ]]; then
  40.  
    help
  41.  
    exit
  42.  
    fi
  43.  
     
  44.  
    service= $1
  45.  
     
  46.  
    case $service in
  47.  
    "broker")
  48.  
    ;;
  49.  
    "coordinator")
  50.  
    ;;
  51.  
    "historical")
  52.  
    ;;
  53.  
    "middleManager")
  54.  
    ;;
  55.  
    "overlord")
  56.  
    ;;
  57.  
    *)
  58.  
    tips
  59.  
    exit
  60.  
    esac
  61.  
     
  62.  
    if [[ $2 == "-f" || $2 == "" ]]; then
  63.  
    startService $1 $2;
  64.  
    else
  65.  
    tips
  66.  
    exit
  67.  
    fi


將上述腳本放到 druid的根目錄即可:

 

 

 

啟動效果如圖:

 

 

 

多台機器的集群搭建:

 

上面是單台機器的集群搭建, 擴展到多台

 

只需要修改 conf/druid/(broker | coordinator | historical | middleManager | overlord) 的 runtime.properties 中的 

druid.host=10.202.4.22:9102 改成其他機器的IP地址即可

 

 

 

 

=========================================================

 

最后共享下我成功搭建的本地集群 (內含個人寫的集群啟動腳本):

http://pan.baidu.com/s/1bJjFzg

基於版本 0.9.1.1,  元數據存儲用的mysql (擴展包已經下載好了)

下載並解壓 我搭建的druid.tgz 的druid本地集群后:

1.修改各個配置文件

conf/druid/broker/runtime.properties 

conf/druid/coordinator/runtime.properties 

conf/druid/historical/runtime.properties 

conf/druid/middleManager/runtime.properties 

conf/druid/overlord/runtime.properties 

druid.host=10.202.4.22:9102 改成自己的IP地址

2.修改 conf/druid/_common/common.runtime.properties  中的mysql端口地址, 用戶名,密碼, zookeeper地址等 替換為自己的地址。

 

Tips:mysql 沒有創建庫druid 要自己先創建(安裝mysql數據庫,並創建druid數據庫和druid用戶)

3.用根目錄下的 cluster_start_service.sh 啟動5個節點的服務

   這時進入mysql數據庫 會發現druid自動創建了幾張表

4.進行測試

(1)數據導入

(2)數據查詢

切換到 test 目錄,下面有兩個文件夾:

(1)數據導入:

切換到 test_load 的目錄下

下面的 submit_csv_task.sh , submit_json_task.sh 分別是提交 csv 數據 與 json 數據的測試腳本

這里需要修改 env.sh

設置 overlord_ip 為自己的 overlord_ip 的 地址端口

這里試下執行 submit_json_task.sh 腳本,去頁面上查看 導入任務執行的狀態 ,如圖所示:

輸入的地址為 overlord 節點的地址+端口:

 

等待任務成功執行完成:

切換到查詢測試目錄,執行查詢腳本: 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM