目录
2、将testTbl表中的分区p1,p2导出到hdfs上,broker使用kerberos 认证方式,同时配置 namenode HA
3、将testTbl表中的所有数据导出到hdfs上,以","作为列分隔符
Export是Doris提供的将数据导出的功能,可以将用户指定的表或分区的数据,以文本的格式,通过 Broker 进程导出到远端存储上,如 HDFS/BOS 等(暂不支持导出到本地)。
可以使用Mysql Client 运行 HELP Export 查看官方帮助信息。
基本原理
用户提交一个 Export 作业后,Doris 会统计这个作业涉及的所有 Tablet,然后对这些 Tablet 进行分组,每组生成一个特殊的查询计划。该查询计划会读取所包含的 Tablet 上的数据,然后通过 Broker 将数据写到远端存储指定的路径中。
用户提交一个Export 作业到 FE后,FE的调度器会通过两个阶段来执行:
- PENDING:生成 ExportPendingTask,向 BE 发送 snapshot 命令,对所有涉及到的 Tablet 做一个快照,并生成多个查询计划(一个查询计划会扫描多个分片,将读取的数据以行的形式组织,每 1024 行为一个 batch,调用 Broker 写入到远端存储上)。
- EXPORTING:FE 生成 ExportExporingTask,开始执行查询计划。
查询计划在执行时,会在指定的远端存储的路径中,临时目录(tmp),导出的数据首先会写入这个临时目录。每个查询计划会生成一个文件,当所有数据都导出后,Doris 会将这些文件 rename 到用户指定的路径中。
使用实例
语法:
EXPORT TABLE table_name
[PARTITION (p1[,p2])]
TO export_path
[opt_properties]
broker;
说明:
- table_name:当前要导出的表的表名,目前支持engine为olap和mysql的表的导出。
- partition:可以只导出指定表的某些指定分区。
- export_path:导出的路径,需为目录,目前不能导出到本地,需要导出到broker。
- opt_properties:用于指定一些特殊参数。
- 语法:[PROPERTIES ("key"="value", ...)]
- 参数:column_separator:指定导出的列分隔符,默认为\t。
- 参数:line_delimiter:指定导出的行分隔符,默认为\n。
- broker:用于指定导出使用的broke
- 语法:WITH BROKER broker_name ("key"="value"[,...])
1、将testTbl表中的所有数据导出到hdfs上
EXPORT TABLE testTbl
TO "hdfs://hdfs_host:port/a/b/c"
WITH BROKER "broker_name" (
"username"="xxx",
"password"="yyy"
);
2、将testTbl表中的分区p1,p2导出到hdfs上,broker使用kerberos 认证方式,同时配置 namenode HA
EXPORT TABLE testTbl
PARTITION (p20200101)
TO "hdfs://hadoop/user/platform/miuiads/stat_event_cube_bak2017/date=20200101"
WITH BROKER "broker1"(
"hadoop.security.authentication"="kerberos",
"kerberos_principal"="",
"kerberos_keytab"="",
"dfs.nameservices"="",
"dfs.ha.namenodes.zjyprc-hadoop-5"="",
"dfs.namenode.rpc-address.zjyprc-hadoop-5.host0"="",
"dfs.namenode.rpc-address.zjyprc-hadoop-5.host1"="",
"dfs.client.failover.proxy.provider"="org.apache.hadoop.hdfs.server.namenode.ha.ZkConfiguredFailoverProxyProvider"
);
3、将testTbl表中的所有数据导出到hdfs上,以","作为列分隔符
EXPORT TABLE testTbl
TO "hdfs://hdfs_host:port/a/b/c"
PROPERTIES ("column_separator"=",")
WITH BROKER "broker_name" (
"username"="xxx",
"password"="yyy"
);
提交作业后,可以通过 SHOW EXPORT
命令查询导入作业状态。
注意事项
- 不建议一次性导出大量数据,一个 Export 作业建议的导出数据量最大在几十 GB,过大的导出会导致更多的垃圾文件和更高的重试成本,如果表数据量过大,建议按照分区导出。
- 如果 Export 作业运行失败,在远端存储中产生的临时目录tmp,以及已经生成的文件不会被删除,需要用户手动删除。
- 如果 Export 作业运行成功,在远端存储中产生的tmp目录,根据远端存储的文件系统语义,可能会保留,也可能会被清除,如果该目录没有被清除,需要手动清除。
- Export 作业只会导出 Base 表的数据,不会导出 Rollup Index 的数据。
- Export 作业会扫描数据,占用 IO 资源,可能会影响系统的查询延迟。