

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# HBase を設定する
<a name="emr-hbase-configure"></a>

デフォルトの HBase 設定はほとんどのアプリケーションで動作しますが、HBase 設定を変更することもできます。そのためには、HBase 設定分類のプロパティを使用します。詳細については、「[アプリケーションの設定](emr-configure-apps.md)」を参照してください。

次の例では、Amazon S3 に格納されている設定ファイル `myConfig.json` に基づいて、代替の HBase ルートディレクトリを持つクラスターを作成します。

**注記**  
読みやすくするために、Linux 行連続文字 (\$1) が含まれています。Linux コマンドでは、これらは削除することも、使用することもできます。Windows の場合、削除するか、キャレット (^) に置き換えてください。

```
aws emr create-cluster --release-label emr-7.12.0 --applications Name=HBase \
--instance-type m5.xlarge --instance-count 3 --configurations https://s3.amazonaws.com/amzn-s3-demo-bucket/myfolder/myConfig.json
```

`myConfig.json` ファイルは、次の例に示すように、`hbase.rootdir` 設定分類の `hbase-site` プロパティを指定します。*ip-XXX-XX-XX-XXX.ec2.internal* を、クラスターのプライマリノードの内部 DNS ホスト名に置き換えます。

```
[
  {
    "Classification":"hbase-site",
    "Properties": {
       "hbase.rootdir": "hdfs://ip-XXX-XX-XX-XXX.ec2.internal:8020/user/myCustomHBaseDir"
    }
  }
]
```

**注記**  
Amazon EMR バージョン 5.21.0 以降では、実行中のクラスター内のインスタンスグループごとに、クラスター設定を上書きして追加の設定分類を指定できます。これを行うには、Amazon EMR コンソール、 AWS Command Line Interface (AWS CLI)、または AWS SDK を使用します。詳細については、「[実行中のクラスター内のインスタンスグループの設定を指定する](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps-running-cluster.html)」を参照してください。

## YARN でメモリ割り当てを変更する
<a name="emr-hbase-configure-yarn"></a>

HBase は YARN アプリケーションとして実行されていないため、YARN および YARN アプリケーションに割り当てられたメモリを再計算する必要があります。その結果、HBase がインストールされている場合は YARN で全体的に使用可能なメモリ量が少なくなります。YARN アプリケーションと HBase を同じクラスターに配置することを計画する場合は、この点を考慮する必要があります。メモリが 64 GB 未満のインスタンスタイプでは、メモリの半分が NodeManager 用に確保され、さらに HBase RegionServer に割り当てられます。メモリが 64 GB を超えるインスタンスタイプでは、HBase RegionServer のメモリの上限が 32 GB になります。一般的に、YARN 設定のメモリは MapReduce リデューサータスクのメモリの倍数になります。

「[タスクの構成設定のデフォルト値](emr-hadoop-task-config.md#emr-hadoop-task-jvm)」のテーブルには、HBase に必要なメモリに基づいた YARN 設定の変更が示されています。

## HBase のポート番号
<a name="emr-hbase-ports"></a>

HBase 用に選択されている一部のポート番号は、デフォルト値と異なります。Amazon EMR の HBase 用インスタンスおよびポートを次に示します。


**HBase のポート**  

| インターフェイス | ポート | プロトコル | 
| --- | --- | --- | 
| HMaster | 16000 | TCP | 
| HMaster UI | 16010 | HTTP | 
| RegionServer | 16020 | TCP | 
| RegionServer 情報 | 16030 | HTTP | 
| REST サーバー | 8070 | HTTP | 
| REST UI | 8085 | HTTP | 
| Thrift サーバー | 9090 | TCP | 
| Thrift サーバー UI | 9095 | HTTP | 

**重要**  
Amazon EMR リリースバージョン 4.6.0 以降では、`kms-http-port` は 9700、`kms-admin-port` は 9701 です。

## 最適化のための HBase サイト設定
<a name="emr-hbase-settings-optimize"></a>

HBase サイト設定の一部またはすべてを設定することで、アプリケーションのワークロード用に HBase クラスターを最適化できます。調査の出発点として次の設定を使用することをお勧めします。

### zookeeper.session.timeout
<a name="emr-hbase-zookeeper.session.timeout"></a>

デフォルトのタイムアウトは 40 秒 (40000 ミリ秒) です。リージョンサーバーがクラッシュしたとき、そのリージョンサーバーが存在しないことをマスターサーバーが認識し、回復処理を開始するのに要する時間です。マスターサーバーの回復処理を高速化するには、この値を小さくして時間を短くします。次の例では、30 秒、つまり 30000 ミリ秒を使用しています。

```
[
  {
    "Classification":"hbase-site",
    "Properties": {
       "zookeeper.session.timeout": "30000"
    }
  }
]
```

### hbase.regionserver.handler.count
<a name="emr-hbase-hbase.regionserver.handler.count"></a>

リクエストをテーブルに提供するためにリージョンサーバーが開いたままにするスレッド数を定義します。同時実行クライアント数が多い大きな書き込みバッファを使用するときに、ユーザーによるリージョンサーバーの強制終了を防ぐため、デフォルトでは 10 という低い値が設定されています。大まかな方法として、リクエストあたりのペイロードが MB 範囲に近いときは（big puts、ラージキャッシュを使用した scans）小さな値を、ペイロードが小さいときは（gets、small puts、ICV、deletes）、大きな値を指定します。次の例では、開いているスレッドの数を 30 まで増やしています。

```
[
  {
    "Classification":"hbase-site",
    "Properties": {
       "hbase.regionserver.handler.count": "30"
    }
  }
]
```

### hbase.hregion.max.filesize
<a name="emr-hbase-hbase.hregion.max.filesize"></a>

このパラメータは、個別のリージョンのサイズ（バイト単位）を管理します。デフォルトでは、`1073741824` に設定されます。大量のデータを HBase クラスターに書き込んでおり、頻繁に分割が発生する場合は、このサイズを増やすことで個別のリージョンを大きくします。分割は少なくなりますが、サーバー間におけるリージョンの負荷分散にかかる時間が長くさなります。

```
[
  {
    "Classification":"hbase-site",
    "Properties": {
       "hbase.hregion.max.filesize": "1073741824"
    }
  }
]
```

### hbase.hregion.memstore.flush.size
<a name="emr-hbase-hbase.hregion.memstore.flush.size"></a>

このパラメータは、ディスクにフラッシュする前の memstore の最大サイズ（バイト単位）を管理します。デフォルトでは、`134217728` です。ワークロードが書き込みオペレーションの短期バーストで構成されている場合は、この制限を増やして、バースト中もすべての書き込みがメモリに収まるようにし、後でディスクにフラッシュされるようにします。これにより、バースト中のパフォーマンスが向上することがあります。

```
[
  {
    "Classification":"hbase-site",
    "Properties": {
       "hbase.hregion.memstore.flush.size": "134217728"
    }
  }
]
```

## パフォーマンスに関する考慮事項
<a name="hbase-performance-considerations"></a>

### HBase の Z Garbage Collector (ZGC) の有効化
<a name="hbase-performance-considerations-enable"></a>

Amazon EMR バージョン 7.10.0 以降では、ユーザーは HBase クラスターのガベージコレクション (GC) 設定をシームレスに設定できます。Z Garbage Collector (ZGC) を有効にして、低レイテンシーとミリ秒未満の GC 一時停止時間を実現することをお勧めします。

HBase RegionServer の ZGC を有効にする設定は次のとおりです:

```
[
    {
        "Classification": "hbase-env",
        "Properties": {},
        "Configurations": [
            {
                "Classification": "export",
                "Properties": {
                    "JAVA_HOME": "/usr/lib/jvm/jre-21",
                    "HBASE_REGIONSERVER_GC_OPTS": "\"-XX:+UseZGC -XX:+ZGenerational\""
                }
            }
        ]
    }
]
```

**注記**  
**JAVA\$1HOME** 環境変数は、JDK 21 で導入されたため、世代 ZGC を使用するときに設定する必要があります (推奨)。ZGC の非世代モード (`-XX:+ZGenerational` なし) を使用する場合は、**JAVA\$1HOME** を設定する必要はありません。JDK 24 では、ZGC の非世代モードが削除されました。

#### ZGC チューニング
<a name="hbase-performance-considerations-tuning-"></a>

1. **JVM 固定ヒープを有効にする**

   Z Garbage Collector (ZGC) は、固定ヒープメモリで設定するとより効率的に動作するため、オペレーティングシステムにメモリを返すオーバーヘッドがなくなります。HBase クラスターの固定ヒープメモリを設定するには、以下の設定を使用します:

   ```
   [
       {
           "Classification": "hbase",
           "Properties": {
               "hbase.regionserver.fixed.heap.enabled": "true"
           }
       }
   ]
   ```

1. **プレタッチを有効にする**

   プレタッチを有効にすることにより、初期レイテンシーが短縮され、より予測可能なパフォーマンスが提供されるため、ガベージコレクション (GC) のパフォーマンスが向上します。HBase クラスターのプレタッチを有効にするには、以下の設定を使用します:

   ```
   [
       {
           "Classification": "hbase-env",
           "Properties": {},
           "Configurations": [
               {
                   "Classification": "export",
                   "Properties": {
                       "JAVA_HOME": "/usr/lib/jvm/jre-21",
                       "HBASE_REGIONSERVER_GC_OPTS": "\"-XX:+UseZGC -XX:+ZGenerational -XX:+AlwaysPreTouch\""
                   }
               }
           ]
       }
   ]
   ```