Hadoop многострочные смешанные записи
Я хотел бы проанализировать файлы журнала, созданные fidonet mailer binkd, которые многострочные и намного хуже - смешанные: несколько экземпляров могут записывать в один файл журнала, например:
27 Dec 16:52:40 [2484] BEGIN, binkd/1.0a-545/Linux -iq /tmp/binkd.conf
+ 27 Dec 16:52:40 [2484] session with 123.45.78.9 (123.45.78.9)
- 27 Dec 16:52:41 [2484] SYS BBSName
- 27 Dec 16:52:41 [2484] ZYZ First LastName
- 27 Dec 16:52:41 [2484] LOC City, Country
- 27 Dec 16:52:41 [2484] NDL 115200,TCP,BINKP
- 27 Dec 16:52:41 [2484] TIME Thu, 27 Dec 2012 21:53:22 +0600
- 27 Dec 16:52:41 [2484] VER binkd/0.9.6a-173/Win32 binkp/1.1
+ 27 Dec 16:52:43 [2484] addr: 2:1234/56.78@fidonet
- 27 Dec 16:52:43 [2484] OPT NDA CRYPT
+ 27 Dec 16:52:43 [2484] Remote supports asymmetric ND mode
+ 27 Dec 16:52:43 [2484] Remote requests CRYPT mode
- 27 Dec 16:52:43 [2484] TRF 0 0
*+ 27 Dec 16:52:43 [1520] done (from 2:456/78@fidonet, OK, S/R: 0/0 (0/0 bytes))*
+ 27 Dec 16:52:43 [2484] Remote has 0b of mail and 0b of files for us
+ 27 Dec 16:52:43 [2484] pwd protected session (MD5)
- 27 Dec 16:52:43 [2484] session in CRYPT mode
+ 27 Dec 16:52:43 [2484] done (from 2:1234/56.78@fidonet, OK, S/R: 0/0 (0/0 bytes))
Таким образом, файл журнала является не только многострочным с непредсказуемым количеством строк в сеансе, но также может быть смешано несколько записей между ними, как сеанс 1520 завершился в середине сеанса 2484. Каково было бы правильное направление в hasoop для анализа такого файл? Или я просто разбираю построчно, а потом как-то объединяю их в записи, а потом записываю эти записи в базу данных SQL, используя другой набор заданий?
Благодарю.
2 ответа
Правильным направлением для Hadoop будет разработка собственного формата ввода, который читатель записи будет читать строку за строкой и создавать логические записи.
Можно констатировать - что вы на самом деле можете сделать это и в маппере - это может быть немного проще. Недостатком будет то, что это не стандартная упаковка такого кода для hadoop и, следовательно, он менее пригоден для повторного использования.
На мой взгляд, другое направление, которое вы упомянули, не является "естественным" для hadoop. Конкретно - зачем использовать всю сложную (и дорогую) технику тасования, чтобы соединить несколько линий, которые уже в руках.
Прежде всего, разбор файла - это не то, что вы пытаетесь сделать; Вы пытаетесь извлечь некоторую информацию из ваших данных.
В вашем случае вы можете рассмотреть многошаговое задание MR, при котором первое задание MR по существу (частично) будет сортировать ваши входные данные по session_id (выполнить некоторую фильтрацию? Некоторая агрегация? Несколько редукторов?), А затем редуктор или следующее задание MR выполнит фактический расчет.
Без объяснения того, что вы пытаетесь извлечь из ваших файлов журнала, трудно дать более точный ответ.
Кроме того, если ваши данные невелики, может быть, вы можете обработать их вообще без машин МР?