1

Hadoop / HDFS/Hbaseでデータをバージョン管理する方法を知りたいです。変更の可能性が非常に高いため、モデルの一部である必要があります(ビッグデータは長期間にわたって収集されます)。

HDFS(ファイルベースのバックエンド)の主な例。

sample-log-file.log

timestamp x1 y1 z1 ...
timestamp x2 y2 z2 ...

バージョニング情報をどこに追加するのか疑問に思います。私は2つの選択肢を見ます:

ファイル形式内のバージョン

log-file.log


timestamp V1 x1 y1 z1 ...
timestamp V2 w1 x2 y2 z1 ...

ファイル名内のバージョン

* log-file_V1.log *


timestamp x1 y1 z1 ...

* log-file_V2.log *

timestamp w1 x1 y1 z1 ...

2番目のオプション(ファイル名のバージョン)は、私にはもう少しクリーンで、HDFSに適合します(古いバージョンスタイルのファイルを除外するパターンとして* _v2 *を使用できます)。一方、1つのジョブでバージョンスニペ​​ットを分析できないため、2つの異なるジョブを実行する必要があります。

HBaseについてはどうでしょうか。HBaseでは、バージョンは間違いなく別のテーブル列で終わると思います(HDFSは実装の詳細であり、HBaseのバックエンドとして使用されます)。

バックエンドHadoop/HDFS / HBaseのデータをバージョン管理する他の代替アプローチはありますか?

ありがとう!

編集:私の質問は、タイムスタンプではなく、バージョン情報自体を処理する方法に関連しています。

4

2 に答える 2

2

HDFSの場合、タイムスタンプをファイル内に保存すると、より多くのスペースが使用されます(タイムスタンプは行ごとに繰り返されます)が、1つのファイルに複数の日付を保持する柔軟性があります。どちらが望ましいかは、ユースケースに完全に依存します。

HBaseの場合、いくつかのオプションがあります。行キーにタイムスタンプ(および/またはバージョン番号)を明示的に含め、データ項目のさまざまなバージョンをテーブルのさまざまな行にすることができます。または、HBaseの組み込みの時間ディメンションを使用できます。これには、データベース内のすべてのセル(つまり、すべての行のすべての列のすべての値)のタイムスタンプが含まれ、構成可能な数のバージョンを保持できます。デフォルトでは、スキャンは各キー/値の最新バージョンのみを返しますが、スキャン時にその動作を変更して、複数のバージョンを返すか、特定の時間範囲のバージョンのみを返すことができます。

于 2012-05-25T15:04:17.257 に答える
0

私の見解では、効率的なデータのバージョン管理には、同じバージョンのレコードをある程度近くに保存する必要がありました。次に、必要に応じて適切なバージョンを選択するためのアプリケーションロジックを使用できます。これは、一部のリレーショナルデータベースが行っていることと似ています。
このアプローチはCoachDBで使用される可能性がありますが、100%確信はありません。
それでは、HDFS/HBaseを見てみましょう。HBaseではデータの変更と編集が可能ですが、HDFSでは許可されていないため、これらはこの観点とはまったく異なります。
したがって、HBaseの場合、キーの最後の部分としてtimestempを使用でき、すべてのバージョンが一緒になります
HDFSは少数の大きなファイルを保存するのに適しており、それらを編集することはできません。到着した順にすべてのバージョンをファイルに書き込み、MapReduceを使用して、レデューサーで異なるtimestmpsを持つレコードのすべてのバージョンをグループ化することをお勧めします。すべてのデータがシャッフルを通過するため、効率的ではありませんが、ユーザーが制御できます。これを解決するには、この解決を定期的に実行し、ほとんどのレコードを含むデータを1つのバージョンに保存します。

于 2012-05-27T07:37:19.670 に答える