11

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

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

別の Hadoop プログラムを作成したり、Hive などを介して渡したりすることなく、これらのファイルを読み取るにはどうすればよいでしょうか?

4

4 に答える 4

26

最終的に、次のコマンドを使用して HDFS 上の Snappy 圧縮ファイルの内容を読み取ることができることがわかりました。

hadoop fs -text /path/filename

Cloudera または HDP で最新のコマンドを使用する:

hdfs dfs -text /path/filename

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

于 2014-11-26T23:08:18.243 に答える
3

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

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

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

于 2013-05-21T18:34:02.430 に答える