前言
-
Stream Load 是一种推的方式,即导入的数据依靠客户端读取,并推送到 Doris。Broker Load 则是将导入请求发送给 Doris,有 Doris 主动拉取数据,所以如果数据存储在类似 HDFS 或者 对象存储中,则使用 Broker Load 是最方便的。这样,数据就不需要经过客户端,而有 Doris 直接读取导入。
-
从 HDFS 或者 S3 直接读取,也可以通过 湖仓一体/TVF 中的 HDFS TVF 或者 S3 TVF 进行导入。基于 TVF 的 Insert Into 当前为同步导入,Broker Load 是一个异步的导入方式。
-
Broker Load 适合源数据存储在远程存储系统,比如 HDFS,并且数据量比较大的场景。
1、导入原理
-
用户在提交导入任务后,FE 会生成对应的 Plan 并根据目前 BE 的个数和文件的大小,将 Plan 分给 多个 BE 执行,每个 BE 执行一部分导入数据。
-
BE 在执行的过程中会从 Broker 拉取数据,在对数据 transform 之后将数据导入系统。所有 BE 均完成导入,由 FE 最终决定导入是否成功。
-
从上图中可以看到,BE 会依赖 Broker 进程来读取相应远程存储系统的数据。之所以引入 Broker 进程,主要是用来针对不同的远程存储系统,用户可以按照 Broker 进程的标准开发其相应的 Broker 进程,Broker 进程可以使用 Java 程序开发,更好的兼容大数据生态中的各类存储系统。由于 broker 进程和 BE 进程的分离,也确保了两个进程的错误隔离,提升 BE 的稳定性。
-
当前 BE 内置了对 HDFS 和 S3 两个 Broker 的支持,所以如果从 HDFS 和 S3 中导入数据,则不需要额外启动 Broker 进程。如果有自己定制的 Broker 实现,则需要部署相应的 Broker 进程。
2、导入语法
LOAD LABEL [database_name.]your_label
(
data_desc1[, data_desc2, ...]
)
WITH BROKER broker_name
[broker_properties]
[PROPERTIES ("key"="value", ...)];
- your_label:当前导入的标签,在一个database内
需要唯一
- data_desc:可以通过多个data_desc向多个表导入数据,多个表导入要么全部成功,要么全部失败
- PROPERTIES:用于指定一些特殊的参数,如下所示:
timeout :
导入任务的超时时间,在该时间内未完成,则状态变成CANCELLED。使用例子"timeout" = “14400”,默认4小时,单位为秒。导入任务的大概时间计算方式为:(总文件大小(MB) * 待导入的表及相关Rollup表的个数) / (单个BE导入速度(MB/S) * 导入并发数)
max_filter_ratio:
导入数据的容错率,默认为0,范围为0-1,计算方式为:max_filter_ratio = (dpp.abnorm.ALL / (dpp.abnorm.ALL + dpp.norm.ALL))
exec_mem_limit:导入的内存限制。默认为 2GB,单位为字节
3、导入案例
LOAD LABEL dwd.dwd_vehicle_stops_df_$[yyyyMMdd]
(
DATA INFILE("hdfs://172.0.0.1:8020/user/hive/warehouse/dwd.db/dwd_vehicle_stops_df/date=$[yyyyMMdd-1]/*")
INTO TABLE `dwd_vehicle_stops_df`
FORMAT AS "parquet"
(veh_no,p_color,start_lon,start_lat,end_lon,end_lat,start_time,end_time,cur_code,distance,pos_cnt,duration,vec3)
COLUMNS FROM PATH AS (date)
)
with HDFS (
"fs.defaultFS"="hdfs://172.0.0.22:8020",
"hadoop.username"="cttic"
)
PROPERTIES
(
"timeout"="1200",
"max_filter_ratio"="0.1"
);
-
DATA INFILE
指定需要导入的文件路径。可以是多个。可以使用通配符。路径最终必须匹配到文件,如果只匹配到目录则导入会失败。 -
FORMAT AS
指定文件类型,支持 CSV、PARQUET 和 ORC 格式。默认为 CSV。
-
COLUMNS FROM PATH AS
指定从导入文件路径中抽取的列。
总结
如果此篇文章有帮助到您, 希望打大佬们能
关注
、点赞
、收藏
、评论
支持一波,非常感谢大家!
如果有不对的地方请指正!!!