Фон: Моя программа была разработана в автономной среде с использованием C ++, и теперь мне нужно развернуть ее на Hadoop, поэтому я выбираю технологию потоковой передачи Hadoop (также и Hadoop pipe). Входные данные представляют собой несколько очень больших двоичных потоковых файлов, которые захватываются Wireshark (пакет, формат pcap), мне нужно сделать анализ потока. Если я открываю один из файлов в шестнадцатеричном формате, это выглядит так:
D4 C3 B2 A1 02 00 04 00 00 00 00 00 00 00 00 00
FF FF 00 00 01 00 00 00 E9 EA 9F 4F A9 1C 07 00
59 00 00 00 59 00 00 00 94 0C 6D 7A AD 3A 00 0C
29 F5 60 C8 08 00 45 00 00 4B FA BB 00 00 80 11
A9 61 C0 A8 30 69 77 93 2D E0 0F A0 1F 40 00 37
0C 70 02 21 07 00 58 28 98 22 5C B0 03 02 00 00
00 01 01 01 00 00 64 86 2B A2 02 8A 1A 68 EA 92
Проблема: На hadoop форматом входных файлов по умолчанию является TextInputFormat, но мне нужно обрабатывать двоичные файлы. Как я знаю, Hadoop также может обрабатывать двоичные файлы с помощью SequenceFileInputFormat, но я не знаю, что такое пара «ключ, значение» в настоящее время? У меня есть другая идея: нет входных файлов на Hadoop Streaming, но загружать локальные двоичные потоковые файлы в качестве входных данных (используя опцию -files), а затем с помощью fopen («потоковый файл») в программе Mapper, чтобы открыть каждый из потоковых файлов для обработки. Если это так, нет необходимости полностью менять мою автономную программу, но мой вопрос: каждый ли подчиненный узел все еще полезно? будет ли главный узел назначать такую задачу каждому подчиненному узлу равномерно (будет ли процесс назначен каждому подчиненному узлу для его обработки?), похоже, что это не Hadoop. Есть ли еще лучшая идея? Заранее спасибо.
Задача ещё не решена.