2017-12-15 5 views
1

したがって、hdfsの/ var/log/...には、圧縮されていないか、スナッピーで圧縮されたログファイルがたくさんあります。Hadoop HDFSは適切な場所に圧縮します

.snappyで終了しない場合は、それらを圧縮して、末尾に名前を付けたいと思います。しかし、私はこれをデータの局所性で行いたいと思っています。

私はハープ・ストリーミング・アプローチを試みました。

HAD=/usr/lib/hadoop 
$HAD/bin/hadoop jar $HAD/hadoop-streaming.jar \ 
-D mapred.output.compress=true \ 
-D madred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec \ 
-D mapred.reduce.tasks=0 \ 
-input /var/log/… -output /user/hadoop/working \ 
-mapper org.apache.hadoop.mapred.lib.IdentityMapper 

しかし、それは部分ファイルの束を与え、行ごとにやっているようです。それはまた何らかの理由で収縮を選択しています。だから私はpart-00000.deflate等のようなファイルを取得します。入力はapp_123456789_0123_1のようでした。私はapp_123456789_0123_1.snappyが好きだったでしょうが、その部分は完全なファイルにもマップされていませんでした。また、すばらしいコーデックでもありませんでした。

FAQ saysファイル名の入力ファイルを生成し、各名前でタスクを実行することができます。しかし、単純なスナップ圧縮ツールはありません。もうひとつの選択肢は、それがさらに良くなるように見える(私は瓶を作る必要はないが、私はできると思うが)名前は保存されないと言っている。それは私には役に立たないと思う。

ファイルをHDFSから取得したり、ローカルで作業したり、戻したりすることを含まない方法がありますか?そして、それはファイル名を扱いますか?

答えて

1

ログファイルが継続的に生成されるため、Hadoopストリーミングを使用して読み取るのは意味がありません。これは一度の操作であり、再度実行すると読み取られたファイルは保持されないためです。

また、ファイルがapplication_1234であれば、Hadoop設定でYARNログ圧縮を有効にすることができます.YARNログのHDFSへのアップロードを処理します。

これらのログを継続的に圧縮してHDFSにアップロードしたい場合は、少なくとも主要なHadoopディストリビューションに含まれているFlumeの使用を検討する必要があります。

他のソフトウェアのインストールに慣れている場合は、FluentdまたはFilebeatでログを収集してから、適切な圧縮形式で適切なファイルサイズでHDFSに転送するNiFiを調べます。カフカはログコレクタとNiFiの間でも使用できます。これらのオプションを使用すると、ファイル名の管理が容易になり、SolrやElasticsearchのような適切な検索プラットフォームにログを送ることができます。

+0

これらはスパークログであり、Sparkアプリはログファイルの名前を '.inprogress'完了したら最終的な名前に変更します。私は、圧縮されていない完成したアプリケーションを圧縮することのみを検討していました。ここには複数のユーザーがおり、開発中にログを読みにくくするため、圧縮しない場所で独自のspark configを使用しているユーザーもいます。それから、彼らはそれをそのままにしておきます。私はFlumeを見てみましょう。 – dlamblin

関連する問題