web-dev-qa-db-ja.com

Hadoopを使用せずにHDFSでSnappy圧縮ファイルを読み取るにはどうすればよいですか?

Snappy圧縮形式でHDFSにファイルを保存しています。ローカルのLinuxファイルシステムでこれらのファイルを調べて、それらを作成したHadoopプロセスが正しく実行されていることを確認できるようにしたいと思います。

それらをローカルにコピーし、Google標準ライブラリを使用して解凍しようとすると、ファイルにSnappy識別子がないことがわかります。 Snappy識別子を挿入してこれを回避しようとすると、チェックサムが台無しになります。

別のHadoopプログラムを作成したり、Hiveのようなものを通過させたりせずに、これらのファイルを読み取るにはどうすればよいですか?

10
Robert Rapplean

私はついに、次のコマンドを使用して、HDFS上のSnappy圧縮ファイルの内容を読み取ることができることを発見しました。

hadoop fs -text filename

追加の検査と処理のためにファイルをテキスト形式でダウンロードすることが目的の場合、そのコマンドの出力をローカルシステム上のファイルにパイプすることができます。また、headを使用して、ファイルの最初の数行を表示することもできます。

22
Robert Rapplean

Clouderaブログのこの投稿 をご覧ください。 SnappyをHadoopで使用する方法について説明します。基本的に、生のテキスト上のSnappyファイルは分割できないため、複数のホスト間で単一のファイルを読み取ることはできません。

解決策は、Snappyをコンテナー形式で使用することです。したがって、基本的には、圧縮をSnappyとして設定してHadoop SequenceFileを使用します。説明されているように この回答では 、プロパティmapred.output.compression.codecorg.Apache.hadoopに設定できます.io.compress.SnappyCodecを実行し、ジョブ出力形式をSequenceFileOutputFormatとして設定します。

そして、それを読むには、コーデック情報がファイルヘッダーに格納されているため、SequenceFile.Readerを使用するだけで済みます。

3
Charles Menguy

これは、hadoopで使用されるsnappyには、 https://code.google.com/p/snappy/ のようなライブラリでは理解できないメタデータがいくつかあるため、hadoopネイティブsnappyを使用してスナップを解除する必要があります。ダウンロードしたデータファイル。

0
Jyotirmoy Sundi