Laadi HDFS-ist alla suuri faile
Sain HDFS kliendist suure faili (umbes 2GB) DataInputStreami ja pean selle oma hostis failina salvestama.
Mõtlen kasutada Apache Common IOUtils'e ja teha midagi sellist......
Olen otsinud teisi lahendusi, mis oleksid sellest paremad. Peamine mure on puhverdamise kasutamine sisendis ja IOUtils.copy.
Failide puhul, mis on suuremad kui 2GB, soovitatakse kasutada IOUtils.copyLarge() (kui räägime samadest IOUtils'idest: org.apache.commons.io.IOUtils)
IOUtils'i replika kasutab vaikimisi puhvri suurust 4Kb (kuigi parameetrina saab määrata teise puhvri suuruse).
Erinevus copy() ja copyLarge() vahel seisneb selles, et tulemus tagastatakse.
Kuna copy(), kui voog on suurem kui 2GB, kasutad koopiat edukalt, kuid tulemus on -1.
copyLarge() puhul on tulemus täielikult kopeeritud baitide arv.
Vaata rohkem dokumentatsioonist siit:
Hüperlingi sisselogimine on nähtav.
Kuidas kontrollida, kas fail on täielikult alla laaditud Spring Rest API kaudu
Lõin lihtsa REST API, et serveerida faile HDFS-ist (failid on suured ja ma ei taha neid kohapeal kopeerida).
Ma tahan logida infot, et faili allalaadimine õnnestus, st lugeda kogu voogu, aga ma ei tea kuidas. Ma saan salvestada ainult selle info, mille faili allalaadimine algas.
Igasugune abi oleks väga teretulnud.
Võid proovida luua InputStreamile wrapperi ja käivitada mõned lipud voogu close(close()).
Näiteks võid kasutada ProxyInputStreami aluseks:
|