Doris扩展能力
- 审计日志插件
- Doris On ES
- 创建ES索引
- Doris中创建ES外表
- Doris output plugin
- Hive External Table of Doris
- Doris 插件框架
- ODBC External Table Of Doris
- 调试工具
审计日志插件
Doris 的审计日志插件是在 FE 的插件框架基础上开发的。是一个可选插件。用户可以在运行时安装或卸载这个插件。
该插件可以将 FE 的审计日志定期的导入到指定 Doris 集群中,以方便用户通过 SQL 对审计日志进行查看和分析。
Doris On ES
Doris-On-ES将Doris的分布式查询规划能力和ES(Elasticsearch)的全文检索能力相结合,提供更完善的OLAP分析场景解决方案; 也就是 Doris 相当于外表查询 ES中的数据。
提供如下能力:
- ES中的多index分布式Join查询
- Doris和ES中的表联合查询,更复杂的全文检索过滤
创建ES索引
curl -X POST 'localhost:9200/test/_doc' -H "Content-Type: application/json;charset=UTF-8" -d '
{
"settings": {
"index": {
"number_of_shards": "1",
"number_of_replicas": "0"
}
},
"mappings": {
"doc": { // ES 7.x版本之后创建索引时不需要指定type,会有一个默认且唯一的`_doc` type
"properties": {
"k1": {
"type": "long"
},
"k2": {
"type": "date"
},
"k3": {
"type": "keyword"
},
"k4": {
"type": "text",
"analyzer": "standard"
},
"k5": {
"type": "float"
}
}
}
}
}'
ES索引导入数据
curl -XPOST localhost:9200/_bulk -H "Content-Type: application/json;charset=UTF-8" --data-binary @data.json
{"index":{"_index":"test","_type":"_doc"}}
{ "k1" : 100, "k2": "2020-01-01", "k3": "Trying out Elasticsearch", "k4": "Trying out Elasticsearch", "k5": 10.0}
{"index":{"_index":"test","_type":"_doc"}}
{ "k1" : 100, "k2": "2020-01-01", "k3": "Trying out Doris", "k4": "Trying out Doris", "k5": 10.0}
{"index":{"_index":"test","_type":"_doc"}}
{ "k1" : 100, "k2": "2020-01-01", "k3": "Doris On ES", "k4": "Doris On ES", "k5": 10.0}
{"index":{"_index":"test","_type":"_doc"}}
{ "k1" : 100, "k2": "2020-01-01", "k3": "Doris", "k4": "Doris", "k5": 10.0}
{"index":{"_index":"test","_type":"_doc"}}
{ "k1" : 100, "k2": "2020-01-01", "k3": "ES", "k4": "ES", "k5": 10.0}
Doris中创建ES外表
// ENGINE必须是Elasticsearch
CREATE EXTERNAL TABLE `test` (
`_id` varchar COMMENT "",
`k1` bigint(20) COMMENT "",
`k2` datetime COMMENT "",
`k3` varchar(20) COMMENT "",
`k4` varchar(100) COMMENT "",
`k5` float COMMENT ""
) ENGINE=ELASTICSEARCH
PROPERTIES (
"hosts" = "http://172.24.xx.65:9200",
"index" = "test",
"type" = "_doc",
"user" = "",
"password" = "",
"enable_docvalue_scan" = "true",
"nodes_discovery" = "true",
"enable_keyword_sniff" = "true"
);
过滤条件下推:
过滤条件下推到ES去执行,减少返回的数据量,提高效率;
启用列式扫描优化查询速度(enable_docvalue_scan=true):
开启之后会遵循以下2个原则:
- 尽力而为: 自动探测要读取的字段是否开启列式存储(doc_value: true),如果获取的字段全部有列存,Doris会从列式存储中获取所有字段的值
- 自动降级: 如果要获取的字段只要有一个字段没有列存,所有字段的值都会从行存_source中解析获取
默认情况下,Doris On ES会从行存也就是_source中获取所需的所有列,_source的存储采用的行式+json的形式存储,在批量读取性能上要劣于列式存储,尤其在只需要少数列的情况下尤为明显,只获取少数列的情况下,docvalue的性能大约是_source性能的十几倍
查询用法:
完成在Doris中建立ES外表后,除了无法使用Doris中的数据模型(rollup、预聚合、物化视图等)外并无区别
Doris output plugin
该插件用于logstash输出数据到Doris,使用 HTTP 协议与 Doris FE Http接口交互,并通过 Doris 的 stream load 的方式进行数据导入
Hive External Table of Doris
Hive External Table of Doris 提供了 Doris 直接访问 Hive 外部表的能力,外部表省去了繁琐的数据导入工作,并借助 Doris 本身的 OLAP 的能力来解决 Hive 表的数据分析问题:
- 支持 Hive 数据源接入Doris
- 支持 Doris 与 Hive 数据源中的表联合查询,进行更加复杂的分析操作
-- 语法
CREATE [EXTERNAL] TABLE table_name (
col_name col_type [NULL | NOT NULL] [COMMENT "comment"]
) ENGINE=HIVE
[COMMENT "comment"]
PROPERTIES (
'property_name'='property_value',
...
);
-- 例子:创建 Hive 集群中 hive_db 下的 hive_table 表
CREATE TABLE `t_hive` (
`name` varchar(20) NOT NULL COMMENT "",
`age` int NOT NULL COMMENT "",
`s1` int NOT NULL COMMENT "",
`s2` int NOT NULL COMMENT "",
`s3` varchar(20) NOT NULL COMMENT "",
`s4` varchar(20) NOT NULL COMMENT "",
`s5` varchar(20) NOT NULL COMMENT ""
) ENGINE=HIVE
COMMENT "HIVE111"
PROPERTIES (
'hive.metastore.uris' = 'thrift://172.24.xx.65:9083',
'database' = 'fff',
'table' = 't11'
);
完成在 Doris 中建立 Hive 外表后,除了无法使用 Doris 中的数据模型(rollup、预聚合、物化视图等)外,与普通的 Doris OLAP 表并无区别
Doris 插件框架
Doris 的插件框架支持在运行时添加/卸载自定义插件,而不需要重启服务,用户可以通过开发自己的插件来扩展Doris的功能。
一个FE的插件可以使一个zip压缩包或者是一个目录。其内容至少包含两个文件:plugin.properties 和 .jar 文件。plugin.properties用于描述插件信息。
ODBC External Table Of Doris
ODBC External Table Of Doris 提供了Doris通过数据库访问的标准接口(ODBC)来访问外部表,外部表省去了繁琐的数据导入工作,让Doris可以具有了访问各式数据库的能力,并借助Doris本身的OLAP的能力来解决外部表的数据分析问题:
- 支持各种数据源接入Doris
- 支持Doris与各种数据源中的表联合查询,进行更加复杂的分析操作
- 通过insert into将Doris执行的查询结果写入外部的数据源
Doris中创建ODBC的外表
- 不使用Resource创建ODBC的外
- 通过ODBC_Resource来创建ODBC外表 (推荐使用的方式)
CREATE EXTERNAL RESOURCE `mysql_odbc`
PROPERTIES (
"type" = "odbc_catalog",
"host" = "172.24.xx.65",
"port" = "3306",
"user" = "root",
"password" = "xxx",
"database" = "data_channel",
"odbc_type" = "mysql",
"driver" = "com.mysql.cj.jdbc.Driver"
);
CREATE EXTERNAL TABLE `t_api_mysql` (
`id` BIGIN NOT NULL COMMENT "",
`api_group_id` char(10) NOT NULL COMMENT "",
`api_name` varchar(20) NOT NULL COMMENT "",
`api_path` varchar(20) NOT NULL COMMENT "",
`protocol` varchar(20) NOT NULL COMMENT ""
) ENGINE=ODBC
COMMENT "ODBC"
PROPERTIES (
"odbc_catalog_resource" = "mysql_odbc",
"database" = "data_channel",
"table" = "t_api"
);
完成在Doris中建立ODBC外表后,除了无法使用Doris中的数据模型(rollup、预聚合、物化视图等)外,与普通的Doris表并无区别。
调试工具
在Doris的使用、开发过程中,经常会遇到需要对Doris进行调试的场景,这里介绍一些常用的调试工具。
pprof (opens new window): 来自gperftools,用于将gperftools所产生的内容转化成便于人可以阅读的格式,比如pdf, svg, text等.
graphviz (opens new window): 在没有这个库的时候pprof只可以转化为text格式,但这种方式不易查看。那么安装这个库后,pprof可以转化为svg、pdf等格式,对于调用关系则更加清晰明了。
perf (opens new window): linux内核自带性能分析工具。这里 (opens new window)有一些perf的使用例子。
FlameGraph (opens new window): 可视化工具,用于将perf的输出以火焰图的形式展示出来。