Ich muss große Dateien (mindestens 14MB) von der Cosmos-Instanz des FIWARE Labs zu meinem Backend übertragen.Wie kann ich Teile von Dateien mit Hadoop WebHDFS lesen und übertragen?
verwenden ich die Feder RestTemplate als Client-Schnittstelle für die Hadoop WebHDFS REST API beschrieben here aber ich laufe in eine IO Ausnahme:
Exception in thread "main" org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://cosmos.lab.fiware.org:14000/webhdfs/v1/user/<user.name>/<path>?op=open&user.name=<user.name>":Truncated chunk (expected size: 14744230; actual size: 11285103); nested exception is org.apache.http.TruncatedChunkException: Truncated chunk (expected size: 14744230; actual size: 11285103)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:580)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:545)
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:466)
Dies ist der eigentliche Code, der die Ausnahme erzeugt:
RestTemplate restTemplate = new RestTemplate();
restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
restTemplate.getMessageConverters().add(new ByteArrayHttpMessageConverter());
HttpEntity<?> entity = new HttpEntity<>(headers);
UriComponentsBuilder builder =
UriComponentsBuilder.fromHttpUrl(hdfs_path)
.queryParam("op", "OPEN")
.queryParam("user.name", user_name);
ResponseEntity<byte[]> response =
restTemplate
.exchange(builder.build().encode().toUri(), HttpMethod.GET, entity, byte[].class);
FileOutputStream output = new FileOutputStream(new File(local_path));
IOUtils.write(response.getBody(), output);
output.close();
Ich denke, das liegt an einem Übertragungs-Timeout auf der Cosmos-Instanz, so versuchte ich senden Sie eine curl
auf dem Pfad durch Angabe offset, buffer and length
Parameter, aber sie scheinen zu sein ignoriert: Ich habe die ganze Datei bekommen.
Vielen Dank im Voraus.
Vielleicht werfen Sie einen Blick auf py webhdfs gibt Ihnen einige Hinweise -> https://github.com/pywebhdfs/pywebhdfs/blob/master/pywebhdfs/webhdfs.py#L48 – ravwojdyla
Danke, aber es hilft nicht. Das Problem ist, dass der optionale length-Parameter der OPEN-Operation (siehe 'def read_file (self, path, ** kwargs) 'in Ihrem Link) vom Server vollständig ignoriert wird –