先决条件:安装版本列表

本次安装满足下面的条件:

  • CentOS v7.3.x
  • Druid v0.12.x
  • Hadoop v2.9.0 (HDFS)
  • MysqL v5.6

其中,MysqL 和 Hadoop在别的文章中有讲述,本次安装不在涉及。

在本次安装前,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 zxvfmysql-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

druid.port=10.70.27.10

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.ProvisionException: 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)

修改参数方式:

vI/Opt/druid-0.12.0/conf/druid/middleManager/runtime.properties

然后加入下面绿色的选项,

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,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 服务

#cd /opt/druid-0.12.0

然后执行下面的命令:

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 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

2. http://10.70.27.8:8081

3. 登陆到hadoop namenode,去检查druid信息。

#/opt/hadoop-2.9.0/bin/hadoopfs -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 zxvftranquility-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

# cpkafka.json.examplekafka.json; cpserver.json.exampleserver.json

然后改变kafka.json 和server.json 里面的"zookeeper.connect" 为如下的数值。

"properties" : {
"zookeeper.connect" : "10.70.27.8:2181,10.70.27.12:2181",
"zookeeper.timeout" : "PT20S",255);"> "druid.selectors.indexing.serviceName" : "druid/overlord",255);"> "druid.discovery.curator.path" : "/druid/discovery",255);"> "kafka.zookeeper.connect" : "localhost:2181",255);"> "kafka.group.id" : "tranquility-kafka",255);"> "consumer.numThreads" : "2",255);"> "commit.periodMillis" : "15000",255);"> "reportDropsAsExceptions" : "false"

}

2) 启动 Tranquility server

# bin/tranquility server -configFile conf/server.json

5.3 从kafka 里面消费数据,然后push到druid

  基本思路设置Tranquility kafkaserver好后,启动它,它就是从指定的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

CentOS7.1.x+Druid 0.12 集群配置的更多相关文章

  1. 从iOS应用程序发送帖子到PHP脚本不工作…简单的解决方案就像

    我之前已经做了好几次了但是由于某些原因我无法通过这个帖子…我尝试了设置为_POST且没有的变量的PHP脚本……当它们未设置为发布时它工作精细.这是我的iOS代码:这里是PHP的一大块,POST变量不在正确的位置?我想这对于更有经验的开发人员来说是一个相当简单的答案,感谢您的帮助!解决方法$_POST是一个数组,而不是一个函数.您需要使用方括号来访问数组索引:

  2. 使用 Swift语言进行 Hadoop 数据流应用程序开发

    如果您发现了问题,或者希望为改进本文提供意见和建议,请在这里指出.在您开始之前,请参阅目前待解决的问题清单.简介本项目包括两类Hadoop流处理应用程序:映射器mapper和总结器reducer。如上所示,在Hadoop上编写流处理程序是一个很简单的工作,也不需要依赖于特定的软件体系。

  3. 在swift中获取NSImage的PNG表示

    非常感谢文件说:所以它期望一本字典,而不是一个零值.提供像这样的空字典:只有在指定了Optional(即[NSObject:AnyObject]的位置?)时才能传递nil值.

  4. android – Eclipse:覆盖project.properties中定义的库路径

    我正在使用ActionBarSherlock作为库.我们没有将ABS包含在我们的存储库中,因此参与ourproject的每个人都必须单独下载并安装它.ActioBarSherlock是一个Android库项目,我通过在同一个Eclipse的工作区中打开它和我的项目来运行它(它们都没有复制到工作区,它们都存在于另一个文件夹中)并通过以下方式将它添加到我的project.properties中:Ref

  5. android – Crashlytics无法使用fabric.properties找到清单

    我正在使用classpath’io.fabric.tools:gradle:1.‘并且在我用于fabric插件的模块中有一个fabric.properties.当我运行gradlewcrashlyticsuploaddistributionProdStaging时,我得到:为什么?解决方法在我使用正确的数据更新fabric.properties并拆分命令后,它工作正常:没有它,错误仍然出现.

  6. Android – 将SQLite与MySQL同步的最佳方式

    参见英文答案>Synchronizingclient-serverdatabases5个我正在开发一个包含网络应用和移动应用程序的项目,该应用程序记录每日用户的数据.用户可以删除,更新他们的数据,他们可以使用许多设备插入数据.我打算这样开发:用户输入他们的数据然后插入sqlite.服务将定期启动(每5小时或每小时)以使用时间戳与MysqL同步.我确实在互联网上使用服务和时间戳搜索了一个样本,但我一

  7. 缺少android.compileSdkVersion!错误gradle build

    我正在尝试构建我的库并将其上传到存储库,但不幸的是gradle构建失败.我花了几个小时试图修复这个错误,但我尝试的没有任何帮助.这是我从根项目目录的build.gradle.和我的模块目录中的build.gradle我还在local.properties文件中添加了一些配置问题是我在gradlebintrayUpload之后遇到以下错误.在错误消息输出结束时,我得到了以下内容解决方法与“编译sdk

  8. android – Gitignore没有忽略某些project.properties

    我正在使用Windows和Mac的github应用程序,我的.gitignore文件有问题.我试图忽略在我的两台机器之间切换时生成的project.properties文件,但我似乎无法让它工作.下面是我的.gitignore的副本,它似乎适用于除了project.properties之外的所有东西,以及我在那里的gen/*,但不那么烦人.我一直在研究这个问题并且没有找到答案,我将不胜感激任何帮助!

  9. android – 如何将唯一的GCM注册标识存储到MySQL中

    我正在设置GoogleCloudMessaging机制的服务器端,使用MySQL存储移动应用提供的注册ID.Google可以发出最多4k个注册码,我被迫将其存储在TEXT字段中.所有的好,到目前为止,问题是我必须处理这样的情况:>用户登录到应用程序>该应用从google请求注册ID>应用程序将新的注册ID发送到应用服务器>服务器存储该注册ID并将其链接到当前登录的用户>该用户注销并且新用户登录>应

  10. nodeJs链接Mysql做增删改查的简单操作

    本篇文章主要介绍了nodeJs链接Mysql做增删改查的简单操作,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部