Download store filer fra HDFS
Jeg har fået en stor fil (ca. 2GB) DataInputStream fra HDFS-klienten, og jeg skal gemme den som en fil på min host.
Jeg overvejer at bruge Apache Common IOUtils og lave noget i denne stil......
Jeg har ledt efter andre løsninger, der er bedre end denne. Hovedbekymringen er brugen af buffering i input og IOUtils.copy.
For filer større end 2GB anbefales det at bruge IOUtils.copyLarge() (hvis vi taler om de samme IOUtils: org.apache.commons.io.IOUtils)
Replikaen i IOUtils bruger standardbufferstørrelsen på 4Kb (selvom du kan angive en anden bufferstørrelse som parameter).
Forskellen mellem copy() og copyLarge() er, at den returnerer resultatet.
Fordi copy(), hvis streamen er større end 2GB, vil du bruge kopien med succes, men resultatet er -1.
For copyLarge() er resultatet antallet af bytes, der er fuldt kopieret.
Se mere i dokumentationen her:
Hyperlink-login er synlig.
Hvordan man tjekker, om en fil er fuldt downloadet via Spring Rest API'en
Jeg har lavet et simpelt REST API til at levere filer fra hdfs (filerne er store, og jeg vil ikke kopiere dem lokalt).
Jeg vil gerne logge den information, som fildownloadet gennemførte med succes, altså læse hele streamen, men jeg ved ikke hvordan. Jeg kan kun registrere den information, hvor fil-downloaden startede.
Enhver hjælp vil blive meget værdsat.
Du kan prøve at oprette en wrapper på InputStreamen og udløse nogle flag på streamen close(close()).
For eksempel kan du bruge ProxyInputStream som grundlag:
|