doris 为什么要用在hdfs上? doris 如何在hdfs上使用?
理解doris的理念,再考虑整合hdfs
如下图所示,数据源经过各种数据集成和加工处理后,通常会入库到实时数据仓库 Apache Doris 和离线湖仓(Hive, Iceberg, Hudi 中),Apache Doris 被广泛应用在以下场景中。
你需要知道doris的设计有存储引擎 ,查询引擎。 要考虑整合hdfs,你需要考虑查询引擎方面,Apache Doris 采用 MPP 的模型,节点间和节点内都并行执行,也支持多个大表的分布式 Shuffle Join。
直白的说就是
doris整合hdfs,实在查询引擎上优化,通过多节点读取hdfs的数据,然后在引擎里面做聚合
创建 HDFS 表函数
hdfs(
"uri" = "..",
"fs.defaultFS" = "...",
"hadoop.username" = "...",
"format" = "csv",
"keyn" = "valuen"
...
);
里面指定uri,format,就是对hdfs的常规操作了,是指hdfs数据文件的路径和格式化存储方式,这里包含了读写相关的压缩,解压,编码操作了。就是说,最终还得是hdfs的自身结构
查询方式
select * from hdfs(
"uri" = "hdfs://127.0.0.1:842/user/doris/csv_format_test/student.csv",
"fs.defaultFS" = "hdfs://127.0.0.1:8424",
"hadoop.username" = "doris",
"format" = "csv");
ha 方式查询
select * from hdfs(
"uri" = "hdfs://127.0.0.1:842/user/doris/csv_format_test/student.csv",
"fs.defaultFS" = "hdfs://127.0.0.1:8424",
"hadoop.username" = "doris",
"format" = "csv",
"dfs.nameservices" = "my_hdfs",
"dfs.ha.namenodes.my_hdfs" = "nn1,nn2",
"dfs.namenode.rpc-address.my_hdfs.nn1" = "nanmenode01:8020",
"dfs.namenode.rpc-address.my_hdfs.nn2" = "nanmenode02:8020",
"dfs.client.failover.proxy.provider.my_hdfs" = "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider");
总结
· 如果项目通过doris统一做etl的时候,doris可以很方便的从各种数据源加载数据,再计算,然后输出到目标数据源。
· doris 可以使用hdfs做存储系统,便于存储系统的扩展,但是建议是作为历史数据的存储,实时查询未必有效。
· doris 的存储引擎可以作为hdfs计算结果的报表层数据,以离线批处理的方式得到报表数据。