Druid翻译七:集群

Druid被设计成可扩展、高容错的集群。

在本文档中,我们将搭建一个简单的集群,并讨论如何进一步配置以满足您的需求。 这个简单的集群将为Historicals和MiddleManagers提供可扩展的容错服务器,以及一个单一的coordination服务器来承载协调器和Overlord进程。在生产中,我们建议部署Coordinator和Overlord也采用多机容错配置。

硬件要求

Coordinator和Overlord进程可以共同部署在同一台服务器上,该服务器负责处理集群的元数据和协调需求。硬件要求如下:

  • 4核CPU
  • 15GB内存
  • 80GB SSD存储

Historicals和MiddleManagers可以共同部署在同一台服务器上,该服务器负责处理集群中的实际数据。主要需要CPU、内存和硬盘,硬件要求如下:

  • 8核CPU
  • 61GB内存
  • 160GB SSD存储

Druid Brokers接受查询请求并将请求发送到集群的其余部分。它们还可选地保存查询的高速缓存。主要需要CPU和内存。

  • 8核CPU
  • 61GB内存
  • 160GB SSD存储

您可以考虑在Broker服务器上运行Druid相关开源UI程序或者查询库。
更大的集群就需要更好配置的服务器。

操作系统

最好Linux,java版本1.7及其以上

下载集群

首先,下载和解压最新的Druid包。最好是在单个机器上操作,因为可以修改完配置文件后分发复制到所有机器。

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包下,有以下内容:

  • LICENSE - license文件
  • bin/ - 对此quickstart有用的脚本
  • conf/ - 集群设置的配置模板
  • conf-quickstart/ - 此quickstart的配置
  • extensions/ - Druid的所有扩展
  • haddop-dependencies/ - Druid haddop的依赖
  • lib/ - 所有Druid核心包含的包
  • quickstart/ - 对此quickstart有用的文件

需要修改conf文件夹下的配置文件

配置deep storage

Druid用分布式文件系统或大对象(blob)存储来进行数据存储。最常用的是亚马逊S3和HDFS。

S3

在conf/druid/_common/common.runtime.properties配置文件中,将设置druid.extensions.loadList=["druid-s3-extensions"],然后注释掉本地存储相关配置,放开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配置文件中,将设置druid.extensions.loadList=["io.druid.extensions:druid-hdfs-storage"],然后注释掉本地存储相关配置,放开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节点的classpath上。你可以通过将它们复制到conf/druid/_common/中来实现。

配置Tranquility服务器 (可选)

通过Tranquility服务器的http接口能够将数据流发送到Druid。如果想使用这种方法就需要配置Tranquility服务器。

配置Tranquility Kafka (可选)

Druid能够通过Tranquility Kafka从kafka消费获取数据流。如果想使用这种方法就需要配置Tranquility kafka。

配置Hadoop (可选)

如果需要通过hadoop集群加载数据,在Druid集群中需要如下配置:
更新conf/middleManager/runtime.properties中的druid.indexer.task.hadoopWorkingPath参数,将索引过程中需要的临时文件指向HDFS路径。
通常会配置成druid.indexer.task.hadoopWorkingPath=/tmp/druid-indexing
将hadoop的xml(core-site.xml, hdfs-site.xml, yarn-site.xml, mapred-site.xml)配置文件放到Druid节点的classpath路径里,可以copy到conf/druid/_common/core-site.xml, conf/druid/_common/hdfs-site.xml等等。
请注意,您不需要为了从Hadoop加载数据而使用HDFS深存储。例如,如果您的集群在Amazon Web Services上运行,我们建议使用S3进行深度存储,即使您正在使用Hadoop或Elastic MapReduce加载数据。

配置Druid coordination

在这个简单的集群示例中,可以在同一台服务器上,部署单个Druid Coordinator、Druid Overlord、一个ZooKeeper实例和一个嵌入式Derby元数据数据库。
修改conf/druid/_common/common.runtime.properties配置文件中druid.zk.service.host参数,指向zookeeper服务器地址。修改druid.metadata.storage.connector.connectURI和druid.metadata.storage.connector.host参数执行元数据存储地址。

生产上建议运行两个服务器,每个服务器运行一个Druid Coordinator和一个Druid Overlord。同时将ZooKeeper运行在一个独立的环境,元数据存储也用MySQL或者PostgreSQL运行在独立环境上。

调整服务查询Druid进程

Druid Historicals和MiddleManagers节点可以通过以下参数分配调整硬件资源:
-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会启动失败。
有关配置选项的详细说明请参考configuration documentation

调整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会启动失败。
有关配置选项的详细说明请参考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)

在生产上,建议将ZooKeeper和元数据存储独立部署,不要和Coordinator部署在同一个服务器上。

启动Coordinator, Overlord, Zookeeper, metadata store

将配置好的配置copy到协调服务器,如果本机已经配置好了也可以通过rsync来进行同步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

在协调服务器上,cd进入Druid根目录,并启动协调服务(可以在不同的窗口执行或者将日志输出到文件中)。

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

每一个服务启动后应该都有log信息输出,在var/log/druid目录可以查看更详细的日志信息。

启动Historicals和MiddleManagers

将配置好的Druid连同配置全目录拷贝到Druid Historicals和MiddleManagers服务器上。
登录服务器进入Druid根目录,执行以下指令:

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节点。

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进行基于推送的数据流加载,则还可以在MiddleManagers和Historicals的同一服务器上启动Tranquility Server。 对于大规模生产环境,MiddleManagers和Tranquility仍然可以位于同一服务器。 如果您使用流处理器运行Tranquility(而不是服务器),则可以将Tranquility与流处理器共存,而不需要单独的Tranquility服务器。

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

进入Druid目录,执行以下指令启动Druid Broker:

java `cat conf/druid/broker/jvm.config | xargs` -cp conf/druid/_common:conf/druid/broker:lib/* io.druid.cli.Main server broker

根据查询负载也可以添加更多的Brokers。

加载数据

一个简单的Druid就搭建好了,下一步就需要学习如何按照需求进行数据加载了。
详情参考loading data.

原文链接:http://druid.io/docs/0.9.2/tutorials/cluster.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,117评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,963评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,897评论 0 240
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,805评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,208评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,535评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,797评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,493评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,215评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,477评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,988评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,325评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,971评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,807评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,544评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,455评论 2 266

推荐阅读更多精彩内容

  • Druid具有高可用、高容错的特性。 本文将搭建一个简单的Druid集群,并且将会讨论如何进一步配置以满足您的需求...
    helloworld1214阅读 7,042评论 1 5
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,097评论 18 139
  • 1. Zookeeper介绍: 1.基本介绍: Zookeeper: 为分布式应用提供分布式协作(协调)服务。使用...
    奉先阅读 4,458评论 0 10
  • ZooKeeper介绍 Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用...
    Coselding阅读 11,264评论 1 37
  • 前两天在朋友圈无意看到朋友准备今年考研的消息,触动了我那颗沉睡已久的心。本来是打算明年多积累点money再考的,心...
    傅筱语阅读 342评论 5 1