Von früheren HBase-Versionen migrieren

Der Cloud Bigtable-HBase-Client für Java ist auf die Versionen 1.x und 2.x der Apache HBase API ausgerichtet. Version 1.0 der API beinhaltet einige größere Änderungen gegenüber früheren Versionen von HBase. Wenn Sie von HBase zu Bigtable migrieren und Ihre Anwendung für eine ältere Version der HBase API bestimmt ist, müssen Sie die Anwendung aktualisieren, damit sie mit Bigtable kompatibel wird.

Um bei Ihrer Migration zu helfen, sind auf dieser Seite die nennenswertesten Änderungen in HBase 1.0 API zusammengefasst.

Verbindungsschnittstelle

Verwenden Sie in HBase 1.0 und neueren Versionen nicht die verworfene Schnittstelle HConnection, sondern org.apache.hadoop.hbase.client.ConnectionFactory. Diese Klasse erstellt Objekte, die die neue Connection-Schnittstelle implementieren. ConnectionFactory ersetzt die verworfenen Klassen ConnectionManager und HConnectionManager.

Ein Connection-Objekt zu erstellen ist ein relativ teurer Vorgang. Sie sollten ein Connection-Objekt pro Vorgang erstellen und das Objekt nach Bedarf teilen. Connection-Objekte sind threadsicher.

Zusätzlich sollten Sie sichergehen, die Verbindung zu schließen, wenn Sie fertig sind. In HBase 1.0 und später liegt es in der Verantwortung der Anwendung, den Lebenszyklus der Verbindung zu verwalten.

Ihr aktualisierter Code sollte dem folgenden Beispiel ähnlich sein:

Connection connection = ConnectionFactory.createConnection(config);
// ...
connection.close();

Klasse TableName

In früheren Versionen von HBase konnten Sie bei der Bearbeitung einer Tabelle den Namen der Tabelle als String- oder byte[]-Wert angeben. In HBase 1.0 und neueren Versionen müssen Sie den Tabellennamen durch Erstellen einer Instanz von org.apache.hadoop.hbase.TableName angeben:

String tableName = "MyTable";
    // or byte[] tableName = Bytes.toBytes("MyTable");
TableName tableNameObj = TableName.valueOf(tableName);

Tabellen-, BufferedMutator- und RegionLocator-Schnittstellen

In HBase 1.0 wurde die Klasse HTable durch die folgenden Schnittstellen ersetzt:

Verwenden Sie ein Connection-Objekt, um eine Instanz dieser Schnittstellen abzurufen:

Table table = connection.getTable(tableNameObj);
BufferedMutator mutator = connection.getBufferedMutator(tableNameObj);
RegionLocator regionLocator = connection.getRegionLocator(tableNameObj);

Instanzen von Table, BufferedMutator und RegionLocator sind nicht threadsicher. Jedoch sind diese Objekte sehr klein, sodass Sie sie, wenn nötig, im Kontext eines Threads erstellen können.

Admin-Schnittstelle

In HBase 1.0 wird die Klasse HBaseAdmin durch die Schnittstelle org.apache.hadoop.hbase.client.Admin ersetzt. Da Bigtable Wartungsarbeiten automatisch durchführt, werden viele der Methoden in der Admin-Schnittstelle nicht unterstützt. Weitere Informationen finden Sie unter Unterschiede zwischen der HBase API und der Bigtable API.

Verwenden Sie ein Connection-Objekt, um eine Instanz der Admin-Schnittstelle abzurufen:

Admin admin = connection.getAdmin();