4

大量のサービスを提供しています。イベントをログに記録します。数分ごとに、gzipを使用してログを圧縮し、S3にローテーションします。そこから、AmazonのHadoop(elastic mapreduce)を使用してHive経由でログを処理します。

現在、サーバーでは、ログを圧縮してローテーションすると、数分ごとにCPUスパイクが発生します。このCPUスパイクを減らすために、gzipからlzoまたはsnappyに切り替えたいと考えています。私たちはCPUにバインドされたサービスであるため、ローテーション時に消費されるCPUを減らすために、より大きなログファイルを交換する用意があります。

私はLZOとSnappy(別名zippy)についてたくさん読んでいます。LZOの利点の1つは、HDFSで分割できることです。ただし、ファイルはGzipで最大15 MB圧縮されているため、HDFSで最大64 MBのデフォルトのブロックサイズになるとは思わないので、これは問題ではありません。たとえそうだったとしても、デフォルトを128MBまで上げることができるはずです。

今のところ、少し速く/リソースをあまり消費しないように見えるので、スナッピーを試してみたいと思います。どちらもAmazonのyumリポジトリに含まれていないようです。そのため、とにかくカスタムインストール/ビルドする必要があります。エンジニアリング時間のトレードオフはそれほど多くありません。LZOライセンスについていくつかの懸念を聞いたことがありますが、コードに近づかない場合は、サーバーにインストールするだけだと思います。

だから、私はどちらを選ぶべきですか?Hadoopでは一方が他方よりもパフォーマンスが向上しますか?誰かがどちらかの実装でこれを行い、共有できる問題がありますか?

4

1 に答える 1

2

手遅れかもしれませんが、Python-snappyは、snappy 圧縮/解凍用のコマンドライン ツールを提供します。

ファイルの圧縮と解凍:

$ python -m snappy -c uncompressed_file compressed_file.snappy

$ python -m snappy -d compressed_file.snappy uncompressed_file

ストリームの圧縮と解凍:

$ cat uncompressed_data | python -m snappy -c > compressed_data.snappy

$ cat compressed_data.snappy | python -m snappy -d > uncompressed_data

また、Snappy は常に lzo よりも 20% 以上高速に解凍します。これは、hadoop を介して頻繁に読み取るファイルに対して必要な場合には、かなり大きなメリットです。最後に、これは Google によって BigTable や MapReduce などに使用されています。これは、少なくとも私にとって非常に重要な支持です。

于 2013-03-28T22:49:12.380 に答える