I would like to create a file to hdfs with webhdfs, I wrote the function below
public ResponseEntity createFile(MultipartFile f) throws URISyntaxException { URI uriPut = new URI( webhdfsBaseurl+ "/gateway/default/webhdfs/v1/__MY_PATH/"+f.getName()+ "?op=CREATE" + "&overwrite=true&data=true"); ResponseEntity e = restTemplate.exchange(uriPut, HttpMethod.PUT, new HttpEntity<Resource>(f.getResource()), Map.class); URI location = e.getHeaders().getLocation(); System.out.println(location.toString()); URI uriPutFnal = new URI( location+ "?op=CREATE" + "&overwrite=true&data=true"); ResponseEntity eFnal = restTemplate.exchange(uriPutFnal, HttpMethod.PUT, new HttpEntity<Resource>(f.getResource()), Map.class); URI uri = new URI(webhdfsBaseurl+ "/gateway/default/webhdfs/v1/_PATH_"+"?op=LISTSTATUS"); String test = restTemplate.getForObject(uri, String.class); System.out.println(test); return eFnal; }
In the last print I don’t see my file… Any idea ?
Advertisement
Answer
public ResponseEntity createFile(MultipartFile f) throws URISyntaxException, RestClientException, IOException { URI uriPut = new URI(webhdfsBaseurl + "/gateway/default/webhdfs/v1/dev/ep/flux_entrant/pg6/" + f.getOriginalFilename() + "?op=CREATE" + "&overwrite=true&data=true"); ResponseEntity e = restTemplate.exchange(uriPut, HttpMethod.PUT, null, Map.class); if (e.getStatusCode().is3xxRedirection()) { URI location = e.getHeaders().getLocation(); System.out.println(location.toString()); URI uriPutFnal = new URI(location + "?op=CREATE" + "&overwrite=true&data=true"); ResponseEntity eFnal = restTemplate.exchange(uriPutFnal, HttpMethod.PUT, new HttpEntity<Resource>(f.getResource()), Map.class); if (eFnal.getStatusCode().is2xxSuccessful()) { URI uri = new URI( webhdfsBaseurl + "/gateway/default/webhdfs/v1/dev/ep/flux_entrant/pg6" + "?op=LISTSTATUS"); String test = restTemplate.getForObject(uri, String.class); System.out.println(test); return eFnal; } } return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); }