この記事では、Azure HDInsight で Apache HBase クラスターを新しいバージョンに更新する方法について説明します。
この記事は、移行元および移行先クラスターで同じ Azure Storage アカウントを使用する場合にのみ適用されます。 移行先クラスターの新しいストレージ アカウントまたは別のストレージ アカウントを使用してアップグレードするには、「新しいストレージ アカウントを使用して Apache HBase を新しいバージョンに移行する」を参照してください。
アップグレード中のダウンタイムは数分で済みます。 このダウンタイムは、すべてのインメモリ データをフラッシュする手順と、新しいクラスターでサービスを構成して再起動する時間によって発生します。 結果は、ノードの数、データの量、およびその他の変数によって異なります。
Apache HBase の互換性の確認
Apache HBase をアップグレードする前に、移行元クラスターと移行先クラスターの HBase バージョンの互換性を確保します。 HBase Reference Guide の HBase バージョン互換性表とリリース ノートを見て、新しいバージョンに対する互換性がアプリケーションにあることを確認してください。
互換性マトリックスの例を次に示します。 Y は互換性を示し、N は非互換性の可能性を示します。
互換性の種類 | メジャー バージョン | マイナー バージョン | パッチ |
---|---|---|---|
クライアント/サーバー間の接続の互換性 | 非対応 | 対応 | 対応 |
サーバー/サーバー間の互換性 | 非対応 | 対応 | 対応 |
ファイル形式の互換性 | 非対応 | 対応 | 対応 |
クライアント API の互換性 | 非対応 | 対応 | 対応 |
クライアント バイナリの互換性 | 非対応 | 非対応 | 対応 |
サーバー側の制限付きの API 互換性 | |||
安定 | 非対応 | 対応 | 対応 |
進化 | 非対応 | 非対応 | 対応 |
不安定 | 非対応 | 非対応 | 非対応 |
依存関係の互換性 | 非対応 | 対応 | 対応 |
運用の互換性 | 非対応 | 非対応 | 対応 |
HDInsigh のバージョンと互換性の詳細については、Azure HDInsight のバージョンに関するページを参照してください。
Apache HBase クラスターの移行の概要
Azure HDInsight で Apache HBase クラスターをアップグレードするには、次の基本手順を実行します。 詳しい方法については、詳細な手順とコマンドを参照するか、自動移行に関する「スクリプトを使用して HBase を移行する」セクションのスクリプトを使用してください。
ソースクラスターを準備する
- データ インジェストを停止します。
- memstore のデータをフラッシュします。
- Ambari から HBase を停止します。
- 高速書き込みを使用しているクラスターは、先行書き込みログ (WAL) のディレクトリをバックアップします。
移行先クラスターの準備をする
- 移行先クラスターを作成します。
- Ambari から HBase を停止します。
- HDFS サービス設定の
fs.defaultFS
を、元のソースクラスターコンテナーを参照するように更新します。 - 高速書き込みを使用するクラスターの場合は、HBase service config の
hbase.rootdir
を更新して、移行元クラスターの元のコンテナーを参照します。 - Zookeeper データをクリーンアップします。
次の操作を行い、移行を完了します。
- WAL をクリーンアップして移行します。
- 移行先クラスターの既定のコンテナーから移行元の元のコンテナーにアプリをコピーします。
- Ambari 移行先クラスターからすべてのサービスを開始します。
- HBase を確認します。
- ソースクラスターを削除します。
移行の詳細な手順とコマンド
これらの詳細な手順とコマンドを使用して、Apache HBase クラスターを移行します。
ソースクラスターを準備する
移行元の HBase クラスターへのデータインプットを停止してください。
アップグレードする移行元 HBase クラスターをフラッシュします。
HBase は、 memstore と呼ばれるメモリ内ストアに受信データを書き込みます。 memstoreが特定のサイズに達すると、HBaseはクラスターのストレージアカウント内の長期保存のためにデータをディスクに書き込みます。 アップグレード後にソース クラスターを削除すると、memstore 内のデータも削除されます。 データを保持するには、アップグレードする前に、各テーブルの memstore を手動でディスクにフラッシュします。
azure hbase-utils GitHub リポジトリから flush_all_tables.sh スクリプトを実行することで、memstore データをフラッシュできます。
HDInsight クラスターから次の HBase シェル コマンドを実行して、memstore データをフラッシュすることもできます。
hbase shell flush "<table-name>"
https://<OLDCLUSTERNAME>.azurehdinsight.net
を使用してソース クラスター上の Apache Ambari にサインインし、HBase サービスを停止します。確認プロンプトで、HBase のメンテナンス モードを有効にするボックスを選択します。
Ambari への接続とその使用方法の詳細については、「Ambari Web UI を使用した HDInsight クラスターの管理」を参照してください。
移行元 HBase クラスターに高速書き込み機能がない場合、この手順はスキップします。 高速書き込みがある移行元 HBase クラスターの場合は、移行元クラスターの任意の Zookeeper ノードまたはワーカー ノード上の SSH セッションから次のコマンドを実行して、HDFS の下の WAL ディレクトリをバックアップします。
hdfs dfs -mkdir /hbase-wal-backup hdfs dfs -cp hdfs://mycluster/hbasewal /hbase-wal-backup
移行先クラスターを準備する
Microsoft Azure Portal で、移行元クラスターと同じストレージ アカウントを使用して、新しい移行先 HDInsight クラスターを設定します。ただし、コンテナー名は違うものを使用してください。
からアクセスできる、新しいクラスター上の
https://<NEWCLUSTERNAME>.azurehdinsight.net
にサインインして、HBase サービスを停止します。[サービス]>[HDFS]>[Configs]>詳細設定>詳細コアサイト で、
fs.defaultFS
HDFS 設定を変更して、元のソースクラスターのコンテナー名を指すようにします。 たとえば、次のスクリーンショットの設定を "wasbs://hbase-upgrade-old-2021-03-22
" に変更する必要があります。移行先クラスターに高速書き込み機能がある場合は、
hbase.rootdir
パスを変更して、移行元クラスターの元のコンテナー名を指すように設定します。 たとえば、次のパスはhbase-upgrade-old-2021-03-22
に変更する必要があります。 クラスターに高速書き込みがない場合、この手順はスキップします。任意の Zookeeper ノードまたはワーカー ノードで次のコマンドを実行して、移行先クラスターの Zookeeper データをクリーンアップします。
hbase zkcli rmr /hbase-unsecure quit
WAL をクリーンアップして移行する
ソース HDI のバージョンと、ソース クラスターと移行先クラスターに高速書き込みがあるかどうかに応じて、次のコマンドを実行します。
- HDI 3.6 は Basic サポートであり、新しいクラスターには推奨されないため、移行先クラスターは常に HDI バージョン 4.0 です。
- HDFS の copy コマンドは
hdfs dfs <copy properties starting with -D> -cp <source> <destination> # Serial execution
です。
注
- ストレージ タイプ WASB の
<source-container-fullpath>
はwasbs://<source-container-name>@<storageaccountname>.blob.core.windows.net
です。 - ストレージ タイプ Azure Data Lake Storage Gen2 の
<source-container-fullpath>
はabfs://<source-container-name>@<storageaccountname>.dfs.core.windows.net
です。
- ソース クラスターは高速書き込みを使用する HDI 3.6 であり、宛先クラスターには高速書き込みがあります。
- ソース クラスターは高速書き込みなしで HDI 3.6 であり、宛先クラスターには高速書き込みがあります。
- ソース クラスターは高速書き込みなしで HDI 3.6 であり、宛先クラスターには高速書き込みがありません。
- ソース クラスターは高速書き込みを使用する HDI 4.0 であり、宛先クラスターには高速書き込みがあります。
- ソース クラスターは高速書き込みなしで HDI 4.0 であり、宛先クラスターには高速書き込みがあります。
- ソース クラスターは高速書き込みなしで HDI 4.0 であり、宛先クラスターには高速書き込みがありません。
ソース クラスターが HDI 3.6 または HDI 4.0 (高速書き込み) で、宛先クラスターに高速書き込みがある
移行先クラスターの WAL FS データをクリーンアップし、移行元クラスターから移行先クラスターの HDFS に WAL ディレクトリをコピーします。 移行先クラスターの任意の Zookeeper ノードまたはワーカー ノードで次のコマンドを実行して、ディレクトリをコピーします。
sudo -u hbase hdfs dfs -rm -r hdfs://mycluster/hbasewal
sudo -u hbase hdfs dfs -cp <source-container-fullpath>/hbase-wal-backup/hbasewal hdfs://mycluster/
ソース クラスターは高速書き込みなしで HDI 3.6 であり、宛先クラスターには高速書き込みがある
移行先クラスターの WAL FS データをクリーンアップし、移行元クラスターから移行先クラスターの HDFS に WAL ディレクトリをコピーします。 移行先クラスターの任意の Zookeeper ノードまたはワーカー ノードで次のコマンドを実行して、ディレクトリをコピーします。
sudo -u hbase hdfs dfs -rm -r hdfs://mycluster/hbasewal
sudo -u hbase hdfs dfs -Dfs.azure.page.blob.dir="/hbase/WALs,/hbase/MasterProcWALs,/hbase/oldWALs" -cp <source-container>/hbase/*WALs hdfs://mycluster/hbasewal
ソース クラスターが高速書き込みのない HDI 3.6 であり、宛先クラスターに高速書き込みがない
移行先クラスターの WAL FS データをクリーンアップし、移行元クラスターの WAL ディレクトリを、移行先クラスターの HDFS にコピーします。 ディレクトリをコピーするために、移行先クラスターの任意の Zookeeper ノードまたはワーカー ノードで次のコマンドを実行します。
sudo -u hbase hdfs dfs -rm -r /hbase-wals/*
sudo -u hbase hdfs dfs -Dfs.azure.page.blob.dir="/hbase/WALs,/hbase/MasterProcWALs,/hbase/oldWALs" -cp <source-container-fullpath>/hbase/*WALs /hbase-wals
ソース クラスターが高速書き込みなしで HDI 4.0 であり、宛先クラスターに高速書き込みがある
移行先クラスターの WAL FS データをクリーンアップし、移行元クラスターから移行先クラスターの HDFS に WAL ディレクトリをコピーします。 移行先クラスターの任意の Zookeeper ノードまたはワーカー ノードで次のコマンドを実行して、ディレクトリをコピーします。
sudo -u hbase hdfs dfs -rm -r hdfs://mycluster/hbasewal
sudo -u hbase hdfs dfs -cp <source-container-fullpath>/hbase-wals/* hdfs://mycluster/hbasewal
ソース クラスターが高速書き込みなしで HDI 4.0 であり、宛先クラスターに高速書き込みがない
移行先クラスターの WAL FS データをクリーンアップし、移行元クラスターの WAL ディレクトリを、移行先クラスターの HDFS にコピーします。 ディレクトリをコピーするために、移行先クラスターの任意の Zookeeper ノードまたはワーカー ノードで次のコマンドを実行します。
sudo -u hbase hdfs dfs -rm -r /hbase-wals/*
sudo -u hbase hdfs dfs -Dfs.azure.page.blob.dir="/hbase-wals" -cp <source-container-fullpath>/hbase-wals /
移行を完了する
sudo -u hdfs
ユーザー コンテキストを使用して、フォルダー/hdp/apps/<new-version-name>
とその内容を、<destination-container-fullpath>
から/hdp/apps
の下の<source-container-fullpath>
フォルダーにコピーします。 移行先クラスターで次のコマンドを実行して、フォルダーをコピーできます。sudo -u hdfs hdfs dfs -cp /hdp/apps/<hdi-version> <source-container-fullpath>/hdp/apps
例えば次が挙げられます。
sudo -u hdfs hdfs dfs -cp /hdp/apps/4.1.3.6 wasbs://hbase-upgrade-old-2021-03-22@hbaseupgrade.blob.core.windows.net/hdp/apps
移行先クラスターで変更を保存し、Ambari で示される、必要なすべてのサービスを再起動します。
アプリケーションで移行先クラスターを指定します。
注
アップグレードを行うと、アプリケーションの静的 DNS 名が変わります。 この DNS をハードコーディングする代わりに、当該のドメイン名の DNS 設定で、目的のクラスター名を参照する CNAME を構成できます。 もう 1 つの選択肢は、再デプロイせずに更新できる、アプリケーション用の構成ファイルを使用することです。
インジェストを開始します。
HBase の一貫性と、データ定義言語 (DDL) およびデータ操作言語 (DML) の基本操作を確認します。
移行先クラスターに問題がなければ、移行元クラスターを削除します。
スクリプトを使用して HBase を移行する
ソース クラスターで スクリプト migrate-hbase-source.sh を実行し、移行先クラスターで migrate-hbase-dest.sh します。 これらのスクリプトを実行するには、次の手順のようにします。
注
これらのスクリプトでは、移行の一環として HBase の古い ACL はコピーされません。そのため、HBase バックアップまたはレプリケーション機能が有効になっているクラスターでは、スクリプトを使わないでください。
移行元クラスターで
sudo bash migrate-hbase-source.sh
移行先クラスターで
sudo bash migrate-hbase-dest.sh -f <src_default_Fs>
上記のコマンドの必須引数:
-f, --src-fs
The fs.defaultFS of the source cluster
For example:
-f wasb://anynamehbase0316encoder-2021-03-17t01-07-55-935z@anynamehbase0hdistorage.blob.core.windows.net
次のステップ
Apache HBase の詳細と HDInsight クラスターのアップグレードについては、次の記事を参照してください。