最近将Druid-0.10.0升级到Druid-0.12.1的过程中遇到一些问题,为了后期方便分析问题和及时解决问题,特此写这篇文章将工作中遇到的Druid问题及解决办法记录下来,以供其他人借鉴,其中如有不妥之处,还望大家多多见谅!!

1、协调节点无法创建任务

协调节点无法创建任务基本可以从以下两个方面进行考虑:

  • 任务信息已在数据库中存在
  • 非堆最大内存小于实际所需内存
实时节点报错信息:
Error: com.metamx.tranquility.druid.IndexServicePermanentException: Service[druid:overlord] call failed with status: 400 Bad Request
任务报错信息:
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[2,684,354,560] = druid.processing.buffer.sizeBytes[536,870,912] * (druid.processing.numMergeBuffers[2] + druid.processing.numThreads[2] + 1)
解决方法:

调小MaxDirectMemorySize或者修改common.runtime.config中的processing.numthreads

-server
-Xms24g
-Xmx24g
-XX:MaxDirectMemorySize=4096m
-Duser.timezone=UTC
-Dfile.encoding=UTF-8
-Djava.io.tmpdir=var/tmp
-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager

注意:这个问题常见于Historical和MiddleManager节点。如果出现此类问题,首先应该排查Historical和MIddleManager节点的MaxDirectMemorySize配置的值。

Historical和MiddleManager节点配置MaxDirectMemorySize必须满足下面这个公式:

MaxDirectMemorySize >= druid.processing.buffer.sizeBytes[536,870,912] * (druid.processing.numMergeBuffers[2] + druid.processing.numThreads[2] + 1)

2、数据进行GroupBy时聚合数量大从而导致报错

出现该错误主要是由以下两方面导致:

  • druid.processing.buffer.sizeBytes配置的缓存数据过小
  • druid.query.groupBy.maxOnDiskStorage默认关闭,未开启磁盘溢出功能
错误信息:
io.druid.query.QueryInterruptedException: Not enough dictionary space to execute this query. Try increasing druid.query.groupBy.maxMergingDictionarySize or enable disk spilling by setting druid.query.groupBy.maxOnDiskStorage to a positive number.
解决方法:
  • Broker、Historical以及实时节点更改druid.processing.buffer.sizeBytes属性值。
druid.processing.buffer.sizeBytes=536870912
  • Broker、Historical以及实时节点开启磁盘溢出和配置最大磁盘存储空间,具体配置如下所示:
druid.query.groupBy.maxOnDiskStorage=1
druid.query.groupBy.maxOnDiskStorage=6442450944

注意:这两种方式中可以任选其中一种,修改配置后,只需要重启相应的节点即可。

Druid创建任务时出现端口占用的情况

这种异常情况下,druid能够正常在mysql中添加task记录,但是没法在var/druid/task目录下创建segment,从而导致无法将数据保存到Druid中。从0.12.0版本开始偶尔会出现这种情况。

报错信息:
2018-07-25T05:00:14,262 WARN [main] com.sun.jersey.spi.inject.Errors - The following warnings have been detected with resource and/or provider classes:
WARNING: A HTTP GET method, public void io.druid.server.http.SegmentListerResource.getSegments(long,long,long,javax.servlet.http.HttpServletRequest) throws java.io.IOException, MUST return a non-void type.
2018-07-25T05:00:14,273 INFO [main] org.eclipse.jetty.server.handler.ContextHandler - Started o.e.j.s.ServletContextHandler@915d7c4{/,null,AVAILABLE}
2018-07-25T05:00:14,277 ERROR [main] io.druid.cli.CliPeon - Error when starting up. Failing.
java.net.BindException: Address already in use
at sun.nio.ch.Net.bind0(Native Method) ~[?:1.8.0_65]
at sun.nio.ch.Net.bind(Net.java:433) ~[?:1.8.0_65]
at sun.nio.ch.Net.bind(Net.java:425) ~[?:1.8.0_65]
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) ~[?:1.8.0_65]
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) ~[?:1.8.0_65]
at org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:317) ~[jetty-server-9.3.19.v20170502.jar:9.3.19.v20170502]
at org.eclipse.jetty.server.AbstractNetworkConnector.doStart(AbstractNetworkConnector.java:80) ~[jetty-server-9.3.19.v20170502.jar:9.3.19.v20170502]
at org.eclipse.jetty.server.ServerConnector.doStart(ServerConnector.java:235) ~[jetty-server-9.3.19.v20170502.jar:9.3.19.v20170502]
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) ~[jetty-util-9.3.19.v20170502.jar:9.3.19.v20170502]
at org.eclipse.jetty.server.Server.doStart(Server.java:401) ~[jetty-server-9.3.19.v20170502.jar:9.3.19.v20170502]
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) ~[jetty-util-9.3.19.v20170502.jar:9.3.19.v20170502]
at io.druid.server.initialization.jetty.JettyServerModule$1.start(JettyServerModule.java:315) ~[druid-server-0.12.1.jar:0.12.1]
at io.druid.java.util.common.lifecycle.Lifecycle.start(Lifecycle.java:311) ~[java-util-0.12.1.jar:0.12.1]
at io.druid.guice.LifecycleModule$2.start(LifecycleModule.java:134) ~[druid-api-0.12.1.jar:0.12.1]
at io.druid.cli.GuiceRunnable.initLifecycle(GuiceRunnable.java:101) [druid-services-0.12.1.jar:0.12.1]
at io.druid.cli.CliPeon.run(CliPeon.java:301) [druid-services-0.12.1.jar:0.12.1]
at io.druid.cli.Main.main(Main.java:116) [druid-services-0.12.1.jar:0.12.1]
解决办法:

MiddleManager节点的配置文件runtime.properties添加如下配置:

cat druid.indexer.runner.startPort=40000

注意事项:先查看linux服务器支持的端口范围,然后根据端口范围定义任务执行起始端口

$ sysctl net.ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 32768 60999

3. Segment进行compact时临时文件不存在导致报错

出现该错误主要是由于MiddleManager节点指定的临时文件不存在

MiddleManager节点配置文件jvm.properties中指定临时目录

-Djava.io.tmpdir=var/tmp
错误信息
java.lang.IllegalStateException: Failed to create directory within 10000 attempts (tried 1472453270713-0 to 1472453270713-9999)
解决办法

手动创建临时目录,比如上面的临时目录var/tmp

[work@localhost ~]$ mkdir -p var/tmp

Druid时序数据库常见问题及处理方式的更多相关文章

  1. Druid时序数据库升级流程

    目前Druid集群版本为0.11.0,新版本0.12.1已支持Druid SQL和Redis,考虑到Druid新特性以及性能的提升,因此需要将Druid从0.11.0版本升级到0.12.1版本,下面将 ...

  2. 时序数据库技术体系 – InfluxDB TSM存储引擎之TSMFile

    本文转自 http://hbasefly.com/2018/01/13/timeseries-database-4/ 为了更加系统的对时序数据库技术进行全方位解读,笔者打算再写一个系列专题(嘿嘿,好像 ...

  3. [转帖]时序数据库技术体系 – InfluxDB TSM存储引擎之数据写入

    时序数据库技术体系 – InfluxDB TSM存储引擎之数据写入 http://hbasefly.com/2018/03/27/timeseries-database-6/  2018年3月27日  ...

  4. 深入浅出:了解时序数据库 InfluxDB

    数据模型 1.时序数据的特征 时序数据应用场景就是在时间线上每个时间点都会从多个数据源涌入数据,按照连续时间的多种纬度产生大量数据,并按秒甚至毫秒计算的实时性写入存储. 传统的RDBMS数据库对写入的 ...

  5. 互联网级监控系统必备-时序数据库之Influxdb

    时间序列数据库,简称时序数据库,Time Series Database,一个全新的领域,最大的特点就是每个条数据都带有Time列. 时序数据库到底能用到什么业务场景,答案是:监控系统. Baidu一 ...

  6. 时序数据库(TSDB)-为万物互联插上一双翅膀

    本文由  网易云发布. 时序数据库(TSDB)是一种特定类型的数据库,主要用来存储时序数据.随着5G技术的不断成熟,物联网技术将会使得万物互联.物联网时代之前只有手机.电脑可以联网,以后所有设备都会联 ...

  7. 时序数据库连载系列:指标届的独角兽Prometheus

    简介 Prometheus是SoundCloud公司开发的一站式监控告警平台,依赖少,功能齐全.于2016年加入CNCF,广泛用于 Kubernetes集群的监控系统中,2018.8月成为继K8S之后 ...

  8. 时序数据库InfluxDB安装及使用

    时序数据库InfluxDB安装及使用 1 安装配置 安装 wget https://dl.influxdata.com/influxdb/releases/influxdb-1.3.1.x86_64. ...

  9. 五、使用druid管理数据库,mybatis连接mysql数据库

    简介:    使用 mybatis 连接 mysql 数据库, 一套简单的增删改查流程, 前台用 bootstrap, bootstrap-table 框架, 最后用 druid 监控数据库连接情况 ...

随机推荐

  1. May 30th 2017 Week 22nd Tuesday

    Knowledge will give you power, but character respect. 知识给你力量,品格给你别人的尊敬. Good characters can help us ...

  2. STL容器及算法题:删除奇数的QQ号

    最近思考到这样一个题目:在STL的set和vector容器里存储了1亿个QQ号,编写函数删除奇数QQ号. 1. STL容器简介 首先了解一下 set 和 vector 以及其他类似的 STL 容器: ...

  3. Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired,

    Did not receive a reply. Possible causes include: the remote application did not send a reply, the m ...

  4. ACM-ICPC 2018 徐州赛区网络预赛 A.Hard to prepare 【规律递推】

    任意门:https://nanti.jisuanke.com/t/31453 A.Hard to prepare After Incident, a feast is usually held in ...

  5. [18/11/26] this关键字、static关键字和静态块(及语句块)

    1.this关键字 this的本质就是“创建好的对象的地址”!  由于在构造方法调用前,对象已经创建.因此,在构造方法中也可以使用this代表“当前对象” [用法]   1.  在程序中产生二义性之处 ...

  6. 简单的使用git克隆上传创建下载删除

    首先我们下载个git 官网:https://git-scm.com/ 我这里下的是64-bit windows setup 下载完成后安装: 一直下一步就好 安装完成后进行打开! 现在我们需要去官网注 ...

  7. 【luogu P3808 AC自动机(简单版)】 模板

    题目链接:https://www.luogu.org/problemnew/show/P3808 #include <queue> #include <cstdio> #inc ...

  8. Android学习笔记_79_ Android 使用 搜索框

    1.在资源文件夹下创建xml文件夹,并创建一个searchable.xml: android:searchSuggestAuthorityshux属性的值跟实现SearchRecentSuggesti ...

  9. asp.net mvc Post上传文件大小限制 (转载)

    最近发现在项目中使用jQuery.form插件上传比较大的文件时,上传不了,于是改了下web.config的上传文件最大限制. <configuration> <system.web ...

  10. ORACLE 账户解除锁定

    用pl/sql连接数据库发现账户被锁定.本以为管理员账户才能解锁.同其他账户登录也能解锁 pl/sql下执行命令 alter user   ****  account unlock ***处为待解锁的 ...