doris部署和hdfs

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计算结果的报表层数据,以离线批处理的方式得到报表数据。
Share