目录
技术文档:
https://www.kancloud.cn/dorisdb/dorisdb/2146878
http://doris.apache.org/master/zh-CN/getting-started/basic-usage.html
- be 配置storage_root_path 多目录,选择策略是什么?A:一个盘一个
- insert单条输入,单条就会触发这种compaction(不要单条输入)(实时入库,后台的compation太占资源了,加机器应该解决不了,不管怎么调整参数,控制不了,一启动就把内存直接吃完)
- Doris怎么解决实时场景,怎么解决单条入库的问题呢?A:微批来实现,如果你的实时数据量没那么大,建议微批,比如1000条或者10秒钟一批,哪个值先到就就执行哪个。
- routine load,一个topic多个任务可以消费多张表吗?A:一个routine load只能对一张表。
- web端:设置fe.conf中 enable_http_server_v2=true就可以登录新版的UI。
- doris启动的时候,按照默认的配置来。doris用了内网的ip地址。现在通过priority_networks 设置外网的ip地址,发现启动不了了,必须设置生成 priority_networks=内网ip 才行。ip迁移之后fe启动不了怎么处理 配置文件已经改成新的ip了 但是日志里还是报错旧ip 应该是因为之前添加的节点都是旧的信息 fe启动不了好像也没法进去修改。可否采用固定ip?doris 节点不能更改ip。(方法:备份master节点doris-meta,新ip的机子重建fe,将doris-meta/image/ROLE中ip改为`hostname -i`。172.17.0.0/16只保留172.17这十六位不变,然后ip就按照改ROLE的方式来重启节点)
- and..
案例测试
bug:hive本地导入数据,建表时不能创建分通表,因为数据复制过去的时候不能确定分桶策略。在hdfs上可以,应为数据本来就是保存在hdfs上,导入时只是将数据移动过去而已。
Doris集群:
- devtest1.com: 节点1配置FE(Leader)
- devtest2.com: 节点2配置FE(Observer)和 BE
- devtest3.com: 节点4配置BE
- devtest4.com: 节点3配置BE
Hive:
Spark:
- Video表:1127万约500M(496M)数据
- User表:212万条约35M数据
- User_info表:196,608条数据约11M
导入数据测试
表1. doris与hive、spark导入数据对比
1127万约500M(496M)数据 | |||
hive | 本地导入 | 无分区无分桶 | 2.397s |
hdfs导入 | 无分区无分桶 | 0.455s | |
10分桶 | 89.954s | ||
spark | hdfs导入 | 无分区无分桶 | 0.761s |
doris | stream load | 1 buckets | 66.707s |
10 buckets | 48.153s | ||
100 buckets | 39.551s | ||
broker load | 1 buckets | 53s | |
10 buckets | 27s | ||
100 buckets | 19s |
表2. doris导入数据自行对比(均100 buckets)
doris | stream load | 1127万约500M(496M)数据 | 变化 | 追加500条数据速度 | ||||
导入时间 | BE | BE | BE | 导入后总大小 | ||||
无索引 | 39.551s | 118M | 103M | 135M | 356M | 压缩了140M | 0.287s | |
3个rollup索引 | 62.301s | 251M | 249M | 262M | 759M | 增加了263M | 0.290 s | |
3个物化视图 | 62.753s | 283M | 249M | 267M | 799M | 增加了303M | 0.294 s |
1:Doris
1127万约500M(496M)数据,
stream load本地导入:39.551s(100 buckets)、66.707s(1 buckets)48.153s,(1 0buckets
三个BE:118M,103M,135M(合计:356M,原文件:496M,压缩了140M)
(curl --location-trusted -u root -H "label:video20210625_01" -H "column_separator:\t" -H "max_filter_ratio:0.2" -T videoall.txt http://devtest1.com:18030/api/example_db/video_test1/_stream_load)
Broker load : 从hdfs上导入数据,用时19s,100 buckets。、53s 1 buckets, 27s(10 buckets)
分区+分桶是doris的优势
测试一个分区+分桶的。
追加更新数据的速度:追加500条数据:287 ms
2:hive
本地导入用时:(2.397 seconds)
Hdfs导入用时:0.455s(无分区无分桶)
89.954 s(10分桶)
3:Doris创建了3个rollup索引
CREATE TABLE IF NOT EXISTS video_test1 (
videoid VARCHAR(32) NOT NULL COMMENT "id of video",
uploader VARCHAR(64) NOT NULL COMMENT "course name ",
age INT NOT NULL COMMENT "city",
category VARCHAR(64) NOT NULL COMMENT "category",
length INT NOT NULL COMMENT "length",
views INT NOT NULL COMMENT "views",
rate FLOAT NOT NULL COMMENT "rate",
rating INT NOT NULL COMMENT "rating",
conments INT NOT NULL COMMENT "conments count"
)
DUPLICATE KEY(videoid,uploader)
DISTRIBUTED BY HASH(videoid) BUCKETS 100
rollup(
r1(videoid,category),
r2(videoid,rate),
r3(videoid,views,rating)
)
PROPERTIES("replication_num" = "1");
stream load本地导入:62.301s
三个BE:251M,246M,262M(合计:759M,原文件:496M,增加了263M)
追加更新数据的速度:500条数据0.290 s
Broker load :
4:Doris创建了3个上述相同的物化视图
stream load:62.753s
三个BE:283M,249M,267M(合计:799M,原文件:496M,增加了303M)
追加更新数据的速度:500条数据0.294 s
查询测试
表1 video表字段
字段 | 备注 | 详细描述 |
video id | 视频唯一id | 11位字符串 |
uploader | 视频上传者 | 上传视频的用户名String |
age | 视频年龄 | 视频在平台上的整数天 |
category | 视频类别 | 上传视频指定的视频分类 |
length | 视频长度 | 整形数字标识的视频长度 |
views | 观看次数 | 视频被浏览的次数 |
rate | 视频评分 | 满分5分 |
ratings | 流量 | 视频的流量,整型数字 |
conments | 评论数 | 一个视频的整数评论数 |
表2 user表字段
字段 | 备注 | 字段类型 |
uploader | 上传者用户名 | string |
videos | 上传视频数 | int |
friends | 朋友数量 | int |
表3 user_info表字段
字段 | 备注 | 字段类型 |
id | 唯一id | int |
name | 名字 | string |
sex | 性别 | string |
age | 年龄 | int |
city | 城市 | string |
job | 工作 | string |
sale | 工资 | int |
hobby | 爱好 | string |
1、统计视频观看数Top100
select videoid, uploader, age, category, length, views, rate, ratings from video order by views desc limit 100;
Hive: 40.764 s
Spark: 14.413s
Doris: 0.84 s
2、统计视频类别热度
select category, count(videoid) as hot from video group by category order by hot desc limit 10;
Hive: 61.061 s
Spark: 13.569s
Doris: 0.65 sec
3、统计每个类别中视频流量Top10
select videoId,views,ratings from video where category = "Music" order by ratings desc limit 10;
Hive: 32.464 seconds
Spark: 7.058s
Doris:0.14 sec (使用了rollup时间:)
4、select category from video order by ratings desc limit 10;
Hive:39.6s
Spark: 14.752 s
Doris:0.37s(使用了rollup)
5、两个表的join:
表1:video:11274,227条数据,user:2139,109条数据
例1:select t2.videoid, t2.views, t2.rating, t1.videos, t1.friends from ( select * from user order by videos desc limit 10) t1 join video t2 on t1.uploader = t2.uploader order by views desc limit 20;
Hive:OOM
Spark:16.165 s
Doris:11.32s
6、测试colocation join
例2:select * from user_orl join video on user_orl.uploader = video.uploader order by views desc limit 20;
Spark:56.619s
Doris:9.42s :未使用colocation_join
3.37s(使用colocation_join,本地join)
7、物化视图
create materialized view category_views as select category, sum(views) from video group by category;
select category, sum(views) from video group by category;
Spark:8.032s
原来查询:3.52s
物化视图:0.13s
建的物化视图,因为数据量不大,物化视图表大小太小,看不到大小变化。
大小没有变化有两个可能,1. 大小收集的不及时 2. 数据量不大,不足以产生明显的变化。
8、三个表的join操作
表1:video:11274,227条数据,user:2139,109条数据,user_info:196,608条数据
例1:
select t1.name, t1.city, t1.job, t1.sale, t1.hobby, t2.category, t2.rating, t3.videosfrom user_info t1 join user t3 on t1.name = t3.uploader
join video t2 on t1.name = t2.uploader order by t2.views desc limit 40;
Spark:36.817s
Doris:3.088s
例2:
select t2.videoid,t2.uploader, t2.views, t2.rating, t1.videos, t1.friends,t3.city, t3.job, t3.sale, t3.hobby
from ( select videoid, uploader,views, rating,conments from video order by views desc) t2
join user t1 on t1.uploader = t2.uploader
join user_info t3 on t2.uploader = t3.name
order by rating desc limit 20;
Spark:72.461 s
Doris:4.024 s
目的:
- 这组件支持哪些功能
- 有哪些特点,有什么特殊功能,其他组件没有的
- 像索引是否必须使用,用和不用的区别
- 查询效率,对于复杂查询,简单查询,join查询等不同场景下的效率
- 性能:小数据量下的性能,大数据量下的性能
- 应用场景,适合于哪些场景
- 环境部署是否方便/复杂
- 维护方便?
- 跟其他产品的兼容性如何?
- 使用体验怎么样,方不方便用?
- 数据存储的大小是否有压缩?
- 物化视图,rollup创建前后,数据存储的大小差异?数据导入速度的差异?
- 1G数据导入速度?