Stiahnite veľké súbory z HDFS
Dostal som veľký súbor (asi 2GB) DataInputStream z HDFS klienta a potrebujem ho uložiť ako súbor na mojom hostiteľovi.
Premýšľam, že použijem Apache Common IOUtils a spravím niečo takéto......
Hľadal som iné riešenia, ktoré sú lepšie ako toto. Hlavnou obavou je použitie bufferovania vo vstupe a IOUtils.copy.
Pre súbory väčšie ako 2GB sa odporúča použiť IOUtils.copyLarge() (ak hovoríme o rovnakých IOUtils: org.apache.commons.io.IOUtils)
Replika v IOUtils používa predvolenú veľkosť bufferu 4Kb (hoci môžete špecifikovať inú veľkosť bufferu ako parameter).
Rozdiel medzi copy() a copyLarge() je v tom, že vracia výsledok.
Pretože copy(), ak je stream väčší ako 2GB, úspešne použijete kópiu, ale výsledok je -1.
Pre copyLarge() je výsledkom počet bajtov, ktoré sú úplne skopírované.
Viac v dokumentácii nájdete tu:
Prihlásenie na hypertextový odkaz je viditeľné.
Ako skontrolovať, či je súbor úplne stiahnutý cez Spring Rest API
Vytvoril som jednoduché REST API na servírovanie súborov z hdfs (súbory sú veľké a nechcem ich lokálne kopírovať).
Chcem zaznamenať informáciu, že stiahnutie súboru bolo úspešne dokončené, teda prečítať celý stream, ale neviem ako. Môžem zaznamenať len informáciu, že sťahovanie súboru začalo.
Akákoľvek pomoc by bola veľmi ocenená.
Môžeš skúsiť vytvoriť wrapper na InputStream a spustiť niektoré príznaky na streame close(close()).
Napríklad môžete použiť ProxyInputStream ako základ:
|