web-dev-qa-db-ja.com

既存のhbaseテーブルをコピーする方法

HbaseテーブルXがあり、その正確なコピーを作成してYという名前を付けたいのですが、誰かがそれをどのように可能にするか教えてもらえますか?

ありがとう

22
user1586205

同じクラスターにテーブルをコピーする場合、hbase ShellでHBaseスナップショットを使用できます。

snapshot 'sourceTable', 'sourceTable-snapshot'
clone_snapshot 'sourceTable-snapshot', 'newTable'
33

CopyTableコマンドは、HBaseテーブルを複製するのに非常に便利です。次のように使用します。

hbase org.Apache.hadoop.hbase.mapreduce.CopyTable --new.name=Y X;
6
Pratik Patil

hbase Shellを使用する
1。 hbase-site.xmlでスナップショットを包括するようにしてください

  <property>
     <name>hbase.snapshot.enabled</name>
     <value>true</value>
    </property>

2. hbase>スナップショット 'x'、 'snapshot_x'
3。 hbase> clone_snapshot 'snapshot_x'、 'another_x'

3
toby941

Hbase Shellでバージョンを確認します。

hbase(main):001:0> version
0.90.4, r1150278, Sun Jul 24 15:53:29 PDT 2011

0.94.6の古いバージョンの場合は、mapredeuceジョブを使用する必要があります。スナップショットは0.94.6以降で利用可能です。これが上記の場合、 toby941回答 を使用するか、これらのいずれかを使用できます

A)

./hbase org.Apache.hadoop.hbase.mapreduce.CopyTable
Usage: CopyTable [--rs.class=CLASS] [--rs.impl=IMPL] [--starttime=X] [--endtime=Y] [--new.name=NEW] [--peer.adr=ADR] <tablename>

B-1)

./hbase org.Apache.hadoop.hbase.mapreduce.Export
Usage: Export [-D <property=value>]* <tablename> <outputdir> [<versions> [<starttime> [<endtime>]]]

B-2)次に、好きな名前でインポートします

./hbase org.Apache.hadoop.hbase.mapreduce.Import
Usage: Import <tablename> <inputdir>
1
Joker

古いバージョンのhbase https://issues.Apache.org/jira/browse/HBASE-8742 を使用している場合、スナップショット方法が機能しない場合があります。その場合は、hbaseスキーマを手動でコピーしてから、スナップショットを適用するか、固定バージョンにアップグレードすることをお勧めします。

0
AkD

HBaseのドキュメントによると、ここ( 12 )がオプションです。

0
Praveen Sripati

これは動作します。

hbase org.Apache.hadoop.hbase.mapreduce.Export tableA /hbase_export/tableA

hbase org.Apache.hadoop.hbase.mapreduce.Import /hbase_export/tableA tableAcopy
0
Kamal D