druid.io出现的问题及解决方法

近期由于公司需要,研究了druid.io,下面是我遇到的一些问题以及解决办法,当做记录。

使用的druid.io版本为0.12.3

1、使用druid-hdfs-storage扩展将hdfs用于深度存储。使用Map / Reduce作业从hadoop批量加载数据。

公司已有的集群是CDH-5.10.1版本,该版本的cdh使用hadoop2.6.0,druid.io的0.12.3版本中自带的hadoop版本为2.7.3,网上有资料说可以通过修改配置文件的方式改变hadoop版本,但是我一直没有测试成功,所以最后采用的方法是重新编译了druid.io,修改源码中hadoop的版本为2.6.0,具体的操作过程可以看这个链接https://blog.csdn.net/aubdiy/article/details/78270195

将hadoop-dependencies/hadoop-client/2.6.0/目录下的jar包替换成cdh安装目录下的jar包,jar包大概在****/CDH-5.10.1/lib/hadoop/lib地址可以找到。Druid中的每个节点都要替换掉。

修改/conf/druid/middleManager和/conf-quickstart/druid/middleManager目录下的runtime.properties,在druid.indexer.runner.javaOpts后面添加-Dhdp.version=2.6.0 -Dhadoop.mapreduce.job.classloader=true

将Hadoop的core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml放到Druid每个节点的conf/druid/_common/目录下。

2、使用kafka摄入数据

使用kafka摄入数据时经常出现12009 ms has passed since last append的报错,

在Kafka目录中,修改/config/ server.properties,增加以下字段:

batch.size=16384

扫描二维码关注公众号,回复: 9567509 查看本文章

request.timeout.ms = 30000

以上两个值都为默认值,出现报错时可以增大这两个字段的示数。但是这种方法好像治标不治本,我没有找到其他的解决办法,有其他解决办法的话希望可以留言给我。

3、删除数据

curl -XDELETE http://ip:8081/druid/coordinator/v1/datasources/{dataSourceName}

curl -X 'POST' -H 'Content-Type:application/json' -d @quickstart/deletedata.json http://ip:8081/druid/indexer/v1/task

deletedata.json的结构大致如下:

{
    "type": "kill",
    "dataSource": {dataSourceName},
    "interval" : <all_segments_in_this_interval_will_die!>
}

关于interval的值,可以通过查看segment的详细信息获得:

curl -POST http://ip:8081/druid/coordinator/v1/metadata/datasources/{dataSourceName}/segments?full

4、更新数据

关于更新数据,我只在官方文档上看到了解决方法,分为3种,下面是文档翻译过来的:

1、更新维度值

如果您的维度需要经常更新值,请先尝试使用 lookups lookups的经典用例是当您将一个ID维度存储在Druid段中,并希望将ID维度映射到可能需要定期更新的可读字符串值。

2、重建细分(重建索引)

如果查找不充分,您可以在特定的时间间隔内完全重建德鲁伊片段。重建段称为重建索引数据。例如,如果要在现有细分中添加或删除列,或者要更改细分的汇总粒度,则必须重新编制数据索引。

我们建议您保留原始数据的副本,以备您需要重新编制数据索引时使用。

3、处理延迟事件(Delta摄取)

如果您有批处理提取管道并且有延迟事件进入并希望将这些事件附加到现有段并避免使用重建索引重建新段的开销,则可以使用增量提取。

粗略的可以理解为:

第一种:更新 lookups,在 lookups中查询数据,这种方法不会改变实际存储在segment中的值。

第二种:直接重新摄入某一时间间隔的数据,这样可以改变存储在segment中的数据。

第三种:向旧段添加新行。

下面要说明的是第一种方法:

我是先向druid中注册的lookup,然后再进行使用

如果你以前从来没有配置查找,必须使用一个空的JSON对象{}/druid/coordinator/v1/lookups/config初始化配置。

注册查找:

curl -X 'POST' -H 'Content-Type:application/json' -d @quickstart/registerlookup.json http://ip:8081/druid/coordinator/v1/lookups/config

registerlookup.json的结构大致如下:

{
	"__default": {
		"org_no_customer1": {
			"version": "v0",
			"lookupExtractorFactory": {
				"type": "map",
				"map": {
					"111": "222"
				}
			}
		}
	}
}

map中的‘111’即key值,是存储在segment中的值,是旧数据,‘222’即value值,是要更新的新数据。

更新查找:

curl -X 'POST' -H 'Content-Type:application/json' -d @quickstart/updatelookup.json http://ip:8081/druid/coordinator/v1/lookups/config/__default/org_no_customer1

updatelookup.json的结构大致如下:

{
  "version": "v1",
  "lookupExtractorFactory": {
    "type": "map",
    "map": {
      "111": "333"
    }
  }
}

在查找中查询数据:

curl -X 'POST' -H 'Content-Type:application/json' -d @quickstart/querylookup.json http://ip:8082/druid/v2?pretty

querylookup.json的内容大致如下:

{
	"queryType": "groupBy",
	"dataSource": "energytest",
	"granularity": "day",
	"dimensions": [{
			"type": "lookup",
			"dimension": "org_no",
			"outputName": "org_no",
			"outputType": "STRING",
			"name": "org_no_customer1"
		},
		{
			"type": "default",
			"dimension": "pap",
			"outputName": "pap",
			"outputType": "DOUBLE"
		},
		{
			"type": "default",
			"dimension": "id",
			"outputName": "id",
			"outputType": "STRING"
		}
	],
	"filter": {
		"type": "selector",
		"dimension": "id",
		"value": "1515016369"
	},
	"aggregations": [{
		"type": "doubleSum",
		"name": "papadd",
		"fieldName": "pap"
	}],
	"intervals": ["2016-01-01T00:00:00.000Z/2016-01-02T00:00:00.000Z"]
}

三次查询结果如下:

  id org_no
第一次查询 1515016369 111
第二次查询 1515016369 222
第三次查询 1515016369 333


第一次的查询结果是存储在segment中的数据,未使用查找,第二次的查询结果是注册了查找之后,从查找中获取出来的值,第三次查询更新了查找之后,查询出的值。

删除查找:

curl -X DELETE http://ip:8081/druid/coordinator/v1/lookups/config/__default/org_no_customer1

下面是查找部分的官方文档地址,讲解的更详细:

http://druid.io/docs/0.12.3/querying/lookups.html

 

 

发布了7 篇原创文章 · 获赞 2 · 访问量 1716

猜你喜欢

转载自blog.csdn.net/youyoufusheng/article/details/88353448
今日推荐