导出Doris数据至HDFS
数据导出(Export)功能可以将用户指定的表或分区的数据,以文本的格式通过Broker进程导出到远端存储上,如HDFS/对象存储(支持S3协议) 等。
- 不建议一次性导出大量数据。一个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/hadoop.hadoop.com@HADOOP.COM",
"kerberos_keytab"="${BIGDATA_HOME}/FusionInsight_Doris_*/install/FusionInsight-Doris-*/doris-fe/bin/doris.keytab"
);
- 集群未启用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"
);
主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。
- 集群已启用Kerberos认证(安全模式)
- 查看导出作业状态
提交作业后,可以通过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后,创建具有管理员权限的角色并绑定给用户。
- 集群已启用Kerberos认证(安全模式)
- 已安装MySQL客户端,相关操作可参考使用MySQL客户端连接Doris。
导出Doris数据至HDFS示例
- 登录安装了MySQL的节点,执行以下命令,连接Doris数据库。
如果集群已启用Kerberos认证(安全模式),需先执行以下命令再连接Doris数据库:
export LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN=1
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界面连接数据库。
- 执行以下命令创建数据库:
create database if not exists example_db;
- 执行以下命令创建表:
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;
- 执行以下命令插入数据:
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");
- 执行以下命令导出“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/hadoop.hadoop.com@HADOOP.COM",
"kerberos_keytab"="${BIGDATA_HOME}/FusionInsight_Doris_8.3.0/install/FusionInsight-Doris-1.2.3/doris-fe/bin/doris.keytab"
);
- 执行以下命令查询导出作业状态:
SHOW EXPORT;
相关配置参数
登录FusionInsight Manager,选择“集群 > 服务 > Doris > 配置 > FE(角色) > 自定义”,在自定义参数“fe.conf.customized.configs”中新增以下参数:
- 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。