第3.0章:StarRocks数据导入——总览

  一、导入说明

    数据导入是指将原始数据按照业务需求进行清洗、转换、并加载到 StarRocks 中的过程,从而可以在 StarRocks 系统中进行极速统一的数据分析。

  StarRocks 数据导入实现有以下共性特征  

1.1 原子性保证

   StarRocks 中所有导入方式都提供原子性保证,即每一个导入作业,都是一个完整的事务操作。导入事务可以保证一批次内的数据原子生效,不会出现部分数据写入的情况。

   每个导入作业都有一个标签 (Label),由用户指定或系统自动生成,用于标识该导入作业。每个标签在一个数据库内都是唯一的,仅可用于一个成功的导入作业。一个导入作业成功后,其标签不可再用于提交其他导入作业。只有失败的导入作业的标签,才可再用于提交其他导入作业。这一机制可以保证任一标签对应的数据最多被导入一次,即可以在StarRocks侧实现At-Most-Once(至多一次)语义。如果结合上游系统的 At-Least-Once语义,则可以实现导入数据 Exactly-Once语义。

1.2 导入模式

  StarRocks 支持两种导入模式:同步导入和异步导入。

1.2.1 同步导入

  对于同步导入方式,返回结果即表示导入成功还是失败。支持同步模式的导入方式有 Stream Load 和 INSERT。​​​​​​​

用户操作过程如下:

  1. 创建导入作业。

  2. 查看 StarRocks 返回的导入结果。

  3. 判断导入结果。如果导入结果为失败,可以重试导入作业。

  • Stream Load 导入作业的执行流程:

(1)用户发起导入请求,该请求可以直接发往FE,由FE将请求转发给某个BE,由该BE充当协调者的角色,也可以由用户自己在导入请求时指定某个BE为协调者角色,发起导入请求。

   ps:如果把导入作业请求发送给 FE,FE 会通过轮询机制选定由哪一个 BE 来接收请求,从而实现 StarRocks 集群内的负载均衡,推荐导入作业的请求直接发送给 FE。

(2)协调者在收到导入请求后,会把数据分发到其他BE数据节点,当集群内一份数据有两个数据节点完成数据写入后,就标志着这次导入事务成功,剩余的一份数据会由剩下的节点从这两个副本中去同步数据。

(3)导入数据成功后,协调者会将导入任务的状态返回给用户。

ps:详细过程见文章:

 第3.3章:StarRocks数据导入——Stream Load_strarrocks strem load-CSDN博客

  • INSERT INTO

第3.1章:StarRocks数据导入——Insert into-CSDN博客

 1.2.2 异步导入

     对于异步导入方式,返回成功仅代表作业提交成功,不代表数据导入成功,需要使用对应的命令查看导入作业的运行状态。支持异步模式的导入方式有 Broker Load、Routine Load 和 Spark Load

  • 如果导入作业创建成功,StarRocks 会异步执行导入作业。但作业创建成功并不代表数据导入已经成功。您需要通过语句或命令来查看导入作业的状态,并且根据导入作业的状态来判断数据导入是否成功。
  • 如果导入作业创建失败,可以根据失败信息,判断是否需要重试。

用户操作过程如下:

  1. 创建导入作业。

  2. 根据 StarRocks 返回的作业创建结果,判断作业是否创建成功。

    • 如果作业创建成功,进入步骤 3。
    • 如果作业创建失败,可以回到步骤 1,尝试重试导入作业。
  3. 轮询查看导入作业的状态,直到状态变为 FINISHED 或 CANCELLED

  • Broker Load 和Spark Load导入作业的执行流程主要分为 5 个阶段:

   基于官网:

(1)PENDING:该阶段是指提交导入作业后,等待 FE 调度执行

(2)ETL:该阶段执行数据的预处理,包括清洗、分区、排序、聚合等。

(3)LOADING:该阶段先对数据进行清洗和转换,然后将数据发送给BE处理。当数据全部导入后,进入等待生效过程,此时,导入作业的状态依旧是 LOADING

(4)FINISHED:在导入作业涉及的所有数据均生效后,作业的状态变成 FINISHED,此时,导入的数据均可查询。FINISHED 是导入作业的最终状态。

(5)CANCELLED:在导入作业的状态变为 FINISHED 之前,您可以随时取消作业。另外,如果导入出现错误,StarRocks 系统也会自动取消导入作业。作业取消后,进入 CANCELLED 状态。CANCELLED 也是导入作业的一种最终状态。

 基于自己整理:

(1)用户在客户端创建broker load任务。
(2)fe在接收到用户的创建请求后,会根据请求导入的源文件的数据量和文件数量以及be的数量生成plan,并将plan分发到多个be节点上,每个be会负责一定数据量的导入任务。
(3)对应的be在接收到导入任务时,会通过broker进程,去远端存储系统上拉去相应的数据到对应的be上,在对数据 transform之后将数据导入StarRocks系统。
(4)所有be均完成导入,由fe最终决定导入是否成功,并返回最终结果给用户;

 ps:详细过程见文章: 

第3.5章:StarRocks数据导入——Broker Load-CSDN博客

  • Routine Load 导入作业的执行流程:

(1)用户通过客户端发起创建routine load任务的请求;

(2)FE在收到请求后,会将请求任务通过Job Scheduler将任务拆分成若干个Task,每个Task被TaskScheduler分配到指定的BE上执行;

(3)拆分的每个task会被Task Scheduler调度到不同的BE节点上执行;

(4)位于每个BE节点的Task 任务会按照预先定义好的消费逻辑,数据攒批后调用stream load任务,完成对应批次数据的导入;

(5)持续生成新的导入任务,不间断地导入数据;

ps:详细过程见文章:

第3.4章:StarRocks数据导入——Routine Load-CSDN博客

1.3 导入方式

    可以根据业务场景、数据量、数据源、数据格式和导入频次等来选择合适的导入方式。StarRocks 目前提供Stream Load、INSERT、Broker Load、Routine Load、Spark Load等多种导入方式,区别如下:

  总结:下图详细展示了在各种数据源场景下,应该选择哪一种导入方式。

导入方式的注意事项:

(1)从 Kafka 导入数据时,推荐使用Routine Load实现导入。但是,如果导入过程中有复杂的多表关联和 ETL 预处理,建议先使用Flink引擎从 Kafka 读取数据并对数据进行处理,然后再通过 StarRocks 提供的插件​flink-connector-starrocks把处理后的数据导入到 StarRocks 中。

(2)从另外一个 StarRocks集群导入数据时,推荐创建StarRocks外部表然后使用INSERT实现导入,也可以借助Datax工具实现导入。

(3)从 MySQL导入数据时,推荐创建MySQL外部表、然后使用INSERT实现导入。或者也可以借助DataX实现导入。如果要导入实时数据,利用flink cdc导入StarRocks(需要使用插件flink-connector-starrocks) ,详细内容见文章:https://docs.starrocks.io/zh/docs/loading/Flink_cdc_load/

(4)从 Oracle、PostgreSQL或 SQL Server等数据源导入数据时,推荐创建JDBC外部表、然后使用INSERT实现导入。或者也可以借助DataX工具实现导入。

ps:Datax介绍见文章:

 第3.6章:StarRocks数据导入——DataX StarRocksWriter-CSDN博客

(5) 从 Hive、Hudi等导入数据时,推荐创建Hive catalog、Hudi Catalog,然后使用INSERT实现导入。

  • 23
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值