使用Streamloader工具导入本地数据至Doris
Streamloader是一款用于将本地数据导入至Doris数据库的客户端工具。相较于直接使用Rest API的单并发导入,该工具支持多并发导入功能,降低了导入大量数据的耗时。Streamloader工具支持以下功能:
- 并发导入:实现了Stream Load的多并发导入,可以通过workers参数设置导入并发数。
- 多文件导入:一次导入操作可以同时导入多个文件及目录,支持设置通配符,并且会自动递归获取文件夹下的所有文件。
- 断点续传:在导入过程中可能出现部分失败的情况,支持根据日志提示的命令,手动重新执行对应的命令在失败点处继续进行传输。
- 自动重传:在导入任务出现失败的情况后,无需手动重传,Streamloader工具会自动重传默认的次数,如果仍然不成功,则打印出手动重传的命令。
- 该章节仅适用于MRS 3.6.0-LTS及之后版本。
- 仅支持导入本地文件系统的文件,不支持导入远端文件系统中的文件(例如HDFS)。
- 仅支持导入Text格式的文件,不支持导入RCFile、ORC、Parquet、JSON等格式的文件。
前提条件
使用Streamloader工具导入本地数据至Doris
- 登录FusionInsight Manager页面,选择“集群 > 服务 > Doris > 实例”,查看并记录任一Doris实例的业务IP地址。
- 以root用户登录主OMS节点,执行以下命令获取集群安装目录:
su - omm
echo ${BIGDATA_HOME}
例如,集群安装目录为:
/opt/Bigdata
- 使用root或omm用户登录1查看的节点,执行以下命令切换至Doris客户端所在目录:
cd 集群安装目录/FusionInsight_Doris_*/install/FusionInsight-Doris-2.1.7/doris-be/streamloader
- 执行以下命令导入文件数据:
- 导入多个文件:
./doris-streamloader --source_file='file0.csv,file1.csv,file2.csv' --url='${http_mode}://任一BE实例的IP地址:webserver_port' --header='column_separator:,?columns:col1,col2' --db='testdb' --table='testtbl' --request_service='BE' --u='doris_user' --p='passwd'
例如,数据导入成功后,回显信息如下:
图1 导入多个文件数据成功
- 导入多个目录下的文件:
./doris-streamloader --source_file='dir1,dir2,dir3' --url='${http_mode}://任一FE实例的IP地址:访问FE的HTTPS或HTTP端口' --header='column_separator:,?columns:col1,col2' --db='testdb' --table='testtbl' --u='doris_user' --p='passwd'
- 集群已启用Kerberos认证(安全模式)时${http_mode}值为“https”,访问FE的端口为“https_port”配置项的值;集群未启用Kerberos认证(普通模式)时${http_mode}值为“http”,访问FE的端口为“http_port”配置项的值。
- webserver_port为BE的HTTP Server服务端口,可在Manager界面选择“集群 > 服务 > Doris > 配置”,搜索“webserver_port”参数查看。
- Doris BE或FE实例IP地址可通过登录MRS集群的Manager界面,选择“集群 > 服务 > Doris > 实例”,查看任一BE或FE实例的业务IP地址。
- 如果通过BE HTTP服务导入数据,则必须使用参数--request_service="BE"。
- 更多导入参数介绍请参见表1。
- 导入多个文件:
参数说明
|
参数 |
参数说明 |
默认值 |
配置建议 |
|---|---|---|---|
|
--source_file |
待导入的源数据,可以是目录,也可以是文件,多个文件或目录以英文逗号分隔。 |
- |
- |
|
--url |
待请求HTTP服务的IP和端口。 |
- |
- |
|
--header |
HTTP请求的header参数。 |
- |
详细介绍请参见表1。 |
|
--db |
待导入数据的Doris数据库名称。 |
- |
- |
|
--table |
待导入数据的Doris表名称。 |
- |
- |
|
--u |
连接Doris的用户名。 |
root |
- |
|
--p |
连接Doris的用户密码。 |
空字符串 |
- |
|
--request_service |
调用的Stream Loader Rest接口所属的服务,值为FE或BE。 |
FE |
Stream Loader Rest接口选择为BE时,必须显示指定该参数值为BE,否则可能会导入数据失败。 |
|
--compress |
导入数据是否在HTTP传输时进行压缩。 |
false |
保持默认,数据压缩再解压会增加工具和Doris BE的CPU压力,所以仅在数据源所在机器网络带宽瓶颈时开启数据压缩功能。 |
|
--timeout |
向Doris发送HTTP请求的超时时间,单位为秒。 |
60*60*10 |
保持默认。 |
|
--batch |
文件批量读取和发送的粒度,单位为行。 |
4096 |
保持默认。 |
|
--batch_byte |
文件批量读取和发送的粒度,单位为byte |
943718400(900MB) |
保持默认。 |
|
--workers |
导入的并发数。 |
0 |
该参数设置为“0”时表示自动模式,会根据导入数据的大小、磁盘的吞吐量、Stream Load导入速度计算相应的值。也可以根据集群的性能手动设置,建议不要超过10。 |
|
--disk_throughput |
磁盘的吞吐量,单位为MB/s。 |
800 |
通常保持默认即可,该值参与--workers的自动推算过程。 如果希望通过工具能计算出一个适当的workers数,可以根据实际磁盘吞吐设置。 |
|
--streamload_throughput |
Stream Load导入实际的吞吐大小,单位为MB/s。 |
100 |
通常保持默认即可。该值参与--workers的自动推算过程。 如果希望通过工具能计算出一个适当的workers 数,可以设置实测的 Stream Load的吞吐,计算公式为: (LoadBytes*1000)/(LoadTimeMs*1024*1024) |
|
--max_byte_per_task |
每个导入任务数据量的最大大小,超过该值剩下的数据会被拆分到一个新的导入任务中。 |
9663676416 |
建议设置一个较大的值来减少导入的版本数。但如果遇到“body exceed max size” 错误,且不想调整“streaming_load_max_mb” 参数(需重启BE实例),或是遇到“-238 TOO MANY SEGMENT”错误,可以临时调小该配置的值。 |
|
--check_utf8 |
是否对导入数据的编码进行检查:
|
true |
保持默认。 |
|
--debug |
是否打印Debug日志。 |
false |
保持默认。 |
|
--auto_retry |
自动重传失败的worker序号和task序号的列表。 |
空字符串 |
仅导入失败重传时使用,正常导入无需关注。 导入任务失败时会提示具体参数内容,复制执行即可。例如,如果--auto_retry="1,1,2,1",则表示需要重传的task为第一个worker的第一个 task和第二个worker的第一个task。 |
|
--auto_retry_times |
自动重传的次数。 |
3 |
保持默认,如果不需要导入任务失败后重传,则需把该参数值设置为“0”。 |
|
--auto_retry_interval |
自动重传的时间间隔。 |
60 |
保持默认,如果Doris因故障导致导入任务失败,建议根据Doris实际重启的时间间隔来设置该参数值。 |
|
--log_filename |
日志存储的位置 |
"" |
默认将日志打印到控制台上,如果要将日志打印到日志文件中,可以设置存储日志文件的路径,例如: --log_filename = "/var/log" |