0

私の質問に興味を持ってくれてありがとう。始める前に、私はHadoopとHBaseを初めて使用することをお知らせします。これまでのところ、Hadoopは非常に興味深いものであり、今後さらに貢献したいと思います。

私は主にHBaseのパフォーマンスの向上に興味があります。そのために、WriterHBaseのメソッドを変更/io/hfile/Hfile.javaして、高速のバッファーデータアセンブリを実行し、Hadoopに直接書き込んで、後でHBaseでロードできるようにしました。

今、私は帯域幅を節約できるようにキーと値のペアを圧縮する方法を考え出そうとしています。私はその方法を理解するために多くの調査を行いました。そして、HBaseには圧縮ライブラリが組み込まれていることに気づきました。

私は現在SequenceFile (1)を見ています; setCompressMapOutput (2)(非推奨); およびクラス圧縮(3)。また、ApacheのMapReduceに関するチュートリアルも見つけました。

誰かが「SequenceFile」とは何か、そしてそれらの圧縮ライブラリとアルゴリズムをどのように実装できるかを説明してもらえますか?これらの異なるクラスとドキュメントは私にとってとても混乱しています。

よろしくお願いします。

-

ハイパーリンク:

(1):hadoop.apache.org/common/docs/current/api/org/apache/hadoop/io/SequenceFile.html

(2):hadoop.apache.org/common/docs/current/api/org/apache/hadoop/mapred/JobConf.html#setCompressMapOutput%28boolean%29

(3):www.apache.org/dist/hbase/docs/apidocs/org/apache/hadoop/hbase/io/hfile/Compression.html

4

2 に答える 2

4

SequenceFileHadoop に実装されているキーと値のペアのファイル形式です。SequenceFileは HBase で先行書き込みログを格納するために使用されますが、のSequenceFileブロック圧縮の実装はそうではありません。

このCompressionクラスは Hadoop の圧縮フレームワークの一部であり、HBase の HFile ブロック圧縮で使用されます。

HBase には、次のタイプの圧縮がすでに組み込まれています。

  • ディスク上の HFile ブロック圧縮。これは Hadoop のコーデック フレームワークを使用し、LZO、GZIP、SNAPPY などの圧縮アルゴリズムをサポートします。このタイプの圧縮は、ディスクに保存されている HFile ブロックにのみ適用されます。これは、キーと値のペアを取得するためにブロック全体を圧縮解除する必要があるためです。
  • キャッシュ内キー圧縮 (HBase 用語では「データ ブロック エンコーディング」と呼ばれます) — HBASE-4218 を参照してください。実装されているエンコーディング アルゴリズムには、さまざまなタイプのプレフィックスおよびデルタ エンコーディングが含まれており、この記事の執筆時点でトライ エンコーディングが実装されています ( HBASE-4676)。データ ブロック エンコーディング アルゴリズムは、HFile ブロック内の並べ替えられたキー間の冗長性を利用し、連続するキー間の違いのみを保存します。これらのアルゴリズムは現在、値を処理しないため、(キー サイズに比べて) 値が小さい場合 (カウンターなど) に最も役立ちます。これらのデータ ブロック エンコーディング アルゴリズムの軽量性により、ブロックの必要な部分のみを効率的にデコードして、要求されたキーを取得するか、次のキーに進むことができます。これが、これらのエンコーディング アルゴリズムがキャッシュ効率の向上に適している理由です。ただし、一部の実世界のデータセットでは、デルタ エンコーディングを使用すると、LZO 圧縮に加えて最大 50% の節約が可能になり (たとえば、デルタ エンコーディングを適用してから LZO と LZO のみを比較)、ディスクも大幅に節約できます。
  • HBASE-4608では、カスタム辞書ベースの先行書き込みログ圧縮アプローチが実装されています。注: SequenceFile は HBase の先行書き込みログ ストレージに使用されますが、SequenceFileの組み込みブロック圧縮は先行書き込みログに使用できません。これは、ブロック圧縮のキーと値のペアをバッファリングするとデータが失われるためです。

HBase RPC 圧縮は進行中の作業です。おっしゃったように、クライアントと HBase の間で渡されるキーと値のペアを圧縮すると、帯域幅が節約され、HBase のパフォーマンスが向上します。これは Facebook の HBase バージョン 0.89-fb ( HBASE-5355 ) に実装されていますが、公式の Apache HBase トランクにはまだ移植されていません。HBase 0.89-fb でサポートされている RPC 圧縮アルゴリズムは、Hadoop 圧縮フレームワーク (GZIP や LZO など) でサポートされているものと同じです。

このsetCompressedMapOutputメソッドは map-reduce 構成メソッドであり、実際には HBase 圧縮には関係ありません。

于 2012-10-27T09:07:50.803 に答える
0

SequenceFile は、Hadoop で使用されるキーと値のペアのストリームです。詳細については、Hadoop wiki を参照してください。

于 2011-06-20T21:11:22.427 に答える