美文网首页大数据
Doris使用笔记

Doris使用笔记

作者: JasonGofen | 来源:发表于2022-02-21 11:54 被阅读0次

    bilibli上已经有doris的使用培训视频了,可以学习下,基本包含了常见doris的使用场景。
    https://www.bilibili.com/video/BV1FR4y1T7fQ?from=search&seid=15653946141863931600&spm_id_from=333.337.0.0
    以下内容持续更新,欢迎投递。

    Drois 使用注意的事项:

    1.尽量不要美化SQL
    2.最好SQL就是一行,在长也一行
    3.SQL中尽量不要有多余空格
    4.创建Doris表时ENGINE必须是OLAP,只要是OLAP必须分桶
    5.与ES对接的表,如果ES烂了,需要重新创建表
    6.如果需要更新表中的数据,需要建立unique的表,通过insert语句更新
    7.ODBC链接外表时,服务器需要安装相应ODBC内容
    8.kafka方式消费插入数据最小间隔5s一次
    9.doris不支持高频插入数据,解决方法增大每次插入的间隔(具体解决方案有待摸索)
    10.建表时需要设置3个副本,replication_num = "3"
    11.当重启fe或者be节点后(目前还不是特别清楚到底重启哪个会对routine load kafka产生影响),需要重启连接kafka的job:RESUME ROUTINE LOAD FOR your_routine_load_name;
    12.使用Doris on ES时,尤其是在ES集群负载很高的情况下,在延迟允许的情况下建议将es的扫描超时时间设置大一点,如30s甚至更久。
    13.Batch size,不是越大越好。我们实践中发现4096下最好,可以最高达到每秒30w的扫描速度。
    14.Doris使用Bitmap做精确去重时,有时候会发现Sql延迟比较高,但是系统CPU利用率低,可以通过调大fragment_instance_num的值。
    15.SQL语句大全:http://palo.baidu.com/docs/SQL%E6%89%8B%E5%86%8C/SQL%E8%AF%AD%E5%8F%A5
    16.要删除一个带有分区的表数据时,直接使用delete from不能删除,可以在执行delete前,先执行set delete_without_partition = true;,或者在删除数据时,指定数据所在分区。
    17.可通过在执行sql时,设置 set parallel_fragment_exec_instance_num=8 每个会话执行sql所能使用的并发度,可提升sql的查询效率。但需要注意,该项不是设置越大越好。这里有我们在实践过程中使用的建议。在以单线程顺序执行sql的情况下,如果服务器物理核心数为16,设置8可以达到较优的查询效率,设置过大或过小均达不到较优的查询效率。在以多线程并发执行的sql情况下,设置的越小查询效率越高。大家可以依据各自的执行sql的场景,设置合理的并发度,在服务器性能已经很慢的情况下,可以考虑提升服务器数量和硬件配置。
    18.ODBC外表的使用说明:通常在外表数据量较小,少于100W条时,可以通过外部表的方式访问。由于外表无法发挥Doris在存储引擎部分的能力和会带来额外的网络开销,所以建议根据实际对查询的访问时延要求来确定是否通过外部表访问还是将数据导入Doris之中。
    19 用Doris建立ES外链表时,如果ES中某个字段值得长度过大,需要在建立外链表时设置 "enable_docvalue_scan" = "false" 。

    Doris 命名规范:

    1.Doris数仓分层按照传统分层进行ods、dwd、dws、dim、ads
    2.数据库名按照 数仓分层_业务含义,示例:ods_business
    3.在Doris中建立的数据库名、表名和字段名,统一都是小写英文单词,每个因为单词以 _ 分割,前缀为数仓层名,如 ods_one_two_three。

    Doris 优化建议

    1.RollUp https://doris.apache.org/master/zh-CN/getting-started/data-model-rollup.html#%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5
    2.合理的选择数据模型、分区、分桶
    3.物化视图 https://doris.apache.org/branch-0.14/zh-CN/administrator-guide/materialized_view.html
    4.动态分区 https://doris.apache.org/branch-0.14/zh-CN/administrator-guide/dynamic-partition.html
    5.分区缓存 https://doris.apache.org/branch-0.14/zh-CN/administrator-guide/partition_cache.html
    6.Colocate Join可以有效的提高数据的查询效率 https://doris.apache.org/branch-0.14/zh-CN/administrator-guide/colocation-join.html#%E5%90%8D%E8%AF%8D%E8%A7%A3%E9%87%8A
    7.boradcast join和shuffe join:后者会把小表进行hash拆分,把一部分数据放到每张大表所在be进行join
    8.Runtime Filter 是在 Doris 0.15 版本中正式加入的新功能。旨在为某些 Join 查询在运行时动态生成过滤条件,来减少扫描的数据量,避免不必要的I/O和网络传输,从而加速查询。具体使用方式参照:https://doris.apache.org/zh-CN/administrator-guide/runtime-filter.html#%E5%90%8D%E8%AF%8D%E8%A7%A3%E9%87%8A
    9.Doris从0.15版本开始支持向量化引擎,介绍可以看:活动回顾|Apache Doris 向量化技术实现与后续规划,其中开启向量化引擎需要的设置如下:

    set enable_vectorized_engine = true;
    set batch_size = 4096; // batch设置为4096的效果是最好的,不设置效果也不错
    

    以下是测试,lineorder这张表16G数据,6亿+行,测试数据来自Doris提供的测试数据集,以下是单表聚合sql:
    select sum(l.lo_extendedprice) , sum(l.lo_ordtotalprice) from lineorder l ;
    单线程、关闭向量化引擎:
    set parallel_fragment_exec_instance_num=1;
    set enable_vectorized_engine = false;

    耗时6.588s
    单线程、开启向量化引擎:
    耗时1.159s
    多线程、开启向量化引擎:
    耗时593ms
    通过多线程+向量化引擎,单表的聚合耗时提升有将近10倍以上。目前我已部署1.0版本,特意用官方提供的数据集测试了下多表join时,向量化引擎的表现,从测试结果看没看到明显的提升。所在向量化引擎目前还只能用在单表中,如果各位有更好的发现请分享给我。

    相关文章

      网友评论

        本文标题:Doris使用笔记

        本文链接:https://www.haomeiwen.com/subject/ulujcrtx.html