Apache HBase クラスターを新しいバージョンに移行する

この記事では、Azure HDInsight で Apache HBase クラスターを新しいバージョンに更新する方法について説明します。

この記事は、移行元および移行先クラスターで同じ Azure Storage アカウントを使用する場合にのみ適用されます。 移行先クラスターで新しいストレージ アカウントまたは別のストレージ アカウントを使用してアップグレードを行うには、Apache HBase を新しいストレージ アカウントを使用して新しいバージョンに移行する方法に関するページを参照してください。

アップグレード中のダウンタイムは数分以内に収める必要があります。 すべてのメモリ内データをフラッシュし、新しいクラスターでサービスを構成、再起動する間、このダウンタイムが発生します。 結果は、ノード数、データ量、およびその他の可変要素によって異なります。

Apache HBase の互換性の確認

Apache HBase をアップグレードする前に、移行元クラスターと移行先クラスターの HBase バージョンの互換性を確保します。 HBase Reference Guide の HBase バージョン互換性表とリリース ノートを見て、新しいバージョンに対する互換性がアプリケーションにあることを確認してください。

これは互換性表の例です。 Y は互換性を示し、N は潜在的な非互換性を示します。

互換性の種類 メジャー バージョン マイナー バージョン 修正プログラム
クライアント/サーバー間の接続の互換性 N Y Y
サーバー/サーバー間の互換性 N Y Y
ファイル形式の互換性 N Y Y
クライアント API の互換性 N Y Y
クライアント バイナリの互換性 N N Y
サーバー側の制限付きの API 互換性
Stable N Y Y
進化 N N Y
不安定 N N N
依存関係の互換性 N Y Y
運用の互換性 N N Y

HDInsigh のバージョンと互換性の詳細については、Azure HDInsight のバージョンに関するページを参照してください。

Apache HBase クラスターの移行の概要

Azure HDInsight で Apache HBase クラスターをアップグレードするには、次の基本手順を実行します。 詳しい方法については、詳細な手順とコマンドを参照するか、自動移行に関する「スクリプトを使用して HBase を移行する」セクションのスクリプトを使用してください。

移行元クラスターの準備をする

  1. データ インジェストを停止します。
  2. memstore のデータをフラッシュします。
  3. Ambari から HBase を停止します。
  4. 高速書き込みを使用しているクラスターは、先行書き込みログ (WAL) のディレクトリをバックアップします。

移行先クラスターの準備をする

  1. 移行先クラスターを作成します。
  2. Ambari から HBase を停止します。
  3. HDFS service config の fs.defaultFS を更新して、移行元クラスターの元のコンテナーを参照します。
  4. 高速書き込みを使用するクラスターの場合は、HBase service config の hbase.rootdir を更新して、移行元クラスターの元のコンテナーを参照します。
  5. Zookeeper データをクリーンアップします。

次の操作を行い、移行を完了します。

  1. WAL をクリーンアップして移行します。
  2. 移行先クラスターの既定のコンテナーから移行元の元のコンテナーにアプリをコピーします。
  3. Ambari 移行先クラスターからすべてのサービスを開始します。
  4. HBase を確認します。
  5. 移行元クラスターを削除します。

移行の詳細な手順とコマンド

これらの詳細な手順とコマンドを使用して、Apache HBase クラスターを移行します。

移行元クラスターを準備する

  1. 移行元の HBase クラスターへのインジェストを停止します。

  2. アップグレードする 移行元 HBase クラスターをフラッシュします。

    HBase では、memstore というメモリ内の保存場所に受信データを書き込みます。 memstore が一定のサイズに達すると、HBase はクラスターのストレージ アカウントに長期保存するためにディスクにフラッシュします。 アップグレード後に移行元クラスターを削除すると、memstore のデータもすべて削除されます。 データを保持するには、アップグレードの前に、各テーブルの memstore をディスクに手動でフラッシュします。

    memstore データは、Azure hbase-utils GitHub リポジトリから flush_all_tables.sh スクリプトを実行することで、フラッシュできます。

    また、HDInsight クラスターから次の HBase シェル コマンドを実行して、memstore データをフラッシュすることもできます。

    hbase shell
    flush "<table-name>"
    
  3. https://<OLDCLUSTERNAME>.azurehdinsight.net を使用して、移行元クラスター上の Apache Ambari にサインインし、HBase サービスを停止します。

  4. 確認ウィンドウで該当するボックスを選択し、HBase のメンテナンス モードを有効にします。

    Ambari への接続とその使用方法の詳細については、「Ambari Web UI を使用した HDInsight クラスターの管理」を参照してください。

  5. 移行元 HBase クラスターに高速書き込み機能がない場合、この手順はスキップします。 高速書き込みがある移行元 HBase クラスターの場合は、移行元クラスターの任意の Zookeeper ノードまたはワーカー ノード上の SSH セッションから次のコマンドを実行して、HDFS の下の WAL ディレクトリをバックアップします。

    hdfs dfs -mkdir /hbase-wal-backup
    hdfs dfs -cp hdfs://mycluster/hbasewal /hbase-wal-backup
    

移行先クラスターを準備する

  1. Microsoft Azure Portal で、移行元クラスターと同じストレージ アカウントを使用して、新しい移行先 HDInsight クラスターを設定します。ただし、コンテナー名は違うものを使用してください。

  2. https://<NEWCLUSTERNAME>.azurehdinsight.net からアクセスできる、新しいクラスター上の Apache Ambari にサインインして、HBase サービスを停止します。

  3. [サービス]>[HDFS]>[Configs]>詳細設定>詳細設定コアサイト で、fs.defaultFS HDFS 設定を変更して、移行元クラスターの元のコンテナー名を指すように設定します。 たとえば、次のスクリーンショットの設定を "wasbs://hbase-upgrade-old-2021-03-22" に変更する必要があります。

    Ambari で、[サービス] > [HDFS] > [Configs] > 詳細設定 > 詳細設定コアサイト を選択し、コンテナー名を変更する。

  4. 移行先クラスターに高速書き込み機能がある場合は、 hbase.rootdir パスを変更して、移行元クラスターの元のコンテナー名を指すように設定します。 たとえば、次のパスは hbase-upgrade-old-2021-03-22 に変更する必要があります。 クラスターに高速書き込みがない場合、この手順はスキップします。

    Ambari で、HBase rootdir のコンテナー名を変更する。

  5. 任意の 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 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 /

移行を完了する

  1. sudo -u hdfs ユーザー コンテキストを使用して、フォルダー /hdp/apps/<new-version-name> とその内容を、<destination-container-fullpath> から <source-container-fullpath> の下の /hdp/apps フォルダーにコピーします。 移行先クラスターで次のコマンドを実行して、フォルダーをコピーできます。

    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
    
  2. 移行先クラスターで変更を保存し、Ambari で示される、必要なすべてのサービスを再起動します。

  3. アプリケーションで移行先クラスターを指定します。

    Note

    アップグレードを行うと、アプリケーションの静的 DNS 名が変わります。 この DNS をハードコーディングする代わりに、当該のドメイン名の DNS 設定で、目的のクラスター名を参照する CNAME を構成できます。 もう 1 つの選択肢は、再デプロイせずに更新できる、アプリケーション用の構成ファイルを使用することです。

  4. インジェストを開始します。

  5. HBase の一貫性と、データ定義言語 (DDL) およびデータ操作言語 (DML) の基本操作を確認します。

  6. 移行先クラスターに問題がなければ、移行元クラスターを削除します。

スクリプトを使用して HBase を移行する

  1. 移行元クラスターでスクリプト migrate-hbase-source.sh を実行し、移行先クラスターで migrate-hbase-dest.sh を実行します。 これらのスクリプトを実行するには、次の手順のようにします。

    注意

    これらのスクリプトでは、移行の一環として HBase の古い ACL はコピーされません。そのため、HBase バックアップまたはレプリケーション機能が有効になっているクラスターでは、スクリプトを使わないでください。

  2. 移行元クラスターで

    sudo bash migrate-hbase-source.sh
    
  3. 移行先クラスターで

    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 クラスターのアップグレードについては、次の記事を参照してください。