1

fidonet メーラー binkd によって生成されたログファイルを解析したいと思います。これは複数行であり、さらに悪い - 混合: 複数のインスタンスが 1 つのログファイルに書き込むことができます。たとえば、次のようになります。

      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 の途中で終了したように、複数のレコードが混在する可能性もあります。ファイル?それとも、行ごとに解析し、後で何らかの方法でそれらをレコードにマージし、後で別の一連のジョブを使用してそれらのレコードを SQL データベースに書き込む必要がありますか?

ありがとう。

4

2 に答える 2

1

Hadoop の正しい方向性は、レコード リーダーが入力を 1 行ずつ読み取り、論理レコードを生成する独自の入力形式を開発することです。
言うことができます-実際にはマッパーでも実行できます-少し簡単かもしれません。欠点は、Hadoop 用のそのようなコードの標準パッケージではないため、再利用性が低いことです。

あなたが言及した他の方向性は、私の見解では、hadoop にとって「自然」ではありません。具体的には、複雑な(そして高価な)シャッフルのすべての機械を使用して、すでに手にしているいくつかの行を結合する理由.

于 2012-12-30T08:36:39.533 に答える
0

まず第一に、ファイルの解析はあなたがしようとしていることではありません。データから何らかの情報を抽出しようとしています。

あなたの場合、最初のMRジョブが基本的に(部分的に)session_idで入力をソートし(フィルタリングを行いますか?集約を行いますか?複数のレデューサー?)、レデューサーまたは次のMRジョブが実際の計算を行うマルチステップMRジョブを検討できます。

ログファイルから何を抽出しようとしているのかについての説明がなければ、より明確な答えを出すことは困難です.

また、データが小さい場合は、MR 機械をまったく使用せずに処理できるのでしょうか?

于 2012-12-29T02:56:59.380 に答える