1

Hadoop を調査して、大規模なデータ セット (1 セットあたり数十億のレコード) に対する迅速なクエリのニーズに適した製品を確認しています。

クエリは、チップ シーケンス データに対して実行されます。各レコードは、ファイル内の 1 行です。わかりやすくするために、データ セットのサンプル レコードを以下に示します。

1 行 (レコード) は次のようになります。

1-1-174-418 TGTGTCCCTTTGTAATGAATCACTATC U2 0 0 1 4 ***103570835*** F .. 23G 24C

強調表示されたフィールドは「一致の位置」と呼ばれ、関心のあるクエリは、この「一致の位置」の特定の範囲内のシーケンスの数です。たとえば、範囲は「一致の位置」> 200 および「一致の位置」+ 36 < 200,000 にすることができます。

タスクを達成するために最初にすべき Hadoop 製品に関する提案はありますか? HBase、Pig、Hive、または ...?

4

4 に答える 4

4

大まかなガイドライン: 高速に返され、データを集約する必要のないクエリが多数必要な場合は、HBase を使用することをお勧めします。より分析と集計に重点を置いたタスクを見ている場合は、Pig または Hive が必要です。

HBase では、スキャンの開始行と終了行を指定できます。つまり、指定したクエリの例を満たす必要があり、ユース ケースに最も適しているようです。

于 2009-12-14T00:48:26.527 に答える
2

後世のために、Xueling が Hadoop メーリング リストで受け取った回答を次に示します。

まず、Xueling からの詳細:

データセットは頻繁に更新されません。ただし、データ セットに対するクエリは頻繁に行われます。クエリは速ければ速いほどよい。たとえば、Mysql データベース (24 のテーブルにランダムに分散された 50 億のレコード) でテストを行ったところ、最大のテーブル (4 億レコード) に対する最も遅いクエリは約 12 分です。したがって、Hadoop 製品を使用することで検索を高速化できる場合、その製品は私たちが探しているものです。

Cloudera の Todd Lipcon からの応答:

その場合、次のことをお勧めします。

  1. すべてのデータを HDFS に置く
  2. 一致した位置でデータを並べ替える MapReduce ジョブを作成する
  3. このジョブの 2 番目の出力として、「スパース インデックス」を作成できます。基本的には、次のようなエントリのセットです。

基本的に、10K レコードごとにオフセットを与えているところです。10,000 レコードごとにインデックスを作成する場合、合計 50 億は 100,000 のインデックス エントリを意味します。各インデックス エントリは 20 バイトを超えてはならないため、100,000 エントリは 2MB になります。これは非常に簡単にメモリに収まります。(おそらく、代わりに 100 レコードごとにインデックスを作成し、最終的に 200MB になる可能性がありますが、それでもメモリに簡単に収まります)

次に、カウント範囲クエリを満たすために、メモリ内のスパース インデックスをスキャンするだけです。索引付けされたブロックの一部は範囲に完全に含まれます。その場合は、「次のエントリ数」列を合計するだけです。開始ブロックと終了ブロックは部分的にカバーされるため、ファイル オフセット情報を使用してそのファイルを HDFS からロードし、そのオフセットで読み取りを開始し、カウントを終了できます。

クエリあたりの合計時間は 100 ミリ秒未満で問題ありません。

その後のいくつかの返信では、HBase が提案されました。

于 2009-12-25T22:00:35.860 に答える
0

HBaseやCassandraなどのNo-SQLデータベースのアプローチを検討する必要があるかもしれません。コミュニティが成長しているHBaseが好きです。

于 2012-04-07T07:20:50.747 に答える
0

JAQL ( http://code.google.com/p/jaql/ ) も簡単に調べることができますが、残念ながらこれは JSON データのクエリ用です。しかし、おそらくこれはとにかく役立ちます。

于 2010-01-12T00:16:10.913 に答える