
# 使用Streamloader工具导入本地数据至Doris
Streamloader是一款用于将本地数据导入至Doris数据库的客户端工具。相较于直接使用Rest API的单并发导入，该工具支持多并发导入功能，降低了导入大量数据的耗时。Streamloader工具支持以下功能：
- 并发导入：实现了Stream Load的多并发导入，可以通过**workers**参数设置导入并发数。
- 多文件导入：一次导入操作可以同时导入多个文件及目录，支持设置通配符，并且会自动递归获取文件夹下的所有文件。
- 断点续传：在导入过程中可能出现部分失败的情况，支持根据日志提示的命令，手动重新执行对应的命令在失败点处继续进行传输。
- 自动重传：在导入任务出现失败的情况后，无需手动重传，Streamloader工具会自动重传默认的次数，如果仍然不成功，则打印出手动重传的命令。
![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
- 该章节仅适用于MRS 3.6.0-LTS及之后版本。
- 仅支持导入本地文件系统的文件，不支持导入远端文件系统中的文件（例如HDFS）。
- 仅支持导入Text格式的文件，不支持导入RCFile、ORC、Parquet、JSON等格式的文件。
- 待导入的文件名只能包含数字、下划线、英文字母，不能包含特殊字符。
 
#### 前提条件
- 已创建包含Doris服务的集群，集群内各服务运行正常。
- 创建具有Doris管理员权限的用户。 在FusionInsight Manager中创建一个人机用户，例如"dorisuser"，创建一个拥有"Doris管理员权限"的角色绑定给该用户。用户创建后，需使用新建的用户**dorisuser**重新登录FusionInsight Manager，修改该用户初始密码。
  
 
#### 使用Streamloader工具导入本地数据至Doris
1. 登录FusionInsight Manager页面，选择"集群 \> 服务 \> Doris \> 实例"，查看并记录任一Doris实例的业务IP地址。
2. 以**root** 用户登录主OMS节点，执行以下命令获取集群安装目录：
   
   **su - omm**
   **echo ${BIGDATA_HOME}**
   例如，集群安装目录为：
   ```
   /opt/Bigdata
   ```
   
   
3. 使用**root** 或**omm** 用户登录[1]查看的节点，执行以下命令切换至Doris客户端所在目录：
   
   **cd** *集群安装目录* **/FusionInsight_Doris_\*/install/FusionInsight-Doris-3.1.4/doris-be/streamloader**
   
   
4. 执行以下命令导入文件数据： 
   - 导入多个文件： **./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导入多个文件数据成功   
     ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002187390853.png "点击放大") 
   
   - 导入多个目录下的文件： **./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* **'**
     
   
   
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
   - 集群已启用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]。
    
   
   
 
#### 参数说明
 表1Streamloader导入参数说明 
| 参数                      | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                              | 默认值              | 配置建议                                                                                                                                                                                                                                                              |
|:---|:---|:---|:---|
| --source_file           | 待导入的源数据，可以是目录，也可以是文件，多个文件或目录以英文逗号分隔。                                                                                                                                                                                                                                                                                                                                                                                                                              | -                | -                                                                                                                                                                                                                                                                 |
| --url                   | 待请求HTTP服务的IP和端口。                                                                                                                                                                                                                                                                                                                                                                                                                                                  | -                | -                                                                                                                                                                                                                                                                 |
| --header                | HTTP请求的**header**参数。                                                                                                                                                                                                                                                                                                                                                                                                                                              | -                | 详细介绍请参见[表1](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_249191.html#mrs_01_249191__table15462358113219)。                                                                                                                                            |
| --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            | 是否对导入数据的编码进行检查： - false：不做编码检查直接将原始数据导入。  - true：对数据中非UTF-8编码的字符用�进行替代。   | 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"**                                                                                                                    |
   
