searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

数据源-Doris(二):Stream Load数据导入

2023-07-26 03:07:00
23
0

Stream Load

Stream load 是一个同步的导入方式,用户通过发送 HTTP 协议发送请求将本地文件或数据流导入到 Doris 中。Stream load 同步执行导入并返回导入结果。用户可直接通过请求的返回体判断本次导入是否成功。

支持数据格式

Doris Stream Load支持csv,json两种格式的文件进行数据导入,在1.2.0之后的版本开始支持PARQUET 和 ORC。

基本原理

Doris的提供的Stream Load的HTTP API是在FE(Front End)上实现的,但是FE的工作只是做一些基本的校验,然后重新拼接一个到BE(back end)的URL,去做一个重定向。BE在接到tream load 请求之后,Doris 会选定一个节点作为 Coordinator 节点。该节点负责接数据并分发数据到其他数据节点。

所以如果用户在通过FE的HTTP API去执行Stream Load的时候,需要注意重定向问题,如apache的httpclient默认的调用是无重定向策略,需要手动设置,而且httpclient在4.5.13.之前的版本做重定向请求的时候,会有bug,导致请求是吧,如果需要通过apache的httpclient去做Stream Load的话需要把版本升级至4.5.13.+。

当然用户也可以通过调用BE的HTTP API去做Stream Load,这样也能避免重定向问题。

 

HTTP API

FE -Stream Load HTTP API:

curl --location-trusted -u user:passwd [-H ""...] -T data.file -XPUT http://fe_host:http_port/api/{db}/{table}/_stream_load

# Header 中支持属性见下面的 ‘导入任务参数’ 说明
# 格式为: -H "key1:value1"


签名参数

  • user/passwd

    Stream load 由于创建导入的协议使用的是 HTTP 协议,通过 Basic access authentication 进行签名。Doris 系统会根据签名验证用户身份和导入权限。

导入任务参数

Stream Load 由于使用的是 HTTP 协议,所以所有导入任务有关的参数均设置在 Header 中。下面主要介绍了 Stream Load 导入任务参数的部分参数意义。

  • label

    导入任务的标识。每个导入任务,都有一个在单 database 内部唯一的 label。label 是用户在导入命令中自定义的名称。通过这个 label,用户可以查看对应导入任务的执行情况。

    label 的另一个作用,是防止用户重复导入相同的数据。强烈推荐用户同一批次数据使用相同的 label。这样同一批次数据的重复请求只会被接受一次,保证了 At-Most-Once

    当 label 对应的导入作业状态为 CANCELLED 时,该 label 可以再次被使用。

  • column_separator

    用于指定导入文件中的列分隔符,默认为\t。如果是不可见字符,则需要加\x作为前缀,使用十六进制来表示分隔符。

    如hive文件的分隔符\x01,需要指定为-H "column_separator:\x01"。

    可以使用多个字符的组合作为列分隔符。

  • line_delimiter

    用于指定导入文件中的换行符,默认为\n。

    可以使用做多个字符的组合作为换行符。

  • format

    指定导入数据格式,支持csv、json,默认是csv

    (以上参数源于官方文档:https://doris.apache.org/zh-CN/docs/dev/data-operate/import/import-way/stream-load-manual,由于参数较多且Doris仍在迭代中,更多参数详情请以官方文档为主)

查看 Stream Load

用户可以通过 show stream load 来查看已经完成的 stream load 任务。

默认 BE 是不记录 Stream Load 的记录,如果你要查看需要在 BE 上启用记录,配置参数是:enable_stream_load_record=true ,具体怎么配置请参照官方文档,本文不再赘述。

如果有Stream Load的Label的话,可以通过SHOW LOAD WHERE LABEL = “xxx”来获取Load任务执行情况。

Stream Load 优点

Stream load 的原理是由 BE 发起的导入并分发数据,建议的导入数据量在 1G 到 10G 之间。由于默认的最大 Stream load 导入数据量为 10G,所以如果要导入超过 10G 的文件需要修改 BE 的配置 streaming_load_max_mb

相比使用insert 语句和stream load通过文件的形式实现了导入,不需要去构建相对复杂的说sql语句,同时基于http协议的数据传输也比Doris实现的mysql协议要更高效一点,而且也省去了FE在执行insert语句时,对语句分析的时间和性能消耗。

但是在几十G以上的数据量时,建议还是使用Broker Load等方式,通过使用hdfs、S3等Doris支持的第三方数据源去做文件传输载体,以实现更高效的大数据同步功能。

0条评论
0 / 1000
chenzh25
4文章数
0粉丝数
chenzh25
4 文章 | 0 粉丝
原创

数据源-Doris(二):Stream Load数据导入

2023-07-26 03:07:00
23
0

Stream Load

Stream load 是一个同步的导入方式,用户通过发送 HTTP 协议发送请求将本地文件或数据流导入到 Doris 中。Stream load 同步执行导入并返回导入结果。用户可直接通过请求的返回体判断本次导入是否成功。

支持数据格式

Doris Stream Load支持csv,json两种格式的文件进行数据导入,在1.2.0之后的版本开始支持PARQUET 和 ORC。

基本原理

Doris的提供的Stream Load的HTTP API是在FE(Front End)上实现的,但是FE的工作只是做一些基本的校验,然后重新拼接一个到BE(back end)的URL,去做一个重定向。BE在接到tream load 请求之后,Doris 会选定一个节点作为 Coordinator 节点。该节点负责接数据并分发数据到其他数据节点。

所以如果用户在通过FE的HTTP API去执行Stream Load的时候,需要注意重定向问题,如apache的httpclient默认的调用是无重定向策略,需要手动设置,而且httpclient在4.5.13.之前的版本做重定向请求的时候,会有bug,导致请求是吧,如果需要通过apache的httpclient去做Stream Load的话需要把版本升级至4.5.13.+。

当然用户也可以通过调用BE的HTTP API去做Stream Load,这样也能避免重定向问题。

 

HTTP API

FE -Stream Load HTTP API:

curl --location-trusted -u user:passwd [-H ""...] -T data.file -XPUT http://fe_host:http_port/api/{db}/{table}/_stream_load

# Header 中支持属性见下面的 ‘导入任务参数’ 说明
# 格式为: -H "key1:value1"


签名参数

  • user/passwd

    Stream load 由于创建导入的协议使用的是 HTTP 协议,通过 Basic access authentication 进行签名。Doris 系统会根据签名验证用户身份和导入权限。

导入任务参数

Stream Load 由于使用的是 HTTP 协议,所以所有导入任务有关的参数均设置在 Header 中。下面主要介绍了 Stream Load 导入任务参数的部分参数意义。

  • label

    导入任务的标识。每个导入任务,都有一个在单 database 内部唯一的 label。label 是用户在导入命令中自定义的名称。通过这个 label,用户可以查看对应导入任务的执行情况。

    label 的另一个作用,是防止用户重复导入相同的数据。强烈推荐用户同一批次数据使用相同的 label。这样同一批次数据的重复请求只会被接受一次,保证了 At-Most-Once

    当 label 对应的导入作业状态为 CANCELLED 时,该 label 可以再次被使用。

  • column_separator

    用于指定导入文件中的列分隔符,默认为\t。如果是不可见字符,则需要加\x作为前缀,使用十六进制来表示分隔符。

    如hive文件的分隔符\x01,需要指定为-H "column_separator:\x01"。

    可以使用多个字符的组合作为列分隔符。

  • line_delimiter

    用于指定导入文件中的换行符,默认为\n。

    可以使用做多个字符的组合作为换行符。

  • format

    指定导入数据格式,支持csv、json,默认是csv

    (以上参数源于官方文档:https://doris.apache.org/zh-CN/docs/dev/data-operate/import/import-way/stream-load-manual,由于参数较多且Doris仍在迭代中,更多参数详情请以官方文档为主)

查看 Stream Load

用户可以通过 show stream load 来查看已经完成的 stream load 任务。

默认 BE 是不记录 Stream Load 的记录,如果你要查看需要在 BE 上启用记录,配置参数是:enable_stream_load_record=true ,具体怎么配置请参照官方文档,本文不再赘述。

如果有Stream Load的Label的话,可以通过SHOW LOAD WHERE LABEL = “xxx”来获取Load任务执行情况。

Stream Load 优点

Stream load 的原理是由 BE 发起的导入并分发数据,建议的导入数据量在 1G 到 10G 之间。由于默认的最大 Stream load 导入数据量为 10G,所以如果要导入超过 10G 的文件需要修改 BE 的配置 streaming_load_max_mb

相比使用insert 语句和stream load通过文件的形式实现了导入,不需要去构建相对复杂的说sql语句,同时基于http协议的数据传输也比Doris实现的mysql协议要更高效一点,而且也省去了FE在执行insert语句时,对语句分析的时间和性能消耗。

但是在几十G以上的数据量时,建议还是使用Broker Load等方式,通过使用hdfs、S3等Doris支持的第三方数据源去做文件传输载体,以实现更高效的大数据同步功能。

文章来自个人专栏
数据集成-数据源
4 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0