2012-12-29 46 views
1

我想解析由fidonet邮件binkd产生的日志文件,这是多和更糟糕 - 混合:几个实例可以写入日志文件一个,例如:Hadoop的多混合记录

 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/[email protected] 
    - 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/[email protected], 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/[email protected], OK, S/R: 0/0 (0/0 bytes)) 

所以日志文件不仅有多行,每行会有不可预知的行数,而且还有几条记录可以混在一起,就像会话1520已经在会话2484中间完成一样。 在hadoop中解析这样一个正确的方向是什么文件?或者我应该只是逐行解析,然后将它们以某种方式合并到记录中,然后使用另一组作业将这些记录写入SQL数据库?

谢谢。

回答

1

Hadoop的正确方向是开发你自己的输入格式,谁的记录读取器将 逐行读取输入并产生逻辑记录。
可以说 - 你实际上也可以在mapper中做到 - 它可能会更简单一些。缺点是它不是用于hadoop的这种代码的标准包装,因此它的可重用性较差。

你提到的其他方向在我看来对于hadoop来说并不“自然”。具体来说 - 为什么要使用所有复杂(并且昂贵)的洗牌机器将已经掌握的几条线连接在一起。

0

首先,解析文件不是你想要做的;您正试图从数据中提取一些信息。

对于您的情况,您可以考虑多步骤MR作业,其中第一个MR作业将根据session_id(部分筛选?某些聚合?多个缩减器?)对输入进行基本(部分)排序,然后减速器或下一个MR作业将执行实际计算。

没有解释你试图从你的日志文件中提取什么,很难给出更明确的答案。

此外,如果您的数据很小,也许您可​​以在没有MR机器的情况下处理它?