3

ログを S3 に保存し、(Pig) クエリの 1 つが 3 つの異なるログ タイプを取得します。各ログ タイプは、タイプ/日付に基づく一連のサブディレクトリにあります。例えば:

/logs/<type>/<year>/<month>/<day>/<hour>/lots_of_logs_for_this_hour_and_type.log*

私のクエリは、一定時間、3 種類のログすべてをロードする必要があります。例えば:

type1 = load 's3:/logs/type1/2011/03/08' as ...
type2 = load 's3:/logs/type2/2011/03/08' as ...
type3 = load 's3:/logs/type3/2011/03/08' as ...
result = join type1 ..., type2, etc...

私のクエリは、これらすべてのログに対して実行されます。

これを処理する最も効率的な方法は何ですか?

  1. bash スクリプト拡張を使用する必要がありますか? これが複数のディレクトリで機能するかどうかはわかりません。ロードするログが 10k ある場合、効率的 (または可能) であるとは思えません。
  2. すべてのログを集約して hdfs に直接プッシュするサービスを作成しますか?
  3. カスタム Java/Python インポーター?
  4. 他の考え?

必要に応じてサンプルコードも残していただけると助かります。

ありがとう

4

3 に答える 3

5

グロブはPigStorageでデフォルトでサポートされているため、次のことを試すことができます。

type1 = load 's3:/logs/type{1,2,3}/2011/03/08' as ..

あるいは

type1 = load 's3:/logs/*/2011/03/08' as ..

于 2011-03-14T18:18:11.627 に答える
0

私のように Hive を使用していて、データがパーティション分割されている場合、フィルタリングするディレクトリ構造が次のようになっている限り、パーティション分割をサポートするPiggyBank のローダー (例: AllLoader ) を使用できます。

.../type=value1/...
.../type=value2/...
.../type=value3/...

その後、ファイルをロードしてから、FILTER BY type = 'value1' を実行できるはずです。

例:

REGISTER piggybank.jar;
I = LOAD '/hive/warehouse/mytable' using AllLoader() AS ( a:int, b:int );
F = FILTER I BY type = 1 OR type = 2;
于 2012-08-02T10:30:47.273 に答える
0

私はあなたのような類似のログシステムを持っていましたが、唯一の違いは、実際にログを日付ではなくタイプで分析するため、次を使用することです。

type1 = load 's3:/logs/type1/2011/03/' as ...

type1 の月のログを分析し、type2 と混合しないでください。タイプではなく日付で分析しているため、構造を次のように変更することをお勧めします。

/logs/<year>/<month>/<day>/<hour>/<type>/lots_of_logs_for_this_hour_and_type.log*

そのため、日次 (または月次) のデータを読み込んでから、タイプ別にフィルタリングすると便利です。

于 2011-03-13T13:06:57.790 に答える