数据导入 StreamLoad 重定向问题

Viewed 63

请求代码如下:

        OkHttpClient client = new OkHttpClient().newBuilder()
                .build();
        MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
        RequestBody body = RequestBody.create(jsonData, mediaType);
        Request request = new Request.Builder()
                .url("http://be_host:8030/api/dbname/tablename/_stream_load")
                .method("PUT", body)
                .addHeader("Expect", "100-continue")
                .addHeader("format", "json")
                .addHeader("strip_outer_array", "true")
                .addHeader("Authorization", "Basic xxxxxxxxxxx")
                .build();
        Response response = client.newCall(request).execute();

请求一直报错,百度发现 Okhttp 重定向的时候会移除 Authorization 请求头,请问改如何解决?

  1. 一定要重定向,客户端是不是把数据完整的提交了两次,一次给 be 一次给 fe?是不是有点浪费流量?
  2. 第一次响应的响应头如下

HTTP/1.1 307
Connection: close
Content-Language: zh-CN
Date: Thu, 12 Sep 2024 13:24:58 GMT
Location: http://root%40default_cluster:password@fe_host:8040/api/dbname/tablename/_stream_load?
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers

响应头的 Location 格式很怪,为什么是这种格式?代码如何处理重定向呢?

1 Answers

Stream Load 时,需要通过 HTTP 协议发起导入作业给 FE 节点,FE 会以轮询方式,重定向(redirect)请求给一个 BE 节点以达到负载均衡的效果。当然了,你也可以直接指定be
参考文档:https://doris.apache.org/zh-CN/docs/data-operate/import/stream-load-manual#%E5%9F%BA%E6%9C%AC%E5%8E%9F%E7%90%86
代码可以参考这个
https://github.com/apache/doris/blob/master/samples/stream_load/java/DorisStreamLoad.java