Скачайте тарбол из HDFS и распакуйте на лету - PullRequest
0 голосов
/ 25 апреля 2018

Я храню большой набор данных в виде (несжатого) архива внутри HDFS.Размер тарбола составляет примерно 250 гигабайт.

Я хотел бы загрузить этот тарбол и распаковать его на лету, чтобы сэкономить на быстром SSD моей машины.Я хотел бы избежать того, чтобы сначала захватить его с помощью hadoop fs -get ..., а затем распаковать его локально.

В настоящее время я использую hadoop fs -cat, чтобы захватить его и передать в tar, используя pv для индикатора выполнения:

hadoop fs -cat my_big_tar.tar | pv -s "$TAR_SIZE" | tar xf -

Однако, когда я делаю это, я получаю несколько (не фатальных) ошибок при распаковке, и окончательный вывод заканчивается нормально, но пропускает некоторые данные (несколько десятков ГиБ).Ошибки выглядят так:

Grabbing data from hadoop and untaring on the fly...                                                                     
tar: Skipping to next header============================================================>               ] 81% ETA 0:05:40
tar: Archive contains ‘\201\021\260e\210\333\357J\201\200\av’ where numeric off_t value expected        ] 81% ETA 0:05:37
tar: Archive contains ‘W\341\034\267\t\0ꑻ\317{\374’ where numeric off_t value expected                                   
tar: Archive contains ‘s{AZ\224\235 F.\317\342d’ where numeric off_t value expected======>              ] 82% ETA 0:05:10
tar: Archive contains ‘\264\357\036\272ud.W\235cL\204’ where numeric off_t value expected====>          ] 86% ETA 0:03:50
tar: Archive contains ‘\251\203\204\236\207\374\246"\255\240i\017’ where numeric off_t value expected                    
tar: Archive contains ‘T\242\b[(\372\357*e\032\255S’ where numeric off_t value expected======>          ] 87% ETA 0:03:46
tar: Archive contains ‘\300굕\277t\025o\207\373CK’ where numeric off_t value expected========>           ] 87% ETA 0:03:37
tar: Archive base-256 value is out of off_t range=============================================>         ] 88% ETA 0:03:26
tar: Archive contains ‘\204\274\234\366z\335<D\201-\306\361’ where numeric off_t value expected         ] 88% ETA 0:03:24
tar: Archive contains ‘\341ֶ\207\334-5\034\267C\v\017’ where numeric off_t value expected======>        ] 88% ETA 0:03:18
tar: Archive contains ‘c\3307\247\343ჯ\033瓸’ where numeric off_t value expected===============>         ] 89% ETA 0:03:11
tar: Archive contains ‘Vj+&!\242f$\212\374_\276’ where numeric off_t value expected=============>       ] 91% ETA 0:02:35
tar: Archive contains ‘\v5\374\273\375\302e\251ݝ\247O’ where numeric off_t value expected=======>       ] 91% ETA 0:02:33
tar: Archive contains ‘\027ȷJ\316j\203\025\027\033\264R’ where numeric off_t value expected=====>       ] 91% ETA 0:02:21
tar: Archive contains ‘Ks[L\325x\005\341\301’ where numeric off_t value expected================>       ] 92% ETA 0:02:19
tar: Archive contains obsolescent base-64 headers================================================>      ] 92% ETA 0:02:12
<snip>
tar: Archive contains ‘\177q\375\230Y<QE\0\367\242\207’ where numeric off_t value expected=============> ] 99% ETA 0:00:1
tar: Archive contains ‘\264e\260k\340,d\206\242^\022\032’ where numeric off_t value expected===========> ] 99% ETA 0:00:0
tar: Exiting with failure status due to previous errors================================================> ] 99% ETA 0:00:0
 260GB 0:28:54 [ 154MB/s] [============================================================================>] 100%   

Сначала копирование данных из Hadoop с использованием hadoop fs -get my_tar.tar, а затем снятие пометок работает нормально.

Вот мой hadoop version вывод:

Hadoop 2.7.2
Subversion Unknown -r Unknown
Compiled by <redacted> on 2016-04-21T22:04Z
Compiled with protoc 2.5.0
From source with checksum d0fda26633fa762bff87ec759ebe689c
This command was run using /opt/hadoop/hadoop-bin-2.7.2-1/share/hadoop/common/hadoop-common-2.7.2.jar  

Полный сценарий находится здесь: https://github.com/AndreiBarsan/dotfiles/blob/master/bin/get-hdfs-tar.sh

Что может быть причиной этих ошибок при использованииhadoop fs -cat?(Может быть, какой-то случайный выход из логирования hasoop смешивается с каналом, читаемым tar? Как я могу проверить это?)

...