Azure HDInsight HBase クラスターにおけるレプリケーション

## はじめに

Azure HDInsight では Hbase クラスターを構築でき、クラスター間でデータをコピーするレプリケーション機能が存在します。

今回、レプリケーション元を `クラスターA`、レプリケーション先を `クラスターB` とし、実際の手順を説明していきます。

検証環境は `HBase 2.4 (HDI 5.1)` となります。

## 有効化の手順

### 1. `クラスターA` における HBase テーブルの作成

NSG インバウンドでアクセス元 IP を許可したうえで、`クラスターA` に SSH します。
以下のコマンドを実行して HBase テーブル作成とデータ投入を行います。

```console
$ hbase shell

> create 'test_table', 'cf'

> put 'test_table', 'row1', 'cf:col1', 'value1'

> list
TABLE
test_table 

> get 'test_table', 'row1'
COLUMN  CELL
cf:col1  timestamp=2024-11-15T02:24:52.806, value=value1 
```

### 2. `クラスターA` におけるスクリプトアクションの実行

Azure Portal の HDInsight 画面にてスクリプトアクションを実行します。


| 項目 | 値| 備考 |
|:----------:|:-----------:|:------------:|
| Script Type      | - Custom        |       |
| Name   | Enable Replication      |   任意の値で問題ないです   |
| Bash script URI       | https://raw.githubusercontent.com/Azure/hbase-utils/master/replication/hdi_enable_replication.sh       |     |
| Node type(s)       | Head          |         |
| Parameters  | -m hn0 -s `<クラスターA>` -d `<クラスターB>`  -su admin -du admin -sp `<パスワード>` -dp `<パスワード>` -copydata      | パスワードに `$` などの記号が含まれる場合、ダブルクォーテーションで囲んだうえで記号前にバックスラッシュを入れる必要があります   |


スクリプトアクションはパラメータ `-m` で指定したノードで実行され、その際 `<クラスターA>.azurehdinsight.net` および `<クラスターB>.azurehdinsight.net` へのアクセスが発生します。

プライベートエンドポイントを経由しない場合は、各クラスターが所属するサブネットの NSG インバウンドに `-m` で指定したノードのグローバル IP を `HTTPS` で許可しておく必要があります。

### 3. レプリケーション有効化の確認

NSG インバウンドでアクセス元 IP を許可したうえで、`クラスターB` に SSH します。
以下のコマンドを実行して HBase テーブルがレプリケートされたことを確認します。

```console
$ hbase shell

> list
TABLE
test_table 

> get 'test_table', 'row1'
COLUMN  CELL
cf:col1  timestamp=2024-11-15T02:24:52.806, value=value1
```

また、`クラスターA` において、以下のコマンドでデータを追加します。

```console
$ hbase shell

> put 'test_table', 'row1', 'cf:col2', 'value2'
```

すると、`クラスターB` において、追加されたデータを参照できます。

```console
$ hbase shell

> get 'test_table', 'row1'
COLUMN  CELL 
cf:col1  timestamp=2024-11-15T02:24:52.806, value=value1
cf:col2  timestamp=2024-11-15T02:58:52.787, value=value2
```

## 無効化の手順

### 1. `クラスターA` におけるスクリプトアクションの実行

Azure Portal の HDInsight 画面にてスクリプトアクションを実行します。


| 項目 | 値 | 備考 |
|:----------:|:-----------:|:------------:|
| Script Type      | - Custom        |       |
| Name   | Disable Replication      |   任意の値で問題ないです   |
| Bash script URI       | https://raw.githubusercontent.com/Azure/hbase-utils/master/replication/hdi_disable_replication.sh       |     |
| Node type(s)       | Head          |         |
| Parameters  | -m hn0 -s `<クラスターA>` -su admin -sp `<パスワード>` -all   | パスワードに `$` などの記号が含まれる場合、ダブルクォーテーションで囲んだうえで記号前にバックスラッシュを入れる必要があります   |

### 2. レプリケーション無効化の確認

`クラスターA` において、以下のコマンドでデータを追加します。

```console
$ hbase shell

> put 'test_table', 'row1', 'cf:col3', 'value3'
```

すると、`クラスターB` において、データが追加されていないことを確認できます。

```console
$ hbase shell

> get 'test_table', 'row1'
COLUMN  CELL
cf:col1  timestamp=2024-11-15T02:24:52.806, value=value1
cf:col2  timestamp=2024-11-15T02:58:52.787, value=value2
```

## おわりに

Azure HDInsight Hbase クラスターにおけるレプリケーション手順を確認しました。

スクリプトアクションのログは、下図のように Ambari UI の Background Operations から確認できます。デバッグの際には利用しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307853/7d417858-ed4e-a632-d3af-abb00333333a.png)



## 参考

https://learn.microsoft.com/ja-jp/azure/hdinsight/hbase/apache-hbase-replication

https://supa25.hatenablog.com/entry/2022/04/04/002128