Apache HBase を新しいバージョンおよびストレージ アカウントに移行する
この記事では、Azure HDInsight の Apache HBase クラスターを、異なる Azure Storage アカウントを使用して、新しいバージョンに更新する方法を説明します。
この記事の内容は、移行元と移行先のクラスターで異なる Storage アカウントを使用する場合にのみ当てはまります。 移行元と移行先で同じ 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 |
重要な非互換性は、HBase のバージョン リリース ノートに記載されます。 HDInsight および HBase のターゲット バージョンを実行しているクラスターでアプリケーションをテストします。
HDInsight のバージョンと互換性の詳細は「Azure HDInsight のバージョン」をご覧ください。
Apache HBase クラスターの移行の概要
Azure HDInsight の Apache HBase クラスターをアップグレードして新しいストレージ アカウントに移行する大まかな手順は次のとおりです。 詳しい説明については、詳しい手順とコマンドをご覧ください。
移行元クラスターの準備をする
- データ インジェストを停止します。
memstore
データをフラッシュします。- Ambari から HBase を停止します。
- 高速書き込みを使用しているクラスターは、先行書き込みログ (WAL) のディレクトリをバックアップします。
移行先クラスターの準備をする
- 移行先クラスターを作成します。
- Ambari で HBase を停止します。
- Zookeeper のデータを消去します。
- ユーザーを HBase に切り替えます。
移行を完了する
- 移行先のファイル システムを消去し、データを移行し、
/hbase/hbase.id
を削除します。 - WAL を消去、移行します。
- 移行先の Ambari クラスターですべてのサービスを開始します。
- HBase を確認します。
- 移行元クラスターを削除します。
詳しい移行手順とコマンド
これらの詳しい手順とコマンドにより、新しいストレージ アカウントを使用して、Apache HBase クラスターを移行します。
移行元クラスターの準備をする
移行元の HBase クラスターへのインジェストを停止します。
アップグレードする 移行元 HBase クラスターをフラッシュします。
HBase では、
memstore
と呼ばれるメモリ内ストアに受信データを書き込みます。memstore
が一定のサイズに達すると、HBase はクラスターのストレージ アカウントに長期保存するためにディスクにフラッシュします。 アップグレード後にソース クラスターを削除memstores
すると、 データを保持するには、アップグレードする前に、各テーブルのmemstore
を手動でディスクにフラッシュします。GitHub の hbase-utils リポジトリにある 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
移行先クラスターの準備をする
Azure portal で、移行元クラスターと異なるストレージ アカウントを使用して、移行先 HDInsight クラスターを新たにセットアップします。
https://<NEWCLUSTERNAME>.azurehdinsight.net
で新しいクラスター上の Apache Ambari にサインインし、HBase のサービスを停止します。任意の Zookeeper ノードまたはワーカー ノードで次のコマンドを実行し、移行先クラスターの Zookeeper のデータを消去します。
hbase zkcli rmr /hbase-unsecure quit
sudo su hbase
を実行してユーザーを HBase に切り替えます。
ファイル システムと WAL を消去、移行する
移行元でどの HDI バージョンを使用しているか、また、移行元および移行先クラスターで高速書き込みを使用しているかどうかに応じて、次のいずれかのコマンドを実行します。 HDI 3.6 は Basic サポートであり新しいクラスターでの使用は推奨されないので、移行先クラスターでは常に HDI バージョン 4.0 を使用します。
- 移行元クラスターが HDI 3.6 で高速書き込みを使用しており、移行先クラスターでも高速書き込みを使用します。
- 移行元クラスターが HDI 3.6 で高速書き込みを使用しておらず、移行先クラスターでは高速書き込みを使用します。
- 移行元クラスターが HDI 3.6 で高速書き込みを使用しておらず、移行先クラスターでも高速書き込みを使用しません。
- 移行元クラスターが HDI 4.0 で高速書き込みを使用しており、移行先クラスターでも高速書き込みを使用します。
- 移行元クラスターが HDI 4.0 で高速書き込みを使用しておらず、移行先クラスターでは高速書き込みを使用します。
- 移行元クラスターが HDI 4.0 で高速書き込みを使用しておらず、移行先クラスターでも高速書き込みを使用しません。
ストレージ アカウントの <container-endpoint-url>
は https://<storageaccount>.blob.core.windows.net/<container-name>
です。 ストレージ アカウントの SAS トークンを URL の末尾に配置します。
- WASB ストレージの
<container-fullpath>
はwasbs://<container-name>@<storageaccount>.blob.core.windows.net
です - Azure Data Lake Storage Gen2 の
<container-fullpath>
はabfs://<container-name>@<storageaccount>.dfs.core.windows.net
です。
コピー コマンド
HDFS のコピー コマンドは hdfs dfs <copy properties starting with -D> -cp
です
ページ BLOB 以外でファイルをコピーするときは、hadoop distcp
を使用する方がパフォーマンスがいいです: hadoop distcp <copy properties starting with -D>
ストレージ アカウントのキーを渡すには次のようにします。
-Dfs.azure.account.key.<storageaccount>.blob.core.windows.net='<storage account key>'
-Dfs.azure.account.keyprovider.<storageaccount>.blob.core.windows.net=org.apache.hadoop.fs.azure.SimpleKeyProvider
HBase のデータ ファイルをコピーするときは AzCopy も使用でき、こちらの方がパフォーマンスがいいです。
AzCopy コマンドを実行します。
azcopy cp "<source-container-endpoint-url>/hbase" "<target-container-endpoint-url>" --recursive
移行先のストレージ アカウントが Azure Blob ストレージである場合は、コピー後にこの手順を実行します。 移行先のストレージ アカウントが Data Lake Storage Gen2 である場合は、この手順を飛ばします。
Hadoop WASB ドライバーでは、すべてのディレクトリに対応している、サイズが 0 の特別な BLOB を使用します。 AzCopy ではコピー時にこれらのファイルを無視します。 WASB の操作にはこれらの BLOB を使用するものがあるので、移行先のクラスターにそれらを作成する必要があります。 BLOB を作成するには、移行先クラスターの任意のノードから次の Hadoop コマンドを実行します。
sudo -u hbase hadoop fs -chmod -R 0755 /hbase
AzCopy は「AzCopy を使ってみる」でダウンロードできます。 AzCopy の詳しい使用方法は「azcopy copy」をご覧ください。
移行元クラスターが HDI 3.6 または HDI 4.0 で高速書き込みを使用しており、移行先クラスターでも高速書き込みを使用する
ファイル システムを消去してデータを移行するには、次のコマンドを実行します。
hdfs dfs -rm -r /hbase hadoop distcp <source-container-fullpath>/hbase /
hdfs dfs -rm /hbase/hbase.id
を実行してhbase.id
を削除しますWAL を消去、移行するには、次のコマンドを実行します。
hdfs dfs -rm -r hdfs://<destination-cluster>/hbasewal hdfs dfs -cp <source-container-fullpath>/hbase-wal-backup/hbasewal hdfs://<destination-cluster>/hbasewal
移行元クラスターが HDI 3.6 で高速書き込みを使用しておらず、移行先クラスターでは高速書き込みを使用する
ファイル システムを消去してデータを移行するには、次のコマンドを実行します。
hdfs dfs -rm -r /hbase hdfs dfs -Dfs.azure.page.blob.dir="/hbase/WALs,/hbase/MasterProcWALs,/hbase/oldWALs,/hbase-wals" -cp <source-container-fullpath>/hbase / hdfs dfs -rm -r /hbase/*WALs
hdfs dfs -rm /hbase/hbase.id
を実行してhbase.id
を削除しますWAL を消去、移行するには、次のコマンドを実行します。
hdfs dfs -rm -r hdfs://<destination-cluster>/hbasewal/* hdfs dfs -Dfs.azure.page.blob.dir="/hbase/WALs,/hbase/MasterProcWALs,/hbase/oldWALs,/hbase-wals" -cp <source-container-fullpath>/hbase/*WALs hdfs://<destination-cluster>/hbasewal
移行元クラスターが HDI 3.6 で高速書き込みを使用しておらず、移行先クラスターでも高速書き込みを使用する
ファイル システムを消去してデータを移行するには、次のコマンドを実行します。
hdfs dfs -rm -r /hbase hdfs dfs -Dfs.azure.page.blob.dir="/hbase/WALs,/hbase/MasterProcWALs,/hbase/oldWALs,/hbase-wals" -cp <source-container-fullpath>/hbase / hdfs dfs -rm -r /hbase/*WALs
hdfs dfs -rm /hbase/hbase.id
を実行してhbase.id
を削除しますWAL を消去、移行するには、次のコマンドを実行します。
hdfs dfs -rm -r /hbase-wals/* hdfs dfs -Dfs.azure.page.blob.dir="/hbase/WALs,/hbase/MasterProcWALs,/hbase/oldWALs,/hbase-wals" -cp <source-container-fullpath>/hbase/*WALs /hbase-wals
移行元クラスターが HDI 4.0 で高速書き込みを使用しておらず、移行先クラスターでは高速書き込みを使用する
ファイル システムを消去してデータを移行するには、次のコマンドを実行します。
hdfs dfs -rm -r /hbase hadoop distcp <source-container-fullpath>/hbase /
hdfs dfs -rm /hbase/hbase.id
を実行してhbase.id
を削除しますWAL を消去、移行するには、次のコマンドを実行します。
hdfs dfs -rm -r hdfs://<destination-cluster>/hbasewal hdfs dfs -Dfs.azure.page.blob.dir="/hbase-wals" -cp <source-container-fullpath>/hbase-wals hdfs://<destination-cluster>/hbasewal
移行元クラスターが HDI 4.0 で高速書き込みを使用しておらず、移行先クラスターでも高速書き込みを使用する
ファイル システムを消去してデータを移行するには、次のコマンドを実行します。
hdfs dfs -rm -r /hbase hadoop distcp <source-container-fullpath>/hbase /
hdfs dfs -rm /hbase/hbase.id
を実行してhbase.id
を削除しますWAL を消去、移行するには、次のコマンドを実行します。
hdfs dfs -rm -r /hbase-wals/* hdfs dfs -Dfs.azure.page.blob.dir="/hbase-wals" -cp <source-container-fullpath>/hbase-wals /
移行を完了する
移行先クラスターで変更を保存し、Ambari の指示どおりに必要なすべてのサービスを再起動します。
アプリケーションで移行先クラスターを指定します。
Note
アップグレードを行うと、アプリケーションの静的 DNS 名が変わります。 この DNS をハードコーディングする代わりに、当該のドメイン名の DNS 設定で、目的のクラスター名を参照する CNAME を構成できます。 もう 1 つの選択肢は、再デプロイせずに更新できる、アプリケーション用の構成ファイルを使用することです。
インジェストを開始します。
HBase の一貫性と、データ定義言語 (DDL) およびデータ操作言語 (DML) の基本操作を確認します。
移行先クラスターに問題がなければ、移行元クラスターを削除します。
次のステップ
Apache HBase の詳細と HDInsight クラスターのアップグレードについては、次の記事を参照してください。