Apache Flink Rest-Client Jar-Upload无法正常工作

时间:2017-01-18 16:17:16

标签: apache-flink

我正在努力通过使用Flink rest-api(可能会找到here in the flink Github repository)在我们的CI / CD工作流程中自动部署新的Flink作业。

文档仅说明使用/jars/upload可以实现jar上传,但不能确定必须如何构建有效的休息请求(HeadersBody类型,哪个Authorization Methodflink/flink-runtime-web等等。

所以我看了一下Github上POST项目的Flink仪表板代码,并搜索了他们用来上传jar的the implementation和 - Yippie!它通过调用我试图使用的rest-api来实现(使用Content-Type作为方法)。在那之后,我试图找出使用Postman的正确方法,使用不同的Body标题和/jars/upload类型发送请求,但现在没有一个对我有用。

我本可以直接向flink项目提交票证,但找不到任何对票证系统的引用。

所以这里的基本问题是

  • 如何调用其余端点std::conditional成功上传文件?

3 个答案:

答案 0 :(得分:8)

那些更偏向命令行的人可以使用curl:

curl -X POST -H "Expect:" -F "jarfile=@path/to/flink-job.jar" http://hostname:8081/jars/upload

答案 1 :(得分:6)

我遇到了同样的问题,并通过在使用网络用户界面上传jar时查看Chrome中的网络请求来解决这个问题。

请求必须

  • 使用分段上传
  • 字段名称必须为jarfile
  • 多部分内容必须也包含文件Content-Type(否则您将从Flink获得500个抱怨缺少标题的内容)

这是一个使用执行上传的请求的python脚本

upload = requests.post(                                                                                               
    base_url + "/jars/upload",                                                                                        
    files={
        "jarfile": (
            os.path.basename(path), 
            open(path, "rb"), 
            "application/x-java-archive"
         )
    }
)       

答案 2 :(得分:0)

对于那些想要Java解决方案的人可以使用:

CloseableHttpClient client = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost("YOUR API URL");
        MultipartEntityBuilder builder = MultipartEntityBuilder.create();
        builder.addBinaryBody("jarfile", new File("jarr.jar"));
        HttpEntity multipart = builder.build();
        httpPost.setEntity(multipart);

        try{
            CloseableHttpResponse response = client.execute(httpPost);
            System.out.println(response);
            BufferedReader rd = new BufferedReader(new InputStreamReader(
                    response.getEntity().getContent()));

            String line = "";
            while ((line = rd.readLine()) != null) {
                System.out.println(line);
                }
        }
        catch (Exception e){
            e.printStackTrace();
        }