webhdfs 使用 kerberos rest 模板创建 HttpServerErrorException: 500 Internal Server Error

webhdfs create using kerberos rest template HttpServerErrorException: 500 Internal Server Error

我正在尝试使用 webhdfs 在 hdfs 中创建一个文件。 Kerberos 用于集群的安全性,所以我使用 KerberosRestTemplate.

在我的控制器中有 2 个方法

  @RequestMapping("/showFileContent")
  public ResponseEntity<String> showContent() throws URISyntaxException {
    return new ResponseEntity<>(taxonService.getTaxonJSON(), HttpStatus.OK);
  }

  @RequestMapping("/createFile")
  public ResponseEntity<URI> createFile() throws URISyntaxException {
    return new ResponseEntity<>(taxonService.createFile(), HttpStatus.OK);
  }

在我的服务中class我有

  public String getTaxonJSON() throws URISyntaxException {
    URI uri = new URI(path + "?op=OPEN");
    String json = restTemplate.getForObject(uri, String.class);
    return json;
  }

  public URI createFile() throws URISyntaxException {
    URI uri = new URI(path + "?op=CREATE");
    return restTemplate.postForLocation(uri, String.class);
  }

我可以使用 /showFileContent 查看文件内容,但每次尝试 /createFile 时,我都会得到 Error running rest call; nested exception is org.springframework.web.client.HttpServerErrorException: 500 Internal Server Error。我在调用创建之前删除了文件。

错误原因是什么?

我设法写入文件,而不是创建文件。这足以满足我的需求,可能会对其他人有所帮助,所以我将 post 放在这里。

public boolean writeFile(File file) throws URISyntaxException {
    URI uri = new URI(path + "?op=CREATE" + "&overwrite=true&data=true");
    ResponseEntity e =kerberosRestTemplate.exchange(uri, HttpMethod.PUT, new HttpEntity<Resource>(new FileSystemResource(file)), Map.class);
    return e.getStatusCodeValue() == 201;
  }