HBase の Amazon S3 (Amazon S3 ストレージモード) - Amazon EMR

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

HBase の Amazon S3 (Amazon S3 ストレージモード)

HBase バージョン 5.2.0 以降Amazon EMRで を実行する場合、 HBase で を有効にするとAmazon S3、次の利点があります。

  • HBase ルートディレクトリはAmazon S3、HBaseストアファイルとテーブルメタデータを含む に保存されます。このデータはクラスター外で永続的で、Amazon EC2 アベイラビリティーゾーン間で使用することができ、スナップショットやそのほかの方法を使用して復元する必要はありません。

  • Amazon S3 に格納したファイルを使用して、HDFS の 3 倍のレプリケーションで、データ要件ではなくコンピューティング要件の Amazon EMR クラスターのサイズを決定できます。

  • Amazon EMR バージョン 5.7.0 以降では、リードレプリカクラスターを設定して、データの読み取り専用コピーを Amazon S3. に保持できます。複数の読み取りオペレーションを同時に実行する場合や、プライマリクラスターが使用不能になった場合に、リードレプリカクラスターのデータを利用できます。

  • Amazon EMR バージョン 6.2.0 以降では、永続HFile追跡は「hbase:storefile」というHBaseシステムテーブルを使用して、読み取りオペレーションに使用されるHFileパスを直接追跡します。この機能はデフォルトで有効になっており、手動移行を実行する必要はありません。

次の図は、 の に関連するHBaseコンポーネントを示していますHBaseAmazon S3。


							HBase Amazon S3 アーキテクチャ上の 。

HBase での の有効化 Amazon S3

コンソールHBase、、または Amazon S3 API Amazon EMR AWS CLI を使用してAmazon EMR、 で を有効にできます。この設定は、クラスター作成時のオプションです。コンソールを使用する場合は、[Advanced options (詳細オプション).] を使用して設定を選択します。AWS CLI を使用する場合は、--configurations オプションを使用して JSON 設定オブジェクトを提供します。設定オブジェクトのプロパティは 内のストレージモードとルートディレクトリの場所を指定します。Amazon S3. Amazon S3 の場所として Amazon EMR クラスターと同じリージョン内の場所を指定する必要があります。一度に 1 つのアクティブなクラスターのみが の同じ HBase ルートディレクトリを使用できます。Amazon S3. コンソールの手順および AWS CLI を使用したクラスター作成の詳細については、「を使用したクラスターの作成 HBase.」を参照してください。設定オブジェクトの例は、次の JSON スニペットに示します。

重要

本番稼働用ワークロードHBaseに対して Amazon S3 で を有効にする場合は、EMRFS の整合性のあるビューを使用することを強くお勧めします。整合性のあるビューを使用しないと、特定のオペレーションのパフォーマンスに影響が発生する場合があります。整合性のあるビューの設定の詳細については、の「整合性のあるビュー」を参照してくださいAmazon EMR 管理ガイド

{ "Classification": "hbase-site", "Properties": { "hbase.rootdir": "s3://my-bucket/my-hbase-rootdir"} }, { "Classification": "hbase", "Properties": { "hbase.emr.storageMode":"s3" } }
注記

Amazon S3 の として rootdir バケットを使用する場合はHBase、Amazon S3URI の末尾にスラッシュを追加する必要があります。たとえば、問題を回避するために"hbase.rootdir: s3://my-bucket/"、 の代わりに "hbase.rootdir: s3://my-bucket"を使用する必要があります。

リードレプリカクラスターの使用

HBase で を使用してプライマリクラスターを設定したらAmazon S3、プライマリクラスターと同じデータへの読み取り専用アクセスを提供するリードレプリカクラスターを作成して設定できます。これは、クエリデータに同時にアクセスする場合や、プライマリクラスターの使用不能時にアクセスを絶やさない場合に便利です。リードレプリカ機能は Amazon EMR バージョン 5.7.0 以降で使用できます。

プライマリクラスターとリードレプリカクラスターは 1 つの重要な点を除いて設定方法が同じです。どちらも同じ hbase.rootdir の場所を参照します。ただし、リードレプリカクラスターの hbase 分類には "hbase.emr.readreplica.enabled":"true" プロパティが含まれます。

たとえば、このトピックで以前に示したプライマリクラスターの JSON 分類の場合、リードレプリカクラスターの設定は次のとおりです。

{ "Classification": "hbase-site", "Properties": { "hbase.rootdir": "s3://my-bucket/my-hbase-rootdir"} }, { "Classification": "hbase", "Properties": { "hbase.emr.storageMode":"s3", "hbase.emr.readreplica.enabled":"true" } }

データの追加に伴うリードレプリカの同期化

リードレプリカは、プライマリクラスターが に書き込む HBase StoreFiles および メタデータを使用するためAmazon S3、リードレプリカはAmazon S3データストアと同じ最新状態になります。データを書き込むまでにプライマリクラスターとリードレプリカの間に生じる時間差を最小化するには、以下のガイダンスを参考にしてください。

  • 可能な限り、プライマリクラスターのデータを一括ロードします。詳細については、Apache ドキュメントの「一括ロード」HBaseを参照してください。

  • ストアファイルを Amazon S3 に書き込むフラッシュは、データの追加後、できるだけ早急に発生する必要があります。時間差が最小になるように手動でフラッシュするか、フラッシュ設定を調整します。

  • 圧縮が自動実行される場合、圧縮がトリガーされるときの不整合を避けるために手動圧縮を実行します。

  • リードレプリカクラスターで、メタデータが変更された場合 (HBaseリージョン分割や圧縮が発生したとき、テーブルが追加または削除されたときなど)、 refresh_meta コマンドを実行します。

  • リードレプリカクラスターで、レコードがテーブルに追加されるかテーブル内で変更された場合、refresh_hfiles コマンドを実行します。


					HBase リードレプリカとのデータの同期

永続HFile追跡

永続HFile追跡では、「hbase:storefile」というHBaseシステムテーブルを使用して、読み取りオペレーションに使用されるHFileパスを直接追跡します。テーブルには、追加データが追加されるにつれて新しいHFileパスが追加されますHBase。 これにより、重要な書き込みパスオペレーションのコミットメカニズムとしての名前変更HBaseオペレーションが削除され、ファイルシステムディレクトリのリストではなく「hbase:storefile」システムテーブルから読み取ることでHBaseリージョンを開くときの復旧時間が短縮されます。この機能はAmazon EMR、 バージョン 6.2.0 以降でデフォルトで有効になっており、手動移行ステップは必要ありません。

注記

HFile ストアファイルシステムテーブルを使用した永続HBase追跡は、HBaseリージョンレプリケーション機能をサポートしていません。HBase リージョンレプリケーションの詳細については、「Timeline-consistent High Available Reads」を参照してください。

永続的HFile追跡の無効化

EMR リリース 6.2.0 以降では、永続HFile追跡がデフォルトで有効になっています。永続的なHFile追跡を無効にするには、クラスターの起動時に次の設定オーバーライドを指定します。

{ "Classification": "hbase-site", "Properties": { "hbase.storefile.tracking.persist.enabled":"false", "hbase.hstore.engine.class":"org.apache.hadoop.hbase.regionserver.DefaultStoreEngine" } }
注記

Amazon EMR クラスターを再設定するときは、すべてのインスタンスグループを更新する必要があります。

手動で Storefile テーブルを同期する

新しい が作成されると、storefile テーブルHFilesは最新の状態に維持されます。ただし、何らかの理由で storefile テーブルがデータファイルと同期しなくなった場合は、次のコマンドを使用して手動でデータを同期できます。

オンラインリージョンの storefile テーブルを同期します。

hbase org.apache.hadoop.hbase.client.example.RefreshHFilesClient <table>

オフラインリージョンの storefile テーブルを同期します。

  • storefile テーブル znode を削除します。

    echo "ls /hbase/storefile/loaded" | sudo -u hbase hbase zkcli [<tableName>, hbase:namespace] # The TableName exists in the list echo "delete /hbase/storefile/loaded/<tableName>" | sudo -u hbase hbase zkcli # Delete the Table ZNode echo "ls /hbase/storefile/loaded" | sudo -u hbase hbase zkcli [hbase:namespace]
  • リージョンを割り当てます (「hbase シェル」で実行)。

    hbase cli> assign '<region name>'
  • 割り当てが失敗した場合。

    hbase cli> disable '<table name>' hbase cli> enable '<table name>'

Storefile テーブルのスケーリング

storefile テーブルは、デフォルトで 4 つのリージョンに分割されます。ストアファイルテーブルにまだ大量の書き込み負荷がかかっている場合は、テーブルをさらに手動で分割できます。

特定のホットリージョンを分割するには、次のコマンドを使用します (「hbase シェル」で実行します)。

hbase cli> split '<region name>'

テーブルを分割するには、次のコマンドを使用します (「hbase シェル」で実行します)。

hbase cli> split 'hbase:storefile'

運用上の考慮事項

HBase リージョンサーバーはBlockCache、 を使用してデータの読み取りをメモリに保存し、データの読み取りBucketCacheをローカルディスクに保存します。さらに、リージョンサーバーは、 MemStore を使用してメモリ内のデータ書き込みを保存し、先書きログを使用して HDFS にデータ書き込みを保存してから、 HBase StoreFiles の にデータが書き込まれAmazon S3ます。クラスターの読み込みパフォーマンスは、レコードがどのくらいの頻度でインメモリキャッシュまたはオンディスクキャッシュから取得できるかに関連しています。キャッシュミスにより、レコードが StoreFile の から読み取られAmazon S3るため、HDFS からの読み取りよりもレイテンシーと標準偏差が大幅に高くなります。さらに、Amazon S3 の最大要求率は、ローカルキャッシュから受理できるものよりも低くなるため、データのキャッシュは読み取り過多のワークロードにとって重要になります。Amazon S3 パフォーマンスの詳細については、の「パフォーマンスの最適化」を参照してくださいAmazon Simple Storage Service 開発者ガイド

パフォーマンスを向上させるには、EC2 インスタンスストレージに可能な限りデータセットをキャッシュすることをお勧めします。はリージョンサーバーの EC2 インスタンスストレージBucketCacheを使用するため、十分なインスタンスストアを備えた EC2 インスタンスタイプを選択し、必要なキャッシュサイズに対応するAmazon EBSストレージを追加できます。hbase.bucketcache.size プロパティを使用して、アタッチされたインスタンスストアおよび EBS ボリュームの BucketCache のサイズを増やすことができます。デフォルトの設定は 8,192 MB です。

書き込みの場合、マイナーおよびメジャー圧縮時のMemStoreフラッシュの頻度とStoreFiles存在数がリージョンサーバーの応答時間に大きく影響する可能性があります。最適なパフォーマンスを得るにはMemStore フラッシュとHRegionブロック乗数のサイズを大きくすることを検討してください。これにより、メジャー圧縮間の経過時間は長くなりますが、リードレプリカを使用した場合は整合性の遅延も長くなります。場合によっては、ファイルブロックのサイズを増やしてから (ただし 5 GB 未満まで)、EMRFS で Amazon S3 マルチパートアップロード機能を起動すると、パフォーマンスが向上することがあります。Amazon EMR のデフォルトのブロックサイズは 128 MB になっています。詳細については、「 」を参照してください。HDFS 構成. フラッシュと圧縮に関するパフォーマンスのベンチマークで 1 GB のブロックサイズを超えているお客様はほとんどいません。さらに、HBase圧縮StoreFilesが必要な数がより少ない場合に、圧縮とリージョンサーバーのパフォーマンスが最適になります。

大きなディレクトリの名前を変更する必要があるため、Amazon S3 でのテーブルの削除に長い時間がかかる場合があります。テーブルを削除する代わりに無効化することを検討してください。

古い WAL ファイルをクリーンアップしてファイルを保存するHBaseクリーナープロセスがあります。Amazon EMR リリースバージョン 5.17.0 以降では、クリーナーがグローバルに有効になっており、次の設定プロパティをクリーナーの動作の制御に使用できます。

設定プロパティ デフォルト値 説明

hbase.regionserver.hfilecleaner.large.thread.count

1

期限が切れた大規模な をクリーンアップするために割り当てられたスレッドの数HFiles。

hbase.regionserver.hfilecleaner.small.thread.count

1

クリーンアップに割り当てるスレッドの数。期限切れの小さい HFiles。

hbase.cleaner.scan.dir.concurrent.size

すべての使用可能なコアの 4 分の 1 に設定します。

oldWALs ディレクトリをスキャンするスレッドの数。

hbase.oldwals.cleaner.thread.size

2

WALs ディレクトリoldWALsの をクリーンアップするスレッドの数。

Amazon EMR 5.17.0 以前では、クリーナーオペレーションの負荷を実行すると、クエリパフォーマンスに影響する可能性があるため、ピークを過ぎた時間帯だけクリーナーを有効にすることをお勧めします。クリーナーには、次のHBaseシェルコマンドがあります。

  • cleaner_chore_enabled クリーナーが有効かどうかのクエリ。

  • cleaner_chore_run 手動でクリーナーを実行してファイルを削除します。

  • cleaner_chore_switch クリーナーを有効、または無効にし、クリーナーの以前の状態に返します。たとえば、cleaner_chore_switch true はクリーナーを有効にします。

HBase パフォーマンスチューニングAmazon S3における のプロパティ

HBase で を使用する場合、以下のパラメータを調整して、ワークロードのパフォーマンスを調整できますAmazon S3。

設定プロパティ デフォルト値 説明

hbase.bucketcache.size

8,192

ストレージ用にリージョンAmazon EC2サーバーインスタンスストアと EBS ボリュームで予約されているディスク容量 (BucketCacheMB)。設定は、すべてのリージョンサーバーインスタンスに適用されます。BucketCache サイズが大きいほど一般的にパフォーマンスが向上する

hbase.hregion.memstore.flush.size

134217728

Amazon S3 への Memstore フラッシュがトリガーされるデータ上限 (バイト単位)。

hbase.hregion.memstore.block.multiplier

4

更新がブロックされるMemStore上限を決定する乗数。MemStore を超えると、この値でhbase.hregion.memstore.flush.size乗算された更新はブロックされます。MemStore のフラッシュと圧縮により、更新がブロック解除される可能性があります。

hbase.hstore.blockingStoreFiles

10

更新StoreFilesがブロックされる前にストアに存在できる の最大数。

hbase.hregion.max.filesize

10737418240

リージョンが分割されるまでのリージョンの最大サイズ。

データ損失のないクラスターのシャットダウンと復元

Amazon EMR に書き込まれていないデータを損失することなく Amazon S3 クラスターをシャットダウンするには、MemStore キャッシュが Amazon S3 にフラッシュして新しい格納ファイルを書き込む必要があります。これを行うには、EMR クラスターに提供されているシェルスクリプトを実行することができます。これをステップとして追加するか、またはオンクラスター CLI を使用して直接実行できます。このスクリプトは、すべてのHBaseテーブルを無効にします。これにより、各リージョンサーバーの MemStore が にフラッシュされますAmazon S3。スクリプトが正常に完了すると、データは Amazon S3 に維持され、クラスターを終了できます。

次の設定ステップはクラスターにステップを追加する際に使用することができます。詳細については、『』の「CLI およびコンソールを使用した手順の作業」を参照してくださいAmazon EMR 管理ガイド

Name="Disable all tables",Jar="command-runner.jar",Args=["/bin/bash","/usr/lib/hbase/bin/disable_all_tables.sh"]

または、次の Bash コマンドを直接実行できます。

bash /usr/lib/hbase/bin/disable_all_tables.sh

同じHBaseデータを使用してクラスターを再起動するには、 で前のクラスターと同じAmazon S3場所を指定するAWS マネジメントコンソールか、 hbase.rootdir 設定プロパティを使用します。