2

私はPIGとHDFSを初めて使用します。これが私がやろうとしていることです。

フラットテキストのLZO圧縮された不適切な形式のサーバーログファイルがたくさんあります。それぞれ約2GBが、毎日約400台のサーバーから生成されます。

マップリデュースを利用して、Javaフォーマッターを使用してHDFSでデータをフォーマットおよびクリーンアップしてから、出力をHiveにロードしようとしています。

私の問題は、私のPIGスクリプトが約15分かかるマッパーを1つだけ生成することです。ファイルを順番に読み取ります。これは、ハイブに毎日ロードする必要のあるデータ量には実用的ではありません。

これが私の豚のスクリプトです。

SET default_parallel 100;
SET output.compression.enabled true;
SET output.compression.codec com.hadoop.compression.lzo.LzopCodec
SET mapred.min.split.size 256000;
SET mapred.max.split.size 256000;
SET pig.noSplitCombination true; 
SET mapred.max.jobs.per.node 1;

register file:/apps/pig/pacudf.jar
raw1 = LOAD '/data/serverx/20120710/serverx_20120710.lzo' USING PigStorage() as (field1);
pac = foreach raw1 generate pacudf.filegenerator(field1);
store pac into '/data/bazooka/';

mapred.min.split.size設定が機能していないようです。クラスターの単一サーバー上の2GBファイル全体で機能するマッパーが1つだけ開始されていることがわかります。100ノードのクラスターがあるので、より多くのマッパーを生成できれば、より多くのサーバーを並行して使用できるかどうか疑問に思いました。

前もって感謝します

4

1 に答える 1

1

PigStorageでの圧縮サポートは、分割機能を提供しません。pigで分割可能なlzo圧縮をサポートするには、twitterのelephant-birdライブラリが必要です。また、既存の通常のlzoファイルで(適切に?)分割作業を行うには、pigスクリプトをロードする前にそれらにインデックスを付ける必要があります。

于 2012-09-21T04:58:53.473 に答える