Doris扩展能力 踏雪扬尘

摘要:
用户可以在运行时安装或卸载这个插件。该插件可以将FE的审计日志定期的导入到指定Doris集群中,以方便用户通过SQL对审计日志进行查看和分析。DorisOnESDoris-On-ES将Doris的分布式查询规划能力和ES的全文检索能力相结合,提供更完善的OLAP分析场景解决方案;也就是Doris相当于外表查询ES中的数据。
目录

审计日志插件

Doris 的审计日志插件是在 FE 的插件框架基础上开发的。是一个可选插件。用户可以在运行时安装或卸载这个插件。
该插件可以将 FE 的审计日志定期的导入到指定 Doris 集群中,以方便用户通过 SQL 对审计日志进行查看和分析。

Doris On ES

Doris-On-ES将Doris的分布式查询规划能力和ES(Elasticsearch)的全文检索能力相结合,提供更完善的OLAP分析场景解决方案; 也就是 Doris 相当于外表查询 ES中的数据。
提供如下能力:

  1. ES中的多index分布式Join查询
  2. 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个原则:

  1. 尽力而为: 自动探测要读取的字段是否开启列式存储(doc_value: true),如果获取的字段全部有列存,Doris会从列式存储中获取所有字段的值
  2. 自动降级: 如果要获取的字段只要有一个字段没有列存,所有字段的值都会从行存_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 表的数据分析问题:

  1. 支持 Hive 数据源接入Doris
  2. 支持 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的能力来解决外部表的数据分析问题:

  1. 支持各种数据源接入Doris
  2. 支持Doris与各种数据源中的表联合查询,进行更加复杂的分析操作
  3. 通过insert into将Doris执行的查询结果写入外部的数据源

Doris中创建ODBC的外表

  1. 不使用Resource创建ODBC的外
  2. 通过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的输出以火焰图的形式展示出来。

免责声明:文章转载自《Doris扩展能力 踏雪扬尘》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇iOS网络请求安全认证(JWT,RSA)DataGuard主备归档存在gap的处理办法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)

1.外部配置加载顺序 SpringBoot也可以从以下位置加载配置; 优先级从高到低 高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置 1.命令行参数 所有的配置都可以在命令行上进行指定 先打包在进行测试 java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --server.port=80...

Hive函数大全-完整版

Hive函数大全–完整版 现在虽然有很多SQL ON Hadoop的解决方案,像Spark SQL、Impala、Presto等等,但就目前来看,在基于Hadoop的大数据分析平台、数据仓库中,Hive仍然是不可替代的角色。尽管它的相应延迟大,尽管它启动MapReduce的时间相当长,但是它太方便、功能太强大了,做离线批量计算、ad-hoc查询甚至是实现数...

Kafka:生产者

Kafka java客户端数据生产流程解析 ProducerRecord ProducerRecord 含义: 发送给Kafka Broker的key/value 值对 //ProducerRecord的成员变量 public class ProducerRecord<K, V> { private final String top...

flink-kafka-connector 的实现

简单介绍 flink-kafka-connector用来连接kafka,用于消费kafka的数据, 并传入给下游的算子。 使用方式 首先来看下flink-kafka-connector的简单使用, 在官方文档中已经介绍了,传入相关的配置, 创建consumer对象, 并调用addsource即可 Properties properties = new Pr...

DorisSQL与MySQL函数对照 差异篇

## 1.日期函数### 时区.```mysql -> convert_tz(dt,from_tz,to_tz)doris -> CONVERT_TZ(DATETIME dt, VARCHAR from_tz, VARCHAR to_tz)```### 获取当前的日期,以DATE类型返回.```mysql -> CURDATE()dori...

hive函数之~字符串函数

1、字符串长度函数:length 语法: length(string A)返回值: int说明:返回字符串A的长度 hive> selectlength('abcedfg') fromtableName; 7 2、字符串反转函数:reverse 语法: reverse(string A)返回值: string说明:返回字符串A的反转结果 h...