更新时间:2025-08-01 GMT+08:00

导出Doris数据至HDFS

数据导出(Export)功能可以将用户指定的表或分区的数据,以文本的格式通过Broker进程导出到远端存储上,如HDFS/对象存储(支持S3协议) 等。

Export是一个异步执行的命令,命令执行成功后立即返回结果,可以通过SHOW EXPORT;命令查看该Export任务的详细信息。

约束与限制

  • 不建议一次性导出大量数据。一个Export作业建议的导出数据量最大在几十GB。过大的导出会导致更多的垃圾文件和更高的重试成本。
  • 如果表数据量过大,建议按照分区导出。
  • 在Export作业运行过程中,如果FE发生重启或主备倒换,则Export作业会失败,需要用户重新提交。
  • 如果Export作业运行失败,在远端存储中产生的“__doris_export_tmp_xxx”临时目录,及已经生成的文件不会被删除,需手动删除。
  • 如果Export作业运行成功,在远端存储中产生的“__doris_export_tmp_xxx”目录,根据远端存储的文件系统语义,可能会保留,也可能会被清除。

    例如,对象存储(支持S3协议)中,通过rename操作将一个目录中的最后一个文件移走后,该目录也会被删除。如果该目录没有被清除,可以手动清除。

  • 当Export运行完成后(成功或失败),FE发生重启或主备倒换,则SHOW EXPORT展示的作业的部分信息会丢失,无法查看。
  • Export作业只会导出Base表的数据,不会导出Rollup Index的数据。
  • Export作业会扫描数据,占用I/O资源,可能会影响系统的查询延迟。

语法介绍

  • 导出Doris数据到HDFS
    • 集群已启用Kerberos认证(安全模式)
      EXPORT TABLE db1.tbl1
      PARTITION (p1,p2)
      [WHERE [expr]]
      TO "hdfs://主NameNode实例IP地址:RPC端口号/tmp/export/"
      PROPERTIES
      (
      "label" = "mylabel",
      "column_separator"=",",
      "columns" = "col1,col2",
      "exec_mem_limit"="2147483648",
      "timeout" = "3600"
      )
      WITH BROKER "broker_name"
      (
      "hadoop.security.authentication"="kerberos",
      "kerberos_principal"=${doris_keytab_principal}",
      "kerberos_keytab"="/home/omm/doris_keytab/doris.keytab",
      "dfs.nameservices" = "hacluster",
      "dfs.ha.namenodes.hacluster" = "37,36",
      "dfs.namenode.rpc-address.hacluster.37" = "主NameNode实例IP地址:RPC端口号",
      "dfs.namenode.rpc-address.hacluster.36" = "备NameNode实例IP地址:RPC端口号",
      "dfs.client.failover.proxy.provider.hacluster" = "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
      );
    • 集群未启用Kerberos认证(普通模式)
      EXPORT TABLE db1.tbl1
      PARTITION (p1,p2)
      [WHERE [expr]]
      TO "hdfs://主NameNode实例IP地址:RPC端口号/tmp/export/"
      PROPERTIES
      (
      "label" = "mylabel",
      "column_separator"=",",
      "columns" = "col1,col2",
      "exec_mem_limit"="2147483648",
      "timeout" = "3600"
      )
      WITH BROKER "broker_name"
      (
      "username" = "user",
      "password" = "passwd",
      "dfs.nameservices" = "hacluster",
      "dfs.ha.namenodes.hacluster" = "37,36",
      "dfs.namenode.rpc-address.hacluster.37" = "主NameNode实例IP地址:RPC端口号",
      "dfs.namenode.rpc-address.hacluster.36" = "备NameNode实例IP地址:RPC端口号",
      "dfs.client.failover.proxy.provider.hacluster" = "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
      );

    主备NameNode实例IP地址可在Manager界面,选择“集群 > 服务 > HDFS > 实例”查看。

    RPC端口号可在Manager界面,选择“集群 > 服务 > HDFS > 配置”,搜索“dfs.namenode.rpc.port”查看。

    其他参数解释表1所示。

    表1 导出Doris数据到HDFS命令相关参数介绍

    参数名称

    参数描述

    label

    本次导出作业的标识,可以使用这个标识查看作业状态。

    column_separator

    列分隔符,默认为\t,支持不可见字符,例如:'\x07'。

    columns

    要导出的列,使用英文逗号分隔,如果不设置该参数默认导出表的所有列。

    line_delimiter

    行分隔符,默认为\n,支持不可见字符,例如:'\x07'。

    exec_mem_limit

    表示导出作业中,一个查询计划在单个BE上的内存使用限制,默认为2GB,单位为字节。

    timeout

    作业超时时间,默认值为2小时,单位为秒。

    tablet_num_per_task

    每个查询计划分配的最大分片数,默认值为5。

    broker_name

    表示Broker名称,可在MySQL客户端执行show broker;命令查看。

    kerberos_principal

    访问Hadoop集群的keytab文件对应的principal。

    • MRS 3.5.0之前版本,参数值为“doris/hadoop.hadoop.com@HADOOP.COM”。
    • MRS 3.5.0及之后版本,格式为“doris/hadoop.${系统域名转换为小写}@${系统域名}”,系统域名可登录Manager页面,选择“系统 > 权限 > 域和互信”,查看“本端域”参数获取。例如,查看到的系统域名为“A39A7DF8_953D_4772_B909_035A594FFA55.COM”,则该参数值为“doris/hadoop.a39a7df8_953d_4772_b909_035a594ffa55.com@A39A7DF8_953D_4772_B909_035A594FFA55.COM”。

    kerberos_keytab

    访问Hadoop集群的keytab文件,该keytab位于FE节点的“${BIGDATA_HOME}/FusionInsight_Doris_*/install/FusionInsight-Doris-*/doris-be/bin/doris.keytab”路径中,需要拷贝该keytab文件到所有Broker节点上,例如/home/omm/doris_keytab”目录下,并执行以下命令设置“doris.keytab”文件属组:

    chown omm:wheel /home/omm/doris_keytab -R

    dfs.nameservices

    集群NameService名称。可在NameNode所在节点的“${BIGDATA_HOME}/FusionInsight_HD_*/1_*_NameNode/etc”目录下的“hdfs-site.xml”中查找该配置项的值。

    dfs.ha.namenodes.hacluster

    集群NameService前缀,包含两个值。可在NameNode所在节点的“${BIGDATA_HOME}/FusionInsight_HD_*/1_*_NameNode/etc”目录下的“hdfs-site.xml”中查找该配置项的值。

    dfs.client.failover.proxy.provider.hacluster

    指定HDFS客户端连接集群中Active状态节点的Java类,值为“org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider”。

  • 查看导出作业状态

    提交作业后,可以通过以下命令查询导出作业状态:

    SHOW EXPORT;
    例如,导出作业状态为:
    JobId: 14008
    State: FINISHED
    Progress: 100%
    TaskInfo: {"partitions":["*"],"exec mem limit":2147483648,"column separator":",","line delimiter":"\n","tablet num":1,"broker":"hdfs","coord num":1,"db":"default_cluster:db1","tbl":"tbl3"}
    Path: hdfs://host/path/to/export/
    CreateTime: 2019-06-25 17:08:24
    StartTime: 2019-06-25 17:08:28
    FinishTime: 2019-06-25 17:08:34
    Timeout: 3600
    ErrorMsg: NULL
    1 row in set (0.01 sec)

    参数解释如表2所示。

    表2 导出作业状态参数介绍

    参数名称

    参数描述

    JobId

    作业的ID,值唯一。

    State

    作业状态,包括:

    • PENDING:作业待调度。
    • EXPORTING:数据导出中。
    • FINISHED:作业导出成功。
    • ANCELLED:导出作业运行失败。

    Progress

    作业进度,以查询计划为单位。例如一共10个查询计划,当前已完成3个,则进度为30%。

    TaskInfo

    以JSON格式展示的作业信息,其中:

    • db:数据库名称。
    • tbl:表名称。
    • partitions:指定导出的分区,*表示所有分区。
    • exec mem limit:查询计划内存使用限制,单位为字节。
    • column separator:导出文件的列分隔符。
    • line delimiter:导出文件的行分隔符。
    • tablet num:总Tablet数量。
    • broker:使用的Broker的名称。
    • coord num:查询计划的个数。

    Path

    远端存储上的导出路径。

    CreateTime/StartTime/FinishTime:

    作业的创建时间、开始调度时间和结束时间。

    Timeout

    作业超时时间,单位是秒,该时间从CreateTime开始计算。

    ErrorMsg

    如果作业出现错误,ErrorMsg会显示错误原因。

  • 取消导出任务

    提交作业后,可以通过CANCEL_EXPORT命令取消导出作业。取消命令如下:

    CANCEL EXPORT
    FROM example_db
    WHERE LABEL like "%example%";

前提条件

  • 已创建包含Doris服务的集群,集群内各服务运行正常。
  • 待连接Doris数据库的节点与MRS集群网络互通。
  • 创建具有Doris管理权限的用户。
    • 集群已启用Kerberos认证(安全模式)

      在FusionInsight Manager中创建一个人机用户,例如“dorisuser”,创建一个拥有“Doris管理员权限”的角色绑定给该用户。

      使用新建的用户dorisuser重新登录FusionInsight Manager,修改该用户初始密码。

    • 集群未启用Kerberos认证(普通模式)

      使用admin用户连接Doris后,创建具有管理员权限的角色并绑定给用户。

  • 已安装MySQL客户端,相关操作可参考使用MySQL客户端连接Doris

导出Doris数据至HDFS示例

执行导出任务时,可在Doris配置界面根据实际需求新增相关配置参数中的Export作业相关自定义参数,以提升作业导出效率。

  1. 登录安装了MySQL的节点,执行以下命令,连接Doris数据库。

    如果集群已启用Kerberos认证(安全模式),需先执行以下命令:

    export LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN=1

    连接Doris数据库:

    mysql -u数据库登录用户 -p数据库登录用户密码 -P数据库连接端口 -hDoris FE实例IP地址
    • 数据库连接端口为Doris FE的查询连接端口,可以通过登录Manager,单击“集群 > 服务 > Doris > 配置”,查询Doris服务的“query_port”参数获取。
    • Doris FE实例IP地址可通过登录MRS集群的Manager界面,单击“集群 > 服务 > Doris > 实例”,查看任一FE实例的IP地址。
    • 用户也可以使用MySQL连接软件或者Doris WebUI界面连接数据库。

  2. 执行以下命令创建数据库:

    create database if not exists example_db;

  3. 执行以下命令创建表:

    CREATE TABLE example_db.test_export_tbl (
    `c1` int NOT NULL,
    `c2` int NOT NULL,
    `c3` string NOT NULL,
    `c4` date NOT NULL
    ) ENGINE=OLAP
    DUPLICATE KEY(`c1`, `c2`)
    DISTRIBUTED BY HASH(`c1`) BUCKETS 1;

  4. 执行以下命令插入数据:

    insert into example_db.test_export_tbl values(1,1,1,"2020-02-21"),(2,2,2,"2020-03-21"),(3,3,3,"2020-04-21");

  5. 执行以下命令导出“test_export_tbl”表数据到HDFS中:

    EXPORT TABLE example_db.test_export_tbl
    TO "hdfs://主NameNode实例IP地址:RPC端口号/tmp/export/"
    PROPERTIES
    (
    "label" = "label_exporthdfs_20230218031",
    "column_separator"=",",
    "columns" = "c1,c2,c3,c4",
    "exec_mem_limit"="2147483648",
    "timeout" = "3600"
    )
    with broker "broker_192_168_67_78"
    (
    "hadoop.security.authentication"="kerberos",
    "kerberos_principal"="${doris_keytab_principal}",
    "kerberos_keytab"="/home/omm/doris_keytab/doris.keytab",
    "dfs.nameservices" = "hacluster",
    "dfs.ha.namenodes.hacluster" = "37,36",
    "dfs.namenode.rpc-address.hacluster.37" = "主NameNode实例IP地址:RPC端口号",
    "dfs.namenode.rpc-address.hacluster.36" = "备NameNode实例IP地址:RPC端口号",
    "dfs.client.failover.proxy.provider.hacluster" = "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
    );

  6. 执行以下命令查询导出作业状态:

    SHOW EXPORT;

相关配置参数

登录FusionInsight Manager,选择“集群 > 服务 > Doris > 配置 > FE(角色) > 自定义”,在自定义参数“fe.conf.customized.configs”中新增表3中的参数。

表3 Export作业相关自定义参数介绍

参数

参数说明

export_checker_interval_second

Export作业调度器的调度间隔,默认为5秒。设置该参数后需重启FE。

export_running_job_num_limit

正在运行的Export作业数量限制。如果超过该值,则作业将等待并处于PENDING状态。默认值为5,可以在作业运行时调整。

export_task_default_timeout_second

Export作业默认超时时间,默认为2小时,可以在作业运行时调整。

export_tablet_num_per_task

一个查询计划负责的最大分片数,默认为5。

label

用户手动指定的EXPORT任务label,如果不指定会自动生成一个label。